ACPI: fix sonypi ACPI driver registration to unregister on failure
Remove the assumption that acpi_bus_register_driver() returns the number of devices claimed. Returning the count is unreliable because devices may be hot-plugged in the future (admittedly not applicable for this driver). This also fixes a bug: if sonypi_acpi_driver was registered but found no devices, sonypi_exit() did not unregister it. Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
578b333bfe
commit
e4513a57ef
|
@ -512,7 +512,7 @@ static struct sonypi_device {
|
|||
|
||||
#ifdef CONFIG_ACPI
|
||||
static struct acpi_device *sonypi_acpi_device;
|
||||
static int acpi_enabled;
|
||||
static int acpi_driver_registered;
|
||||
#endif
|
||||
|
||||
static int sonypi_ec_write(u8 addr, u8 value)
|
||||
|
@ -869,7 +869,7 @@ found:
|
|||
sonypi_report_input_event(event);
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
if (acpi_enabled)
|
||||
if (sonypi_acpi_device)
|
||||
acpi_bus_generate_event(sonypi_acpi_device, 1, event);
|
||||
#endif
|
||||
|
||||
|
@ -1548,8 +1548,8 @@ static int __init sonypi_init(void)
|
|||
goto err_free_device;
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
if (acpi_bus_register_driver(&sonypi_acpi_driver) > 0)
|
||||
acpi_enabled = 1;
|
||||
if (acpi_bus_register_driver(&sonypi_acpi_driver) >= 0)
|
||||
acpi_driver_registered = 1;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
@ -1564,7 +1564,7 @@ static int __init sonypi_init(void)
|
|||
static void __exit sonypi_exit(void)
|
||||
{
|
||||
#ifdef CONFIG_ACPI
|
||||
if (acpi_enabled)
|
||||
if (acpi_driver_registered)
|
||||
acpi_bus_unregister_driver(&sonypi_acpi_driver);
|
||||
#endif
|
||||
platform_device_unregister(sonypi_platform_device);
|
||||
|
|
Loading…
Reference in New Issue