diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-13 18:21:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-13 18:21:34 -0400 |
commit | a21c1ea65615f5323575d84508637a9481ca79c6 (patch) | |
tree | 669d5bf3171cc42e82cc8396c61f56a48634313c /drivers/hid | |
parent | d700b0567132e894971325fbb452a8db9e781c13 (diff) | |
parent | 5939d9dfe4406a49d8688eb827d88abcaf233c42 (diff) |
Merge tag 'for-v4.1' of git://git.infradead.org/battery-2.6
Pull power supply and reset changes from Sebastian Reichel:
- new API for safe access of power supply function attrs
- devres support for power supply (un)registration
- new drivers / chips:
- generic syscon based poweroff driver
- iio & charger driver for da9150
- fuel gauge driver for axp288
- bq27x00: add support for bq27510
- bq2415x: add support for bq24157s
- twl4030-madc-battery: convert to iio consumer
- misc fixes
* tag 'for-v4.1' of git://git.infradead.org/battery-2.6: (66 commits)
power: twl4030_madc_battery: Add missing MODULE_ALIAS
power: twl4030-madc-battery: Convert to iio consumer.
dt: power: Add docs for generic SYSCON poweroff driver.
power: reset: Add generic SYSCON register mapped poweroff.
power: max17042_battery: add missed blank
power: max17042_battery: Use reg type instead of chip type
power/reset: at91: big endian fixes for atsama5d3x
power_supply: charger-manager: Fix dereferencing of ERR_PTR
HID: input: Fix NULL pointer dereference when power_supply_register fails
power: constify of_device_id array
power/reset/rmobile-reset.c: Fix !HAS_IOMEM build
power_supply: 88pm860x_charger: Fix possible NULL pointer dereference and use of initialized variable
arm: mach-pxa: Decrement the power supply's device reference counter
mfd: ab8500: Decrement the power supply's device reference counter
power_supply: bq2415x_charger: Decrement the power supply's device reference counter
power_supply: 88pm860x_charger: Decrement the power supply's device reference counter
x86/olpc/xo15/sci: Use newly added power_supply_put API
x86/olpc/xo1/sci: Use newly added power_supply_put API
power_supply: charger-manager: Decrement the power supply's device reference counter
power_supply: Increment power supply use counter when obtaining references
...
Diffstat (limited to 'drivers/hid')
-rw-r--r-- | drivers/hid/hid-input.c | 53 | ||||
-rw-r--r-- | drivers/hid/hid-sony.c | 43 | ||||
-rw-r--r-- | drivers/hid/hid-wiimote-modules.c | 41 | ||||
-rw-r--r-- | drivers/hid/hid-wiimote.h | 3 | ||||
-rw-r--r-- | drivers/hid/wacom.h | 8 | ||||
-rw-r--r-- | drivers/hid/wacom_sys.c | 70 |
6 files changed, 121 insertions, 97 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index 052869d0ab78..32c2da49bd5b 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -339,7 +339,7 @@ static int hidinput_get_battery_property(struct power_supply *psy, | |||
339 | enum power_supply_property prop, | 339 | enum power_supply_property prop, |
340 | union power_supply_propval *val) | 340 | union power_supply_propval *val) |
341 | { | 341 | { |
342 | struct hid_device *dev = container_of(psy, struct hid_device, battery); | 342 | struct hid_device *dev = power_supply_get_drvdata(psy); |
343 | int ret = 0; | 343 | int ret = 0; |
344 | __u8 *buf; | 344 | __u8 *buf; |
345 | 345 | ||
@@ -397,26 +397,32 @@ static int hidinput_get_battery_property(struct power_supply *psy, | |||
397 | 397 | ||
398 | static bool hidinput_setup_battery(struct hid_device *dev, unsigned report_type, struct hid_field *field) | 398 | static bool hidinput_setup_battery(struct hid_device *dev, unsigned report_type, struct hid_field *field) |
399 | { | 399 | { |
400 | struct power_supply *battery = &dev->battery; | 400 | struct power_supply_desc *psy_desc = NULL; |
401 | int ret; | 401 | struct power_supply_config psy_cfg = { .drv_data = dev, }; |
402 | unsigned quirks; | 402 | unsigned quirks; |
403 | s32 min, max; | 403 | s32 min, max; |
404 | 404 | ||
405 | if (field->usage->hid != HID_DC_BATTERYSTRENGTH) | 405 | if (field->usage->hid != HID_DC_BATTERYSTRENGTH) |
406 | return false; /* no match */ | 406 | return false; /* no match */ |
407 | 407 | ||
408 | if (battery->name != NULL) | 408 | if (dev->battery != NULL) |
409 | goto out; /* already initialized? */ | 409 | goto out; /* already initialized? */ |
410 | 410 | ||
411 | battery->name = kasprintf(GFP_KERNEL, "hid-%s-battery", dev->uniq); | 411 | psy_desc = kzalloc(sizeof(*psy_desc), GFP_KERNEL); |
412 | if (battery->name == NULL) | 412 | if (psy_desc == NULL) |
413 | goto out; | 413 | goto out; |
414 | 414 | ||
415 | battery->type = POWER_SUPPLY_TYPE_BATTERY; | 415 | psy_desc->name = kasprintf(GFP_KERNEL, "hid-%s-battery", dev->uniq); |
416 | battery->properties = hidinput_battery_props; | 416 | if (psy_desc->name == NULL) { |
417 | battery->num_properties = ARRAY_SIZE(hidinput_battery_props); | 417 | kfree(psy_desc); |
418 | battery->use_for_apm = 0; | 418 | goto out; |
419 | battery->get_property = hidinput_get_battery_property; | 419 | } |
420 | |||
421 | psy_desc->type = POWER_SUPPLY_TYPE_BATTERY; | ||
422 | psy_desc->properties = hidinput_battery_props; | ||
423 | psy_desc->num_properties = ARRAY_SIZE(hidinput_battery_props); | ||
424 | psy_desc->use_for_apm = 0; | ||
425 | psy_desc->get_property = hidinput_get_battery_property; | ||
420 | 426 | ||
421 | quirks = find_battery_quirk(dev); | 427 | quirks = find_battery_quirk(dev); |
422 | 428 | ||
@@ -439,27 +445,30 @@ static bool hidinput_setup_battery(struct hid_device *dev, unsigned report_type, | |||
439 | dev->battery_report_type = report_type; | 445 | dev->battery_report_type = report_type; |
440 | dev->battery_report_id = field->report->id; | 446 | dev->battery_report_id = field->report->id; |
441 | 447 | ||
442 | ret = power_supply_register(&dev->dev, battery); | 448 | dev->battery = power_supply_register(&dev->dev, psy_desc, &psy_cfg); |
443 | if (ret != 0) { | 449 | if (IS_ERR(dev->battery)) { |
444 | hid_warn(dev, "can't register power supply: %d\n", ret); | 450 | hid_warn(dev, "can't register power supply: %ld\n", |
445 | kfree(battery->name); | 451 | PTR_ERR(dev->battery)); |
446 | battery->name = NULL; | 452 | kfree(psy_desc->name); |
453 | kfree(psy_desc); | ||
454 | dev->battery = NULL; | ||
455 | } else { | ||
456 | power_supply_powers(dev->battery, &dev->dev); | ||
447 | } | 457 | } |
448 | 458 | ||
449 | power_supply_powers(battery, &dev->dev); | ||
450 | |||
451 | out: | 459 | out: |
452 | return true; | 460 | return true; |
453 | } | 461 | } |
454 | 462 | ||
455 | static void hidinput_cleanup_battery(struct hid_device *dev) | 463 | static void hidinput_cleanup_battery(struct hid_device *dev) |
456 | { | 464 | { |
457 | if (!dev->battery.name) | 465 | if (!dev->battery) |
458 | return; | 466 | return; |
459 | 467 | ||
460 | power_supply_unregister(&dev->battery); | 468 | power_supply_unregister(dev->battery); |
461 | kfree(dev->battery.name); | 469 | kfree(dev->battery->desc->name); |
462 | dev->battery.name = NULL; | 470 | kfree(dev->battery->desc); |
471 | dev->battery = NULL; | ||
463 | } | 472 | } |
464 | #else /* !CONFIG_HID_BATTERY_STRENGTH */ | 473 | #else /* !CONFIG_HID_BATTERY_STRENGTH */ |
465 | static bool hidinput_setup_battery(struct hid_device *dev, unsigned report_type, | 474 | static bool hidinput_setup_battery(struct hid_device *dev, unsigned report_type, |
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c index 1896c019e302..c906300cf667 100644 --- a/drivers/hid/hid-sony.c +++ b/drivers/hid/hid-sony.c | |||
@@ -815,7 +815,8 @@ struct sony_sc { | |||
815 | struct led_classdev *leds[MAX_LEDS]; | 815 | struct led_classdev *leds[MAX_LEDS]; |
816 | unsigned long quirks; | 816 | unsigned long quirks; |
817 | struct work_struct state_worker; | 817 | struct work_struct state_worker; |
818 | struct power_supply battery; | 818 | struct power_supply *battery; |
819 | struct power_supply_desc battery_desc; | ||
819 | int device_id; | 820 | int device_id; |
820 | __u8 *output_report_dmabuf; | 821 | __u8 *output_report_dmabuf; |
821 | 822 | ||
@@ -1660,7 +1661,7 @@ static int sony_battery_get_property(struct power_supply *psy, | |||
1660 | enum power_supply_property psp, | 1661 | enum power_supply_property psp, |
1661 | union power_supply_propval *val) | 1662 | union power_supply_propval *val) |
1662 | { | 1663 | { |
1663 | struct sony_sc *sc = container_of(psy, struct sony_sc, battery); | 1664 | struct sony_sc *sc = power_supply_get_drvdata(psy); |
1664 | unsigned long flags; | 1665 | unsigned long flags; |
1665 | int ret = 0; | 1666 | int ret = 0; |
1666 | u8 battery_charging, battery_capacity, cable_state; | 1667 | u8 battery_charging, battery_capacity, cable_state; |
@@ -1699,6 +1700,7 @@ static int sony_battery_get_property(struct power_supply *psy, | |||
1699 | 1700 | ||
1700 | static int sony_battery_probe(struct sony_sc *sc) | 1701 | static int sony_battery_probe(struct sony_sc *sc) |
1701 | { | 1702 | { |
1703 | struct power_supply_config psy_cfg = { .drv_data = sc, }; | ||
1702 | struct hid_device *hdev = sc->hdev; | 1704 | struct hid_device *hdev = sc->hdev; |
1703 | int ret; | 1705 | int ret; |
1704 | 1706 | ||
@@ -1708,39 +1710,42 @@ static int sony_battery_probe(struct sony_sc *sc) | |||
1708 | */ | 1710 | */ |
1709 | sc->battery_capacity = 100; | 1711 | sc->battery_capacity = 100; |
1710 | 1712 | ||
1711 | sc->battery.properties = sony_battery_props; | 1713 | sc->battery_desc.properties = sony_battery_props; |
1712 | sc->battery.num_properties = ARRAY_SIZE(sony_battery_props); | 1714 | sc->battery_desc.num_properties = ARRAY_SIZE(sony_battery_props); |
1713 | sc->battery.get_property = sony_battery_get_property; | 1715 | sc->battery_desc.get_property = sony_battery_get_property; |
1714 | sc->battery.type = POWER_SUPPLY_TYPE_BATTERY; | 1716 | sc->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY; |
1715 | sc->battery.use_for_apm = 0; | 1717 | sc->battery_desc.use_for_apm = 0; |
1716 | sc->battery.name = kasprintf(GFP_KERNEL, "sony_controller_battery_%pMR", | 1718 | sc->battery_desc.name = kasprintf(GFP_KERNEL, |
1717 | sc->mac_address); | 1719 | "sony_controller_battery_%pMR", |
1718 | if (!sc->battery.name) | 1720 | sc->mac_address); |
1721 | if (!sc->battery_desc.name) | ||
1719 | return -ENOMEM; | 1722 | return -ENOMEM; |
1720 | 1723 | ||
1721 | ret = power_supply_register(&hdev->dev, &sc->battery); | 1724 | sc->battery = power_supply_register(&hdev->dev, &sc->battery_desc, |
1722 | if (ret) { | 1725 | &psy_cfg); |
1726 | if (IS_ERR(sc->battery)) { | ||
1727 | ret = PTR_ERR(sc->battery); | ||
1723 | hid_err(hdev, "Unable to register battery device\n"); | 1728 | hid_err(hdev, "Unable to register battery device\n"); |
1724 | goto err_free; | 1729 | goto err_free; |
1725 | } | 1730 | } |
1726 | 1731 | ||
1727 | power_supply_powers(&sc->battery, &hdev->dev); | 1732 | power_supply_powers(sc->battery, &hdev->dev); |
1728 | return 0; | 1733 | return 0; |
1729 | 1734 | ||
1730 | err_free: | 1735 | err_free: |
1731 | kfree(sc->battery.name); | 1736 | kfree(sc->battery_desc.name); |
1732 | sc->battery.name = NULL; | 1737 | sc->battery_desc.name = NULL; |
1733 | return ret; | 1738 | return ret; |
1734 | } | 1739 | } |
1735 | 1740 | ||
1736 | static void sony_battery_remove(struct sony_sc *sc) | 1741 | static void sony_battery_remove(struct sony_sc *sc) |
1737 | { | 1742 | { |
1738 | if (!sc->battery.name) | 1743 | if (!sc->battery_desc.name) |
1739 | return; | 1744 | return; |
1740 | 1745 | ||
1741 | power_supply_unregister(&sc->battery); | 1746 | power_supply_unregister(sc->battery); |
1742 | kfree(sc->battery.name); | 1747 | kfree(sc->battery_desc.name); |
1743 | sc->battery.name = NULL; | 1748 | sc->battery_desc.name = NULL; |
1744 | } | 1749 | } |
1745 | 1750 | ||
1746 | /* | 1751 | /* |
diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c index 6b61f01e01e7..05e23c417d50 100644 --- a/drivers/hid/hid-wiimote-modules.c +++ b/drivers/hid/hid-wiimote-modules.c | |||
@@ -203,8 +203,7 @@ static int wiimod_battery_get_property(struct power_supply *psy, | |||
203 | enum power_supply_property psp, | 203 | enum power_supply_property psp, |
204 | union power_supply_propval *val) | 204 | union power_supply_propval *val) |
205 | { | 205 | { |
206 | struct wiimote_data *wdata = container_of(psy, struct wiimote_data, | 206 | struct wiimote_data *wdata = power_supply_get_drvdata(psy); |
207 | battery); | ||
208 | int ret = 0, state; | 207 | int ret = 0, state; |
209 | unsigned long flags; | 208 | unsigned long flags; |
210 | 209 | ||
@@ -238,42 +237,46 @@ static int wiimod_battery_get_property(struct power_supply *psy, | |||
238 | static int wiimod_battery_probe(const struct wiimod_ops *ops, | 237 | static int wiimod_battery_probe(const struct wiimod_ops *ops, |
239 | struct wiimote_data *wdata) | 238 | struct wiimote_data *wdata) |
240 | { | 239 | { |
240 | struct power_supply_config psy_cfg = { .drv_data = wdata, }; | ||
241 | int ret; | 241 | int ret; |
242 | 242 | ||
243 | wdata->battery.properties = wiimod_battery_props; | 243 | wdata->battery_desc.properties = wiimod_battery_props; |
244 | wdata->battery.num_properties = ARRAY_SIZE(wiimod_battery_props); | 244 | wdata->battery_desc.num_properties = ARRAY_SIZE(wiimod_battery_props); |
245 | wdata->battery.get_property = wiimod_battery_get_property; | 245 | wdata->battery_desc.get_property = wiimod_battery_get_property; |
246 | wdata->battery.type = POWER_SUPPLY_TYPE_BATTERY; | 246 | wdata->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY; |
247 | wdata->battery.use_for_apm = 0; | 247 | wdata->battery_desc.use_for_apm = 0; |
248 | wdata->battery.name = kasprintf(GFP_KERNEL, "wiimote_battery_%s", | 248 | wdata->battery_desc.name = kasprintf(GFP_KERNEL, "wiimote_battery_%s", |
249 | wdata->hdev->uniq); | 249 | wdata->hdev->uniq); |
250 | if (!wdata->battery.name) | 250 | if (!wdata->battery_desc.name) |
251 | return -ENOMEM; | 251 | return -ENOMEM; |
252 | 252 | ||
253 | ret = power_supply_register(&wdata->hdev->dev, &wdata->battery); | 253 | wdata->battery = power_supply_register(&wdata->hdev->dev, |
254 | if (ret) { | 254 | &wdata->battery_desc, |
255 | &psy_cfg); | ||
256 | if (IS_ERR(wdata->battery)) { | ||
255 | hid_err(wdata->hdev, "cannot register battery device\n"); | 257 | hid_err(wdata->hdev, "cannot register battery device\n"); |
258 | ret = PTR_ERR(wdata->battery); | ||
256 | goto err_free; | 259 | goto err_free; |
257 | } | 260 | } |
258 | 261 | ||
259 | power_supply_powers(&wdata->battery, &wdata->hdev->dev); | 262 | power_supply_powers(wdata->battery, &wdata->hdev->dev); |
260 | return 0; | 263 | return 0; |
261 | 264 | ||
262 | err_free: | 265 | err_free: |
263 | kfree(wdata->battery.name); | 266 | kfree(wdata->battery_desc.name); |
264 | wdata->battery.name = NULL; | 267 | wdata->battery_desc.name = NULL; |
265 | return ret; | 268 | return ret; |
266 | } | 269 | } |
267 | 270 | ||
268 | static void wiimod_battery_remove(const struct wiimod_ops *ops, | 271 | static void wiimod_battery_remove(const struct wiimod_ops *ops, |
269 | struct wiimote_data *wdata) | 272 | struct wiimote_data *wdata) |
270 | { | 273 | { |
271 | if (!wdata->battery.name) | 274 | if (!wdata->battery_desc.name) |
272 | return; | 275 | return; |
273 | 276 | ||
274 | power_supply_unregister(&wdata->battery); | 277 | power_supply_unregister(wdata->battery); |
275 | kfree(wdata->battery.name); | 278 | kfree(wdata->battery_desc.name); |
276 | wdata->battery.name = NULL; | 279 | wdata->battery_desc.name = NULL; |
277 | } | 280 | } |
278 | 281 | ||
279 | static const struct wiimod_ops wiimod_battery = { | 282 | static const struct wiimod_ops wiimod_battery = { |
diff --git a/drivers/hid/hid-wiimote.h b/drivers/hid/hid-wiimote.h index 10934aa129fb..875694d43e4d 100644 --- a/drivers/hid/hid-wiimote.h +++ b/drivers/hid/hid-wiimote.h | |||
@@ -147,7 +147,8 @@ struct wiimote_data { | |||
147 | struct led_classdev *leds[4]; | 147 | struct led_classdev *leds[4]; |
148 | struct input_dev *accel; | 148 | struct input_dev *accel; |
149 | struct input_dev *ir; | 149 | struct input_dev *ir; |
150 | struct power_supply battery; | 150 | struct power_supply *battery; |
151 | struct power_supply_desc battery_desc; | ||
151 | struct input_dev *mp; | 152 | struct input_dev *mp; |
152 | struct timer_list timer; | 153 | struct timer_list timer; |
153 | struct wiimote_debug *debug; | 154 | struct wiimote_debug *debug; |
diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h index 7db432809e9e..0d0d0dd89d17 100644 --- a/drivers/hid/wacom.h +++ b/drivers/hid/wacom.h | |||
@@ -119,8 +119,10 @@ struct wacom { | |||
119 | u8 img_lum; /* OLED matrix display brightness */ | 119 | u8 img_lum; /* OLED matrix display brightness */ |
120 | } led; | 120 | } led; |
121 | bool led_initialized; | 121 | bool led_initialized; |
122 | struct power_supply battery; | 122 | struct power_supply *battery; |
123 | struct power_supply ac; | 123 | struct power_supply *ac; |
124 | struct power_supply_desc battery_desc; | ||
125 | struct power_supply_desc ac_desc; | ||
124 | }; | 126 | }; |
125 | 127 | ||
126 | static inline void wacom_schedule_work(struct wacom_wac *wacom_wac) | 128 | static inline void wacom_schedule_work(struct wacom_wac *wacom_wac) |
@@ -133,7 +135,7 @@ static inline void wacom_notify_battery(struct wacom_wac *wacom_wac) | |||
133 | { | 135 | { |
134 | struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac); | 136 | struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac); |
135 | 137 | ||
136 | power_supply_changed(&wacom->battery); | 138 | power_supply_changed(wacom->battery); |
137 | } | 139 | } |
138 | 140 | ||
139 | extern const struct hid_device_id wacom_ids[]; | 141 | extern const struct hid_device_id wacom_ids[]; |
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c index f0568a7e6de9..ba9af470bea0 100644 --- a/drivers/hid/wacom_sys.c +++ b/drivers/hid/wacom_sys.c | |||
@@ -944,7 +944,7 @@ static int wacom_battery_get_property(struct power_supply *psy, | |||
944 | enum power_supply_property psp, | 944 | enum power_supply_property psp, |
945 | union power_supply_propval *val) | 945 | union power_supply_propval *val) |
946 | { | 946 | { |
947 | struct wacom *wacom = container_of(psy, struct wacom, battery); | 947 | struct wacom *wacom = power_supply_get_drvdata(psy); |
948 | int ret = 0; | 948 | int ret = 0; |
949 | 949 | ||
950 | switch (psp) { | 950 | switch (psp) { |
@@ -976,7 +976,7 @@ static int wacom_ac_get_property(struct power_supply *psy, | |||
976 | enum power_supply_property psp, | 976 | enum power_supply_property psp, |
977 | union power_supply_propval *val) | 977 | union power_supply_propval *val) |
978 | { | 978 | { |
979 | struct wacom *wacom = container_of(psy, struct wacom, ac); | 979 | struct wacom *wacom = power_supply_get_drvdata(psy); |
980 | int ret = 0; | 980 | int ret = 0; |
981 | 981 | ||
982 | switch (psp) { | 982 | switch (psp) { |
@@ -998,42 +998,46 @@ static int wacom_ac_get_property(struct power_supply *psy, | |||
998 | static int wacom_initialize_battery(struct wacom *wacom) | 998 | static int wacom_initialize_battery(struct wacom *wacom) |
999 | { | 999 | { |
1000 | static atomic_t battery_no = ATOMIC_INIT(0); | 1000 | static atomic_t battery_no = ATOMIC_INIT(0); |
1001 | int error; | 1001 | struct power_supply_config psy_cfg = { .drv_data = wacom, }; |
1002 | unsigned long n; | 1002 | unsigned long n; |
1003 | 1003 | ||
1004 | if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) { | 1004 | if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) { |
1005 | struct power_supply_desc *bat_desc = &wacom->battery_desc; | ||
1006 | struct power_supply_desc *ac_desc = &wacom->ac_desc; | ||
1005 | n = atomic_inc_return(&battery_no) - 1; | 1007 | n = atomic_inc_return(&battery_no) - 1; |
1006 | 1008 | ||
1007 | wacom->battery.properties = wacom_battery_props; | 1009 | bat_desc->properties = wacom_battery_props; |
1008 | wacom->battery.num_properties = ARRAY_SIZE(wacom_battery_props); | 1010 | bat_desc->num_properties = ARRAY_SIZE(wacom_battery_props); |
1009 | wacom->battery.get_property = wacom_battery_get_property; | 1011 | bat_desc->get_property = wacom_battery_get_property; |
1010 | sprintf(wacom->wacom_wac.bat_name, "wacom_battery_%ld", n); | 1012 | sprintf(wacom->wacom_wac.bat_name, "wacom_battery_%ld", n); |
1011 | wacom->battery.name = wacom->wacom_wac.bat_name; | 1013 | bat_desc->name = wacom->wacom_wac.bat_name; |
1012 | wacom->battery.type = POWER_SUPPLY_TYPE_BATTERY; | 1014 | bat_desc->type = POWER_SUPPLY_TYPE_BATTERY; |
1013 | wacom->battery.use_for_apm = 0; | 1015 | bat_desc->use_for_apm = 0; |
1014 | 1016 | ||
1015 | wacom->ac.properties = wacom_ac_props; | 1017 | ac_desc->properties = wacom_ac_props; |
1016 | wacom->ac.num_properties = ARRAY_SIZE(wacom_ac_props); | 1018 | ac_desc->num_properties = ARRAY_SIZE(wacom_ac_props); |
1017 | wacom->ac.get_property = wacom_ac_get_property; | 1019 | ac_desc->get_property = wacom_ac_get_property; |
1018 | sprintf(wacom->wacom_wac.ac_name, "wacom_ac_%ld", n); | 1020 | sprintf(wacom->wacom_wac.ac_name, "wacom_ac_%ld", n); |
1019 | wacom->ac.name = wacom->wacom_wac.ac_name; | 1021 | ac_desc->name = wacom->wacom_wac.ac_name; |
1020 | wacom->ac.type = POWER_SUPPLY_TYPE_MAINS; | 1022 | ac_desc->type = POWER_SUPPLY_TYPE_MAINS; |
1021 | wacom->ac.use_for_apm = 0; | 1023 | ac_desc->use_for_apm = 0; |
1022 | 1024 | ||
1023 | error = power_supply_register(&wacom->hdev->dev, | 1025 | wacom->battery = power_supply_register(&wacom->hdev->dev, |
1024 | &wacom->battery); | 1026 | &wacom->battery_desc, &psy_cfg); |
1025 | if (error) | 1027 | if (IS_ERR(wacom->battery)) |
1026 | return error; | 1028 | return PTR_ERR(wacom->battery); |
1027 | 1029 | ||
1028 | power_supply_powers(&wacom->battery, &wacom->hdev->dev); | 1030 | power_supply_powers(wacom->battery, &wacom->hdev->dev); |
1029 | 1031 | ||
1030 | error = power_supply_register(&wacom->hdev->dev, &wacom->ac); | 1032 | wacom->ac = power_supply_register(&wacom->hdev->dev, |
1031 | if (error) { | 1033 | &wacom->ac_desc, |
1032 | power_supply_unregister(&wacom->battery); | 1034 | &psy_cfg); |
1033 | return error; | 1035 | if (IS_ERR(wacom->ac)) { |
1036 | power_supply_unregister(wacom->battery); | ||
1037 | return PTR_ERR(wacom->ac); | ||
1034 | } | 1038 | } |
1035 | 1039 | ||
1036 | power_supply_powers(&wacom->ac, &wacom->hdev->dev); | 1040 | power_supply_powers(wacom->ac, &wacom->hdev->dev); |
1037 | } | 1041 | } |
1038 | 1042 | ||
1039 | return 0; | 1043 | return 0; |
@@ -1042,11 +1046,11 @@ static int wacom_initialize_battery(struct wacom *wacom) | |||
1042 | static void wacom_destroy_battery(struct wacom *wacom) | 1046 | static void wacom_destroy_battery(struct wacom *wacom) |
1043 | { | 1047 | { |
1044 | if ((wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) && | 1048 | if ((wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) && |
1045 | wacom->battery.dev) { | 1049 | wacom->battery) { |
1046 | power_supply_unregister(&wacom->battery); | 1050 | power_supply_unregister(wacom->battery); |
1047 | wacom->battery.dev = NULL; | 1051 | wacom->battery = NULL; |
1048 | power_supply_unregister(&wacom->ac); | 1052 | power_supply_unregister(wacom->ac); |
1049 | wacom->ac.dev = NULL; | 1053 | wacom->ac = NULL; |
1050 | } | 1054 | } |
1051 | } | 1055 | } |
1052 | 1056 | ||