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 ---