From: Arnaud Patard (Rtp) The firmware_sample_driver driver from Documentation/firmware_class/ is initializing the ghost device but doesn't register it, leading to a failure in fw_register_device. To fix it, one only needs to use device_register instead of device_initialize. Signed-off-by: Arnaud Patard Cc: Greg KH Signed-off-by: Andrew Morton --- Documentation/firmware_class/firmware_sample_driver.c | 18 ++++++++-- 1 file changed, 15 insertions(+), 3 deletions(-) diff -puN Documentation/firmware_class/firmware_sample_driver.c~fix-firmware-sample-code Documentation/firmware_class/firmware_sample_driver.c --- a/Documentation/firmware_class/firmware_sample_driver.c~fix-firmware-sample-code +++ a/Documentation/firmware_class/firmware_sample_driver.c @@ -13,13 +13,17 @@ #include #include -#include "linux/firmware.h" +#include + +void sample_release(struct device *dev) +{ +} static struct device ghost_device = { .bus_id = "ghost0", + .release = sample_release, }; - static void sample_firmware_load(char *firmware, int size) { u8 buf[size+1]; @@ -97,7 +101,14 @@ static void sample_probe_async(void) static int sample_init(void) { - device_initialize(&ghost_device); + int err; + + err = device_register(&ghost_device); + if (err) { + printk(KERN_ERR "device_register failed (%d)\n",err); + return err; + } + /* since there is no real hardware insertion I just call the * sample probe functions here */ sample_probe_specific(); @@ -107,6 +118,7 @@ static int sample_init(void) } static void __exit sample_exit(void) { + device_unregister(&ghost_device); } module_init (sample_init); _