aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2017-03-27 10:59:39 -0400
committerJiri Kosina <jkosina@suse.cz>2017-04-06 08:36:39 -0400
commita4bf6153b317754e058ad9c7f5f02367e0bfdcc8 (patch)
treefdff0add614014eeebceeb275783943d441b5fc0
parent7f7ce2a258b47f9510ad613328c046a3ff9426b0 (diff)
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>
-rw-r--r--drivers/hid/hid-logitech-hidpp.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
index eb4339e91f23..41b39464ded8 100644
--- a/drivers/hid/hid-logitech-hidpp.c
+++ b/drivers/hid/hid-logitech-hidpp.c
@@ -2916,6 +2916,17 @@ static void hidpp_connect_event(struct hidpp_device *hidpp)
2916 hidpp->delayed_input = input; 2916 hidpp->delayed_input = input;
2917} 2917}
2918 2918
2919static DEVICE_ATTR(builtin_power_supply, 0000, NULL, NULL);
2920
2921static struct attribute *sysfs_attrs[] = {
2922 &dev_attr_builtin_power_supply.attr,
2923 NULL
2924};
2925
2926static struct attribute_group ps_attribute_group = {
2927 .attrs = sysfs_attrs
2928};
2929
2919static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id) 2930static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
2920{ 2931{
2921 struct hidpp_device *hidpp; 2932 struct hidpp_device *hidpp;
@@ -2960,6 +2971,12 @@ static int hidpp_probe(struct hid_device *hdev, const struct hid_device_id *id)
2960 mutex_init(&hidpp->send_mutex); 2971 mutex_init(&hidpp->send_mutex);
2961 init_waitqueue_head(&hidpp->wait); 2972 init_waitqueue_head(&hidpp->wait);
2962 2973
2974 /* indicates we are handling the battery properties in the kernel */
2975 ret = sysfs_create_group(&hdev->dev.kobj, &ps_attribute_group);
2976 if (ret)
2977 hid_warn(hdev, "Cannot allocate sysfs group for %s\n",
2978 hdev->name);
2979
2963 ret = hid_parse(hdev); 2980 ret = hid_parse(hdev);
2964 if (ret) { 2981 if (ret) {
2965 hid_err(hdev, "%s:parse failed\n", __func__); 2982 hid_err(hdev, "%s:parse failed\n", __func__);
@@ -3042,6 +3059,7 @@ hid_hw_open_failed:
3042 } 3059 }
3043hid_hw_start_fail: 3060hid_hw_start_fail:
3044hid_parse_fail: 3061hid_parse_fail:
3062 sysfs_remove_group(&hdev->dev.kobj, &ps_attribute_group);
3045 cancel_work_sync(&hidpp->work); 3063 cancel_work_sync(&hidpp->work);
3046 mutex_destroy(&hidpp->send_mutex); 3064 mutex_destroy(&hidpp->send_mutex);
3047allocate_fail: 3065allocate_fail:
@@ -3053,6 +3071,8 @@ static void hidpp_remove(struct hid_device *hdev)
3053{ 3071{
3054 struct hidpp_device *hidpp = hid_get_drvdata(hdev); 3072 struct hidpp_device *hidpp = hid_get_drvdata(hdev);
3055 3073
3074 sysfs_remove_group(&hdev->dev.kobj, &ps_attribute_group);
3075
3056 if (hidpp->quirks & HIDPP_QUIRK_CLASS_G920) { 3076 if (hidpp->quirks & HIDPP_QUIRK_CLASS_G920) {
3057 hidpp_ff_deinit(hdev); 3077 hidpp_ff_deinit(hdev);
3058 hid_hw_close(hdev); 3078 hid_hw_close(hdev);