diff options
author | Axel Lin <axel.lin@gmail.com> | 2012-09-17 04:53:54 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2012-09-19 07:40:56 -0400 |
commit | 8908dd806340513dacfd37b21e047946bca995d1 (patch) | |
tree | 15d58d5c45df471327bdc383aa6c0e87b93ede56 /drivers/hid/hid-wacom.c | |
parent | e3c399ee4afebda7fd0a96a748e665a26853c246 (diff) |
HID: wacom: Fix wacom_probe error handling
OLEDs/LED are not critical for tablet functioning thus ignore OLED/LED
initialisation failures.
This patch does clean up all the sysfs attribute files in error paths.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Tested-by: Przemo Firszt <przemo@firszt.eu>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/hid-wacom.c')
-rw-r--r-- | drivers/hid/hid-wacom.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/hid/hid-wacom.c b/drivers/hid/hid-wacom.c index 0f02358888a9..75b970f116ee 100644 --- a/drivers/hid/hid-wacom.c +++ b/drivers/hid/hid-wacom.c | |||
@@ -859,11 +859,9 @@ OLED_INIT(7); | |||
859 | if (hdev->product == USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) { | 859 | if (hdev->product == USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) { |
860 | sprintf(hdev->name, "%s", "Wacom Intuos4 WL"); | 860 | sprintf(hdev->name, "%s", "Wacom Intuos4 WL"); |
861 | ret = wacom_initialize_leds(hdev); | 861 | ret = wacom_initialize_leds(hdev); |
862 | if (ret) { | 862 | if (ret) |
863 | hid_warn(hdev, | 863 | hid_warn(hdev, |
864 | "can't create led attribute, err: %d\n", ret); | 864 | "can't create led attribute, err: %d\n", ret); |
865 | goto destroy_leds; | ||
866 | } | ||
867 | } | 865 | } |
868 | 866 | ||
869 | wdata->battery.properties = wacom_battery_props; | 867 | wdata->battery.properties = wacom_battery_props; |
@@ -876,8 +874,8 @@ OLED_INIT(7); | |||
876 | 874 | ||
877 | ret = power_supply_register(&hdev->dev, &wdata->battery); | 875 | ret = power_supply_register(&hdev->dev, &wdata->battery); |
878 | if (ret) { | 876 | if (ret) { |
879 | hid_warn(hdev, "can't create sysfs battery attribute, err: %d\n", | 877 | hid_err(hdev, "can't create sysfs battery attribute, err: %d\n", |
880 | ret); | 878 | ret); |
881 | goto err_battery; | 879 | goto err_battery; |
882 | } | 880 | } |
883 | 881 | ||
@@ -892,8 +890,8 @@ OLED_INIT(7); | |||
892 | 890 | ||
893 | ret = power_supply_register(&hdev->dev, &wdata->ac); | 891 | ret = power_supply_register(&hdev->dev, &wdata->ac); |
894 | if (ret) { | 892 | if (ret) { |
895 | hid_warn(hdev, | 893 | hid_err(hdev, |
896 | "can't create ac battery attribute, err: %d\n", ret); | 894 | "can't create ac battery attribute, err: %d\n", ret); |
897 | goto err_ac; | 895 | goto err_ac; |
898 | } | 896 | } |
899 | 897 | ||
@@ -903,10 +901,17 @@ OLED_INIT(7); | |||
903 | err_ac: | 901 | err_ac: |
904 | power_supply_unregister(&wdata->battery); | 902 | power_supply_unregister(&wdata->battery); |
905 | err_battery: | 903 | err_battery: |
904 | wacom_destroy_leds(hdev); | ||
905 | device_remove_file(&hdev->dev, &dev_attr_oled0_img); | ||
906 | device_remove_file(&hdev->dev, &dev_attr_oled1_img); | ||
907 | device_remove_file(&hdev->dev, &dev_attr_oled2_img); | ||
908 | device_remove_file(&hdev->dev, &dev_attr_oled3_img); | ||
909 | device_remove_file(&hdev->dev, &dev_attr_oled4_img); | ||
910 | device_remove_file(&hdev->dev, &dev_attr_oled5_img); | ||
911 | device_remove_file(&hdev->dev, &dev_attr_oled6_img); | ||
912 | device_remove_file(&hdev->dev, &dev_attr_oled7_img); | ||
906 | device_remove_file(&hdev->dev, &dev_attr_speed); | 913 | device_remove_file(&hdev->dev, &dev_attr_speed); |
907 | hid_hw_stop(hdev); | 914 | hid_hw_stop(hdev); |
908 | destroy_leds: | ||
909 | wacom_destroy_leds(hdev); | ||
910 | err_free: | 915 | err_free: |
911 | kfree(wdata); | 916 | kfree(wdata); |
912 | return ret; | 917 | return ret; |