|
Takashi Iwai |
afa2f1 |
From bea407a427baa019758f29f4d31b26f008bb8cc6 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
afa2f1 |
From: Jason Gerecke <killertofu@gmail.com>
|
|
Takashi Iwai |
afa2f1 |
Date: Thu, 13 Apr 2023 11:17:43 -0700
|
|
Takashi Iwai |
afa2f1 |
Subject: [PATCH] HID: wacom: generic: Set battery quirk only when we see battery data
|
|
Takashi Iwai |
afa2f1 |
Git-commit: bea407a427baa019758f29f4d31b26f008bb8cc6
|
|
Takashi Iwai |
afa2f1 |
Patch-mainline: v6.4-rc1
|
|
Takashi Iwai |
afa2f1 |
References: git-fixes
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
Some devices will include battery status usages in the HID descriptor
|
|
Takashi Iwai |
afa2f1 |
but we won't see that battery data for one reason or another. For example,
|
|
Takashi Iwai |
afa2f1 |
AES sensors won't send battery data unless an AES pen is in proximity.
|
|
Takashi Iwai |
afa2f1 |
If a user does not have an AES pen but instead only interacts with the
|
|
Takashi Iwai |
afa2f1 |
AES touchscreen with their fingers then there is no need for us to create
|
|
Takashi Iwai |
afa2f1 |
a battery object. Similarly, if a family of peripherals shares the same
|
|
Takashi Iwai |
afa2f1 |
HID descriptor between wired-only and wireless-capable SKUs, users of the
|
|
Takashi Iwai |
afa2f1 |
former may never see a battery event and will not want a power_supply
|
|
Takashi Iwai |
afa2f1 |
object created.
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
Link: https://bugzilla.kernel.org/show_bug.cgi?id=217062
|
|
Takashi Iwai |
afa2f1 |
Link: https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/2354
|
|
Takashi Iwai |
afa2f1 |
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
|
|
Takashi Iwai |
afa2f1 |
Tested-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
Takashi Iwai |
afa2f1 |
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
|
Takashi Iwai |
afa2f1 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
---
|
|
Takashi Iwai |
afa2f1 |
drivers/hid/wacom_wac.c | 33 +++++++++++----------------------
|
|
Takashi Iwai |
afa2f1 |
1 file changed, 11 insertions(+), 22 deletions(-)
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
|
|
Takashi Iwai |
afa2f1 |
index 0351bce362d2..dc0f7d9a992c 100644
|
|
Takashi Iwai |
afa2f1 |
--- a/drivers/hid/wacom_wac.c
|
|
Takashi Iwai |
afa2f1 |
+++ b/drivers/hid/wacom_wac.c
|
|
Takashi Iwai |
afa2f1 |
@@ -1968,18 +1968,7 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage,
|
|
Takashi Iwai |
afa2f1 |
static void wacom_wac_battery_usage_mapping(struct hid_device *hdev,
|
|
Takashi Iwai |
afa2f1 |
struct hid_field *field, struct hid_usage *usage)
|
|
Takashi Iwai |
afa2f1 |
{
|
|
Takashi Iwai |
afa2f1 |
- struct wacom *wacom = hid_get_drvdata(hdev);
|
|
Takashi Iwai |
afa2f1 |
- struct wacom_wac *wacom_wac = &wacom->wacom_wac;
|
|
Takashi Iwai |
afa2f1 |
- struct wacom_features *features = &wacom_wac->features;
|
|
Takashi Iwai |
afa2f1 |
- unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
|
|
Takashi Iwai |
afa2f1 |
-
|
|
Takashi Iwai |
afa2f1 |
- switch (equivalent_usage) {
|
|
Takashi Iwai |
afa2f1 |
- case HID_DG_BATTERYSTRENGTH:
|
|
Takashi Iwai |
afa2f1 |
- case WACOM_HID_WD_BATTERY_LEVEL:
|
|
Takashi Iwai |
afa2f1 |
- case WACOM_HID_WD_BATTERY_CHARGING:
|
|
Takashi Iwai |
afa2f1 |
- features->quirks |= WACOM_QUIRK_BATTERY;
|
|
Takashi Iwai |
afa2f1 |
- break;
|
|
Takashi Iwai |
afa2f1 |
- }
|
|
Takashi Iwai |
afa2f1 |
+ return;
|
|
Takashi Iwai |
afa2f1 |
}
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *field,
|
|
Takashi Iwai |
afa2f1 |
@@ -2000,18 +1989,21 @@ static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *f
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.bat_connected = 1;
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
|
|
Takashi Iwai |
afa2f1 |
}
|
|
Takashi Iwai |
afa2f1 |
+ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
|
|
Takashi Iwai |
afa2f1 |
break;
|
|
Takashi Iwai |
afa2f1 |
case WACOM_HID_WD_BATTERY_LEVEL:
|
|
Takashi Iwai |
afa2f1 |
value = value * 100 / (field->logical_maximum - field->logical_minimum);
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.battery_capacity = value;
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.bat_connected = 1;
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
|
|
Takashi Iwai |
afa2f1 |
+ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
|
|
Takashi Iwai |
afa2f1 |
break;
|
|
Takashi Iwai |
afa2f1 |
case WACOM_HID_WD_BATTERY_CHARGING:
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.bat_charging = value;
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.ps_connected = value;
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.bat_connected = 1;
|
|
Takashi Iwai |
afa2f1 |
wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
|
|
Takashi Iwai |
afa2f1 |
+ wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
|
|
Takashi Iwai |
afa2f1 |
break;
|
|
Takashi Iwai |
afa2f1 |
}
|
|
Takashi Iwai |
afa2f1 |
}
|
|
Takashi Iwai |
afa2f1 |
@@ -2027,18 +2019,15 @@ static void wacom_wac_battery_report(struct hid_device *hdev,
|
|
Takashi Iwai |
afa2f1 |
{
|
|
Takashi Iwai |
afa2f1 |
struct wacom *wacom = hid_get_drvdata(hdev);
|
|
Takashi Iwai |
afa2f1 |
struct wacom_wac *wacom_wac = &wacom->wacom_wac;
|
|
Takashi Iwai |
afa2f1 |
- struct wacom_features *features = &wacom_wac->features;
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
- if (features->quirks & WACOM_QUIRK_BATTERY) {
|
|
Takashi Iwai |
afa2f1 |
- int status = wacom_wac->hid_data.bat_status;
|
|
Takashi Iwai |
afa2f1 |
- int capacity = wacom_wac->hid_data.battery_capacity;
|
|
Takashi Iwai |
afa2f1 |
- bool charging = wacom_wac->hid_data.bat_charging;
|
|
Takashi Iwai |
afa2f1 |
- bool connected = wacom_wac->hid_data.bat_connected;
|
|
Takashi Iwai |
afa2f1 |
- bool powered = wacom_wac->hid_data.ps_connected;
|
|
Takashi Iwai |
afa2f1 |
+ int status = wacom_wac->hid_data.bat_status;
|
|
Takashi Iwai |
afa2f1 |
+ int capacity = wacom_wac->hid_data.battery_capacity;
|
|
Takashi Iwai |
afa2f1 |
+ bool charging = wacom_wac->hid_data.bat_charging;
|
|
Takashi Iwai |
afa2f1 |
+ bool connected = wacom_wac->hid_data.bat_connected;
|
|
Takashi Iwai |
afa2f1 |
+ bool powered = wacom_wac->hid_data.ps_connected;
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
- wacom_notify_battery(wacom_wac, status, capacity, charging,
|
|
Takashi Iwai |
afa2f1 |
- connected, powered);
|
|
Takashi Iwai |
afa2f1 |
- }
|
|
Takashi Iwai |
afa2f1 |
+ wacom_notify_battery(wacom_wac, status, capacity, charging,
|
|
Takashi Iwai |
afa2f1 |
+ connected, powered);
|
|
Takashi Iwai |
afa2f1 |
}
|
|
Takashi Iwai |
afa2f1 |
|
|
Takashi Iwai |
afa2f1 |
static void wacom_wac_pad_usage_mapping(struct hid_device *hdev,
|
|
Takashi Iwai |
afa2f1 |
--
|
|
Takashi Iwai |
afa2f1 |
2.35.3
|
|
Takashi Iwai |
afa2f1 |
|