PCI: hotplug: Embed hotplug_slot
[sfrench/cifs-2.6.git] / drivers / platform / x86 / eeepc-laptop.c
index 028b20f82962dbf76054b3467655334cb8927a4f..e6946a9beb5a352dd2ddbf967ed88ff9cef497eb 100644 (file)
@@ -177,7 +177,7 @@ struct eeepc_laptop {
        struct rfkill *wwan3g_rfkill;
        struct rfkill *wimax_rfkill;
 
-       struct hotplug_slot *hotplug_slot;
+       struct hotplug_slot hotplug_slot;
        struct mutex hotplug_lock;
 
        struct led_classdev tpd_led;
@@ -582,7 +582,7 @@ static void eeepc_rfkill_hotplug(struct eeepc_laptop *eeepc, acpi_handle handle)
        mutex_lock(&eeepc->hotplug_lock);
        pci_lock_rescan_remove();
 
-       if (!eeepc->hotplug_slot)
+       if (!eeepc->hotplug_slot.ops)
                goto out_unlock;
 
        port = acpi_get_pci_dev(handle);
@@ -715,8 +715,11 @@ static void eeepc_unregister_rfkill_notifier(struct eeepc_laptop *eeepc,
 static int eeepc_get_adapter_status(struct hotplug_slot *hotplug_slot,
                                    u8 *value)
 {
-       struct eeepc_laptop *eeepc = hotplug_slot->private;
-       int val = get_acpi(eeepc, CM_ASL_WLAN);
+       struct eeepc_laptop *eeepc;
+       int val;
+
+       eeepc = container_of(hotplug_slot, struct eeepc_laptop, hotplug_slot);
+       val = get_acpi(eeepc, CM_ASL_WLAN);
 
        if (val == 1 || val == 0)
                *value = val;
@@ -741,14 +744,9 @@ static int eeepc_setup_pci_hotplug(struct eeepc_laptop *eeepc)
                return -ENODEV;
        }
 
-       eeepc->hotplug_slot = kzalloc(sizeof(struct hotplug_slot), GFP_KERNEL);
-       if (!eeepc->hotplug_slot)
-               goto error_slot;
+       eeepc->hotplug_slot.ops = &eeepc_hotplug_slot_ops;
 
-       eeepc->hotplug_slot->private = eeepc;
-       eeepc->hotplug_slot->ops = &eeepc_hotplug_slot_ops;
-
-       ret = pci_hp_register(eeepc->hotplug_slot, bus, 0, "eeepc-wifi");
+       ret = pci_hp_register(&eeepc->hotplug_slot, bus, 0, "eeepc-wifi");
        if (ret) {
                pr_err("Unable to register hotplug slot - %d\n", ret);
                goto error_register;
@@ -757,9 +755,7 @@ static int eeepc_setup_pci_hotplug(struct eeepc_laptop *eeepc)
        return 0;
 
 error_register:
-       kfree(eeepc->hotplug_slot);
-       eeepc->hotplug_slot = NULL;
-error_slot:
+       eeepc->hotplug_slot.ops = NULL;
        return ret;
 }
 
@@ -820,10 +816,8 @@ static void eeepc_rfkill_exit(struct eeepc_laptop *eeepc)
                eeepc->wlan_rfkill = NULL;
        }
 
-       if (eeepc->hotplug_slot) {
-               pci_hp_deregister(eeepc->hotplug_slot);
-               kfree(eeepc->hotplug_slot);
-       }
+       if (eeepc->hotplug_slot.ops)
+               pci_hp_deregister(&eeepc->hotplug_slot);
 
        if (eeepc->bluetooth_rfkill) {
                rfkill_unregister(eeepc->bluetooth_rfkill);