wacom_sys.c (d17d1f171158cc0663b072d91265cc8a6b477c77) | wacom_sys.c (b189da901536cf7e9c95c17dd159cfbaddcc0384) |
---|---|
1/* 2 * drivers/input/tablet/wacom_sys.c 3 * 4 * USB Wacom tablet support - system specific code 5 */ 6 7/* 8 * This program is free software; you can redistribute it and/or modify --- 1068 unchanged lines hidden (view full) --- 1077 break; 1078 } 1079 return ret; 1080} 1081 1082static int wacom_initialize_battery(struct wacom *wacom) 1083{ 1084 static atomic_t battery_no = ATOMIC_INIT(0); | 1/* 2 * drivers/input/tablet/wacom_sys.c 3 * 4 * USB Wacom tablet support - system specific code 5 */ 6 7/* 8 * This program is free software; you can redistribute it and/or modify --- 1068 unchanged lines hidden (view full) --- 1077 break; 1078 } 1079 return ret; 1080} 1081 1082static int wacom_initialize_battery(struct wacom *wacom) 1083{ 1084 static atomic_t battery_no = ATOMIC_INIT(0); |
1085 struct device *dev = &wacom->hdev->dev; |
|
1085 struct power_supply_config psy_cfg = { .drv_data = wacom, }; | 1086 struct power_supply_config psy_cfg = { .drv_data = wacom, }; |
1087 struct power_supply_desc *bat_desc = &wacom->battery_desc; |
|
1086 unsigned long n; | 1088 unsigned long n; |
1089 int error; |
|
1087 | 1090 |
1091 if (!devres_open_group(dev, bat_desc, GFP_KERNEL)) 1092 return -ENOMEM; 1093 |
|
1088 if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) { | 1094 if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) { |
1089 struct power_supply_desc *bat_desc = &wacom->battery_desc; | |
1090 struct power_supply_desc *ac_desc = &wacom->ac_desc; 1091 n = atomic_inc_return(&battery_no) - 1; 1092 1093 bat_desc->properties = wacom_battery_props; 1094 bat_desc->num_properties = ARRAY_SIZE(wacom_battery_props); 1095 bat_desc->get_property = wacom_battery_get_property; 1096 sprintf(wacom->wacom_wac.bat_name, "wacom_battery_%ld", n); 1097 bat_desc->name = wacom->wacom_wac.bat_name; 1098 bat_desc->type = POWER_SUPPLY_TYPE_BATTERY; 1099 bat_desc->use_for_apm = 0; 1100 1101 ac_desc->properties = wacom_ac_props; 1102 ac_desc->num_properties = ARRAY_SIZE(wacom_ac_props); 1103 ac_desc->get_property = wacom_ac_get_property; 1104 sprintf(wacom->wacom_wac.ac_name, "wacom_ac_%ld", n); 1105 ac_desc->name = wacom->wacom_wac.ac_name; 1106 ac_desc->type = POWER_SUPPLY_TYPE_MAINS; 1107 ac_desc->use_for_apm = 0; 1108 | 1095 struct power_supply_desc *ac_desc = &wacom->ac_desc; 1096 n = atomic_inc_return(&battery_no) - 1; 1097 1098 bat_desc->properties = wacom_battery_props; 1099 bat_desc->num_properties = ARRAY_SIZE(wacom_battery_props); 1100 bat_desc->get_property = wacom_battery_get_property; 1101 sprintf(wacom->wacom_wac.bat_name, "wacom_battery_%ld", n); 1102 bat_desc->name = wacom->wacom_wac.bat_name; 1103 bat_desc->type = POWER_SUPPLY_TYPE_BATTERY; 1104 bat_desc->use_for_apm = 0; 1105 1106 ac_desc->properties = wacom_ac_props; 1107 ac_desc->num_properties = ARRAY_SIZE(wacom_ac_props); 1108 ac_desc->get_property = wacom_ac_get_property; 1109 sprintf(wacom->wacom_wac.ac_name, "wacom_ac_%ld", n); 1110 ac_desc->name = wacom->wacom_wac.ac_name; 1111 ac_desc->type = POWER_SUPPLY_TYPE_MAINS; 1112 ac_desc->use_for_apm = 0; 1113 |
1109 wacom->battery = power_supply_register(&wacom->hdev->dev, 1110 &wacom->battery_desc, &psy_cfg); 1111 if (IS_ERR(wacom->battery)) 1112 return PTR_ERR(wacom->battery); | 1114 wacom->battery = devm_power_supply_register(dev, 1115 &wacom->battery_desc, 1116 &psy_cfg); 1117 if (IS_ERR(wacom->battery)) { 1118 error = PTR_ERR(wacom->battery); 1119 goto err; 1120 } |
1113 1114 power_supply_powers(wacom->battery, &wacom->hdev->dev); 1115 | 1121 1122 power_supply_powers(wacom->battery, &wacom->hdev->dev); 1123 |
1116 wacom->ac = power_supply_register(&wacom->hdev->dev, 1117 &wacom->ac_desc, 1118 &psy_cfg); | 1124 wacom->ac = devm_power_supply_register(dev, 1125 &wacom->ac_desc, 1126 &psy_cfg); |
1119 if (IS_ERR(wacom->ac)) { | 1127 if (IS_ERR(wacom->ac)) { |
1120 power_supply_unregister(wacom->battery); 1121 return PTR_ERR(wacom->ac); | 1128 error = PTR_ERR(wacom->ac); 1129 goto err; |
1122 } 1123 1124 power_supply_powers(wacom->ac, &wacom->hdev->dev); 1125 } 1126 | 1130 } 1131 1132 power_supply_powers(wacom->ac, &wacom->hdev->dev); 1133 } 1134 |
1135 devres_close_group(dev, bat_desc); |
|
1127 return 0; | 1136 return 0; |
1137 1138err: 1139 devres_release_group(dev, bat_desc); 1140 return error; |
|
1128} 1129 1130static void wacom_destroy_battery(struct wacom *wacom) 1131{ 1132 if (wacom->battery) { | 1141} 1142 1143static void wacom_destroy_battery(struct wacom *wacom) 1144{ 1145 if (wacom->battery) { |
1133 power_supply_unregister(wacom->battery); | 1146 devres_release_group(&wacom->hdev->dev, &wacom->battery_desc); |
1134 wacom->battery = NULL; | 1147 wacom->battery = NULL; |
1135 power_supply_unregister(wacom->ac); | |
1136 wacom->ac = NULL; 1137 } 1138} 1139 1140static ssize_t wacom_show_speed(struct device *dev, 1141 struct device_attribute 1142 *attr, char *buf) 1143{ --- 582 unchanged lines hidden (view full) --- 1726 hid_hw_stop(hdev); 1727fail_hw_start: 1728 kobject_put(wacom->remote_dir); 1729fail_remote: 1730 wacom_destroy_leds(wacom); 1731fail_leds: 1732 wacom_clean_inputs(wacom); 1733fail_register_inputs: | 1148 wacom->ac = NULL; 1149 } 1150} 1151 1152static ssize_t wacom_show_speed(struct device *dev, 1153 struct device_attribute 1154 *attr, char *buf) 1155{ --- 582 unchanged lines hidden (view full) --- 1738 hid_hw_stop(hdev); 1739fail_hw_start: 1740 kobject_put(wacom->remote_dir); 1741fail_remote: 1742 wacom_destroy_leds(wacom); 1743fail_leds: 1744 wacom_clean_inputs(wacom); 1745fail_register_inputs: |
1734 wacom_destroy_battery(wacom); | |
1735fail_battery: 1736 wacom_remove_shared_data(wacom); 1737fail_shared_data: 1738fail_parsed: 1739fail_allocate_inputs: 1740 wacom_clean_inputs(wacom); 1741 return error; 1742} --- 172 unchanged lines hidden (view full) --- 1915 1916 cancel_work_sync(&wacom->wireless_work); 1917 cancel_work_sync(&wacom->battery_work); 1918 kobject_put(wacom->remote_dir); 1919 wacom_destroy_leds(wacom); 1920 wacom_clean_inputs(wacom); 1921 if (hdev->bus == BUS_BLUETOOTH) 1922 device_remove_file(&hdev->dev, &dev_attr_speed); | 1746fail_battery: 1747 wacom_remove_shared_data(wacom); 1748fail_shared_data: 1749fail_parsed: 1750fail_allocate_inputs: 1751 wacom_clean_inputs(wacom); 1752 return error; 1753} --- 172 unchanged lines hidden (view full) --- 1926 1927 cancel_work_sync(&wacom->wireless_work); 1928 cancel_work_sync(&wacom->battery_work); 1929 kobject_put(wacom->remote_dir); 1930 wacom_destroy_leds(wacom); 1931 wacom_clean_inputs(wacom); 1932 if (hdev->bus == BUS_BLUETOOTH) 1933 device_remove_file(&hdev->dev, &dev_attr_speed); |
1923 wacom_destroy_battery(wacom); | |
1924 wacom_remove_shared_data(wacom); 1925 1926 hid_set_drvdata(hdev, NULL); 1927 kfree(wacom); 1928} 1929 1930#ifdef CONFIG_PM 1931static int wacom_resume(struct hid_device *hdev) --- 39 unchanged lines hidden --- | 1934 wacom_remove_shared_data(wacom); 1935 1936 hid_set_drvdata(hdev, NULL); 1937 kfree(wacom); 1938} 1939 1940#ifdef CONFIG_PM 1941static int wacom_resume(struct hid_device *hdev) --- 39 unchanged lines hidden --- |