Simplifying the error code paths. We need to keep wacom_destroy_battery() around for now as the wireless module and the remotes are using it to dynamically remove the battery supply on disconnect.
Signed-off-by: Benjamin Tissoires <benjamin.tissoi...@redhat.com> Acked-by: Ping Cheng <pi...@wacom.com> Signed-off-by: Jiri Kosina <jkos...@suse.cz> [aaron.sko...@wacom.com: Imported into input-wacom repository (b189da9)] Signed-off-by: Aaron Armstrong Skomra <aaron.sko...@wacom.com> [aaron.sko...@wacom.com: Backported from input-wacom repository (f1754f8)] Signed-off-by: Aaron Armstrong Skomra <aaron.sko...@wacom.com> --- 3.17/wacom_sys.c | 64 +++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/3.17/wacom_sys.c b/3.17/wacom_sys.c index c79a854..f248979 100644 --- a/3.17/wacom_sys.c +++ b/3.17/wacom_sys.c @@ -1094,12 +1094,16 @@ static int wacom_ac_get_property(struct power_supply *psy, static int wacom_initialize_battery(struct wacom *wacom) { static atomic_t battery_no = ATOMIC_INIT(0); + struct device *dev = &wacom->hdev->dev; + int error; + unsigned long n; #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) struct power_supply_config psy_cfg = { .drv_data = wacom, }; -#else - int error; + struct power_supply_desc *bat_desc = &WACOM_POWERSUPPLY_DESC(wacom->battery); + + if (!devres_open_group(dev, bat_desc, GFP_KERNEL)) + return -ENOMEM; #endif - unsigned long n; if (wacom->wacom_wac.features.quirks & WACOM_QUIRK_BATTERY) { n = atomic_inc_return(&battery_no) - 1; @@ -1121,52 +1125,66 @@ static int wacom_initialize_battery(struct wacom *wacom) WACOM_POWERSUPPLY_DESC(wacom->battery).use_for_apm = 0; #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) - wacom->battery = power_supply_register(&wacom->hdev->dev, - &WACOM_POWERSUPPLY_DESC(wacom->battery), - &psy_cfg); - if (IS_ERR(wacom->battery)) - return PTR_ERR(wacom->battery); + wacom->battery = devm_power_supply_register(dev, + &WACOM_POWERSUPPLY_DESC(wacom->battery), + &psy_cfg); + if (IS_ERR(wacom->battery)) { + error = PTR_ERR(wacom->battery); + goto err; + } #else - error = power_supply_register(&wacom->hdev->dev, + error = power_supply_register(dev, &wacom->battery); if (error) return error; #endif - power_supply_powers(WACOM_POWERSUPPLY_REF(wacom->battery), &wacom->hdev->dev); + power_supply_powers(WACOM_POWERSUPPLY_REF(wacom->battery), dev); #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) - wacom->ac = power_supply_register(&wacom->hdev->dev, - &WACOM_POWERSUPPLY_DESC(wacom->ac), - &psy_cfg - ); - + wacom->ac = devm_power_supply_register(dev, + &WACOM_POWERSUPPLY_DESC(wacom->battery), + &psy_cfg); if (IS_ERR(wacom->ac)) { - power_supply_unregister(wacom->battery); - return PTR_ERR(wacom->ac); + error = PTR_ERR(wacom->ac); + goto err; } #else - error = power_supply_register(&wacom->hdev->dev, &wacom->ac); + error = power_supply_register(dev, &wacom->ac); if (error) { power_supply_unregister(&wacom->battery); return error; } #endif - - power_supply_powers(WACOM_POWERSUPPLY_REF(wacom->ac), &wacom->hdev->dev); + power_supply_powers(WACOM_POWERSUPPLY_REF(wacom->ac), dev); } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) + devres_close_group(dev, bat_desc); +#endif + return 0; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) +err: + devres_release_group(dev, bat_desc); + return error; +#endif } static void wacom_destroy_battery(struct wacom *wacom) { if (WACOM_POWERSUPPLY_DEVICE(wacom->battery)) { + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) + devres_release_group(&wacom->hdev->dev, WACOM_POWERSUPPLY_DEVICE(wacom->battery)); +#else power_supply_unregister(WACOM_POWERSUPPLY_REF(wacom->battery)); - WACOM_POWERSUPPLY_DEVICE(wacom->battery) = NULL; power_supply_unregister(WACOM_POWERSUPPLY_REF(wacom->ac)); +#endif + WACOM_POWERSUPPLY_DEVICE(wacom->battery) = NULL; WACOM_POWERSUPPLY_DEVICE(wacom->ac) = NULL; } } @@ -1773,7 +1791,9 @@ fail_remote: fail_leds: wacom_clean_inputs(wacom); fail_register_inputs: +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) wacom_destroy_battery(wacom); +#endif fail_battery: wacom_remove_shared_data(wacom); fail_shared_data: @@ -1962,7 +1982,9 @@ static void wacom_remove(struct hid_device *hdev) wacom_clean_inputs(wacom); if (hdev->bus == BUS_BLUETOOTH) device_remove_file(&hdev->dev, &dev_attr_speed); +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) wacom_destroy_battery(wacom); +#endif wacom_remove_shared_data(wacom); hid_set_drvdata(hdev, NULL); -- 2.7.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Linuxwacom-devel mailing list Linuxwacom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel