From: Dmitry Torokhov 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); _