|
@@ -509,6 +509,38 @@ static struct attribute_group platform_attribute_group = {
|
|
|
.attrs = platform_attributes
|
|
|
};
|
|
|
|
|
|
+static int eeepc_platform_init(void)
|
|
|
+{
|
|
|
+ int result;
|
|
|
+
|
|
|
+ platform_device = platform_device_alloc(EEEPC_HOTK_FILE, -1);
|
|
|
+ if (!platform_device)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ result = platform_device_add(platform_device);
|
|
|
+ if (result)
|
|
|
+ goto fail_platform_device;
|
|
|
+
|
|
|
+ result = sysfs_create_group(&platform_device->dev.kobj,
|
|
|
+ &platform_attribute_group);
|
|
|
+ if (result)
|
|
|
+ goto fail_sysfs;
|
|
|
+ return 0;
|
|
|
+
|
|
|
+fail_sysfs:
|
|
|
+ platform_device_del(platform_device);
|
|
|
+fail_platform_device:
|
|
|
+ platform_device_put(platform_device);
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+static void eeepc_platform_exit(void)
|
|
|
+{
|
|
|
+ sysfs_remove_group(&platform_device->dev.kobj,
|
|
|
+ &platform_attribute_group);
|
|
|
+ platform_device_unregister(platform_device);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* LEDs
|
|
|
*/
|
|
@@ -1276,22 +1308,12 @@ static int __devinit eeepc_hotk_add(struct acpi_device *device)
|
|
|
|
|
|
result = eeepc_hotk_init();
|
|
|
if (result)
|
|
|
- goto fail_platform_device1;
|
|
|
+ goto fail_platform;
|
|
|
eeepc_enable_camera();
|
|
|
|
|
|
- /* Register platform stuff */
|
|
|
- platform_device = platform_device_alloc(EEEPC_HOTK_FILE, -1);
|
|
|
- if (!platform_device) {
|
|
|
- result = -ENOMEM;
|
|
|
- goto fail_platform_device1;
|
|
|
- }
|
|
|
- result = platform_device_add(platform_device);
|
|
|
+ result = eeepc_platform_init();
|
|
|
if (result)
|
|
|
- goto fail_platform_device2;
|
|
|
- result = sysfs_create_group(&platform_device->dev.kobj,
|
|
|
- &platform_attribute_group);
|
|
|
- if (result)
|
|
|
- goto fail_sysfs;
|
|
|
+ goto fail_platform;
|
|
|
|
|
|
dev = &platform_device->dev;
|
|
|
|
|
@@ -1300,8 +1322,7 @@ static int __devinit eeepc_hotk_add(struct acpi_device *device)
|
|
|
if (result)
|
|
|
goto fail_backlight;
|
|
|
} else
|
|
|
- pr_info("Backlight controlled by ACPI video "
|
|
|
- "driver\n");
|
|
|
+ pr_info("Backlight controlled by ACPI video driver\n");
|
|
|
|
|
|
result = eeepc_input_init(dev);
|
|
|
if (result)
|
|
@@ -1330,13 +1351,8 @@ fail_hwmon:
|
|
|
fail_input:
|
|
|
eeepc_backlight_exit();
|
|
|
fail_backlight:
|
|
|
- sysfs_remove_group(&platform_device->dev.kobj,
|
|
|
- &platform_attribute_group);
|
|
|
-fail_sysfs:
|
|
|
- platform_device_del(platform_device);
|
|
|
-fail_platform_device2:
|
|
|
- platform_device_put(platform_device);
|
|
|
-fail_platform_device1:
|
|
|
+ eeepc_platform_exit();
|
|
|
+fail_platform:
|
|
|
kfree(ehotk);
|
|
|
|
|
|
return result;
|
|
@@ -1349,9 +1365,7 @@ static int eeepc_hotk_remove(struct acpi_device *device, int type)
|
|
|
eeepc_input_exit();
|
|
|
eeepc_hwmon_exit();
|
|
|
eeepc_led_exit();
|
|
|
- sysfs_remove_group(&platform_device->dev.kobj,
|
|
|
- &platform_attribute_group);
|
|
|
- platform_device_unregister(platform_device);
|
|
|
+ eeepc_platform_exit();
|
|
|
|
|
|
kfree(ehotk);
|
|
|
return 0;
|