From: Dmitry Torokhov <dtor_core@ameritech.net>

Do not call hotplug until firmware class device is completely instantiated.


---

 drivers/base/firmware_class.c |    6 ++++++
 1 files changed, 6 insertions(+)

diff -puN drivers/base/firmware_class.c~firmware-delay-hotplug drivers/base/firmware_class.c
--- 25/drivers/base/firmware_class.c~firmware-delay-hotplug	2004-02-28 22:48:17.000000000 -0800
+++ 25-akpm/drivers/base/firmware_class.c	2004-02-28 22:48:17.000000000 -0800
@@ -27,6 +27,7 @@ enum {
 	FW_STATUS_LOADING,
 	FW_STATUS_DONE,
 	FW_STATUS_ABORT,
+	FW_STATUS_READY,
 };
 
 static int loading_timeout = 10;	/* In seconds */
@@ -96,6 +97,9 @@ firmware_class_hotplug(struct class_devi
 	int i = 0;
 	char *scratch = buffer;
 
+	if (!test_bit(FW_STATUS_READY, &fw_priv->status))
+		return -ENODEV;
+
 	if (buffer_size < (FIRMWARE_NAME_MAX + 10))
 		return -ENOMEM;
 	if (num_envp < 1)
@@ -362,6 +366,7 @@ fw_setup_class_device(struct firmware *f
 		goto error_unreg;
 	}
 
+	set_bit(FW_STATUS_READY, &fw_priv->status);
 	*class_dev_p = class_dev;
 	goto out;
 
@@ -415,6 +420,7 @@ request_firmware(const struct firmware *
 		add_timer(&fw_priv->timeout);
 	}
 
+	kobject_hotplug("add", &class_dev->kobj);
 	wait_for_completion(&fw_priv->completion);
 	set_bit(FW_STATUS_DONE, &fw_priv->status);
 

_