HID: logitech-hidpp: add a sysfs file to tell we support power_supply
This way, upower can add a simple udev rule to decide whether or not it should use the internal unifying support or just the generic kernel one. 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:
parent
7f7ce2a258
commit
a4bf6153b3
|
@ -2916,6 +2916,17 @@ static void hidpp_connect_event(struct hidpp_device *hidpp)
|
||||||
hidpp->delayed_input = input;
|
hidpp->delayed_input = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DEVICE_ATTR(builtin_power_supply, 0000, NULL, NULL);
|
||||||
|
|
||||||
|
static struct attribute *sysfs_attrs[] = {
|
||||||
|
&dev_attr_builtin_power_supply.attr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct attribute_group ps_attribute_group = {
|
||||||
|
.attrs = sysfs_attrs
|
||||||
|
};
|
||||||
|
|
||||||
static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||||
{
|
{
|
||||||
struct hidpp_device *hidpp;
|
struct hidpp_device *hidpp;
|
||||||
|
@ -2960,6 +2971,12 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||||
mutex_init(&hidpp->send_mutex);
|
mutex_init(&hidpp->send_mutex);
|
||||||
init_waitqueue_head(&hidpp->wait);
|
init_waitqueue_head(&hidpp->wait);
|
||||||
|
|
||||||
|
/* indicates we are handling the battery properties in the kernel */
|
||||||
|
ret = sysfs_create_group(&hdev->dev.kobj, &ps_attribute_group);
|
||||||
|
if (ret)
|
||||||
|
hid_warn(hdev, "Cannot allocate sysfs group for %s\n",
|
||||||
|
hdev->name);
|
||||||
|
|
||||||
ret = hid_parse(hdev);
|
ret = hid_parse(hdev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
hid_err(hdev, "%s:parse failed\n", __func__);
|
hid_err(hdev, "%s:parse failed\n", __func__);
|
||||||
|
@ -3042,6 +3059,7 @@ hid_hw_open_failed:
|
||||||
}
|
}
|
||||||
hid_hw_start_fail:
|
hid_hw_start_fail:
|
||||||
hid_parse_fail:
|
hid_parse_fail:
|
||||||
|
sysfs_remove_group(&hdev->dev.kobj, &ps_attribute_group);
|
||||||
cancel_work_sync(&hidpp->work);
|
cancel_work_sync(&hidpp->work);
|
||||||
mutex_destroy(&hidpp->send_mutex);
|
mutex_destroy(&hidpp->send_mutex);
|
||||||
allocate_fail:
|
allocate_fail:
|
||||||
|
@ -3053,6 +3071,8 @@ static void hidpp_remove(struct hid_device *hdev)
|
||||||
{
|
{
|
||||||
struct hidpp_device *hidpp = hid_get_drvdata(hdev);
|
struct hidpp_device *hidpp = hid_get_drvdata(hdev);
|
||||||
|
|
||||||
|
sysfs_remove_group(&hdev->dev.kobj, &ps_attribute_group);
|
||||||
|
|
||||||
if (hidpp->quirks & HIDPP_QUIRK_CLASS_G920) {
|
if (hidpp->quirks & HIDPP_QUIRK_CLASS_G920) {
|
||||||
hidpp_ff_deinit(hdev);
|
hidpp_ff_deinit(hdev);
|
||||||
hid_hw_close(hdev);
|
hid_hw_close(hdev);
|
||||||
|
|
Loading…
Reference in New Issue