HID: logitech-hidpp: create the battery for all types of HID++ devices

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>
This commit is contained in:
Benjamin Tissoires 2017-03-27 16:59:31 +02:00 committed by Jiri Kosina
parent 32043d0fdf
commit a52ec107fa
1 changed files with 43 additions and 51 deletions

View 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);