HID: logitech-hidpp: create the battery for all types of HID++ devices
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>
Mon, 27 Mar 2017 14:59:31 +0000 (16:59 +0200)
committerJiri Kosina <jkosina@suse.cz>
Thu, 6 Apr 2017 12:36:38 +0000 (14:36 +0200)
The creation of the power_supply should not be in a HID++ 2.0 specific
function.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Tested-by: Bastien Nocera <hadess@hadess.net>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-logitech-hidpp.c

index 421c3740abcda820feed14eed46701011925d7b6..9a9771a311087e85d9a8fdd512d7fcc1c9cbd7cc 100644 (file)
@@ -855,57 +855,6 @@ static int hidpp_battery_get_property(struct power_supply *psy,
        return ret;
 }
 
-static int hidpp20_initialize_battery(struct hidpp_device *hidpp)
-{
-       static atomic_t battery_no = ATOMIC_INIT(0);
-       struct power_supply_config cfg = { .drv_data = hidpp };
-       struct power_supply_desc *desc = &hidpp->battery.desc;
-       struct hidpp_battery *battery;
-       unsigned long n;
-       int ret;
-
-       ret = hidpp20_query_battery_info(hidpp);
-       if (ret)
-               return ret;
-
-       battery = &hidpp->battery;
-
-       n = atomic_inc_return(&battery_no) - 1;
-       desc->properties = hidpp_battery_props;
-       desc->num_properties = ARRAY_SIZE(hidpp_battery_props);
-       desc->get_property = hidpp_battery_get_property;
-       sprintf(battery->name, "hidpp_battery_%ld", n);
-       desc->name = battery->name;
-       desc->type = POWER_SUPPLY_TYPE_BATTERY;
-       desc->use_for_apm = 0;
-
-       battery->ps = devm_power_supply_register(&hidpp->hid_dev->dev,
-                                                &battery->desc,
-                                                &cfg);
-       if (IS_ERR(battery->ps))
-               return PTR_ERR(battery->ps);
-
-       power_supply_powers(battery->ps, &hidpp->hid_dev->dev);
-
-       return 0;
-}
-
-static int hidpp_initialize_battery(struct hidpp_device *hidpp)
-{
-       int ret;
-
-       if (hidpp->battery.ps)
-               return 0;
-
-       if (hidpp->protocol_major >= 2) {
-               ret = hidpp20_initialize_battery(hidpp);
-               if (ret == 0)
-                       hidpp->capabilities |= HIDPP_CAPABILITY_HIDPP20_BATTERY;
-       }
-
-       return ret;
-}
-
 /* -------------------------------------------------------------------------- */
 /* 0x6010: Touchpad FW items                                                  */
 /* -------------------------------------------------------------------------- */
@@ -2355,6 +2304,49 @@ static int hidpp_raw_event(struct hid_device *hdev, struct hid_report *report,
        return 0;
 }
 
+static int hidpp_initialize_battery(struct hidpp_device *hidpp)
+{
+       static atomic_t battery_no = ATOMIC_INIT(0);
+       struct power_supply_config cfg = { .drv_data = hidpp };
+       struct power_supply_desc *desc = &hidpp->battery.desc;
+       struct hidpp_battery *battery;
+       unsigned long n;
+       int ret;
+
+       if (hidpp->battery.ps)
+               return 0;
+
+       if (hidpp->protocol_major >= 2) {
+               ret = hidpp20_query_battery_info(hidpp);
+               if (ret)
+                       return ret;
+               hidpp->capabilities |= HIDPP_CAPABILITY_HIDPP20_BATTERY;
+       } else {
+               return -ENOENT;
+       }
+
+       battery = &hidpp->battery;
+
+       n = atomic_inc_return(&battery_no) - 1;
+       desc->properties = hidpp_battery_props;
+       desc->num_properties = ARRAY_SIZE(hidpp_battery_props);
+       desc->get_property = hidpp_battery_get_property;
+       sprintf(battery->name, "hidpp_battery_%ld", n);
+       desc->name = battery->name;
+       desc->type = POWER_SUPPLY_TYPE_BATTERY;
+       desc->use_for_apm = 0;
+
+       battery->ps = devm_power_supply_register(&hidpp->hid_dev->dev,
+                                                &battery->desc,
+                                                &cfg);
+       if (IS_ERR(battery->ps))
+               return PTR_ERR(battery->ps);
+
+       power_supply_powers(battery->ps, &hidpp->hid_dev->dev);
+
+       return ret;
+}
+
 static void hidpp_overwrite_name(struct hid_device *hdev)
 {
        struct hidpp_device *hidpp = hid_get_drvdata(hdev);