mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 13:11:40 +00:00
HID: wacom: Provide battery charge state to system over USB if available
If a wireless adapter (which contains the charging circuitry) is detected as being attached to the tablet then create a new battery interface and update its status as data is reported. Also destroy the battery if the adapter goes away. Signed-off-by: Jason Gerecke <killertofu@gmail.com> Acked-by: Ping Cheng <pingc@wacom.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
fce9957d8f
commit
8f93b0b2b0
@ -1952,6 +1952,7 @@ static int wacom_wireless_irq(struct wacom_wac *wacom, size_t len)
|
|||||||
|
|
||||||
static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
|
static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
|
||||||
{
|
{
|
||||||
|
struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
|
||||||
struct wacom_features *features = &wacom_wac->features;
|
struct wacom_features *features = &wacom_wac->features;
|
||||||
unsigned char *data = wacom_wac->data;
|
unsigned char *data = wacom_wac->data;
|
||||||
|
|
||||||
@ -1965,6 +1966,30 @@ static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
|
|||||||
SW_MUTE_DEVICE, data[8] & 0x40);
|
SW_MUTE_DEVICE, data[8] & 0x40);
|
||||||
input_sync(wacom_wac->shared->touch_input);
|
input_sync(wacom_wac->shared->touch_input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data[9] & 0x02) { /* wireless module is attached */
|
||||||
|
int battery = (data[8] & 0x3f) * 100 / 31;
|
||||||
|
bool ps_connected = !!(data[8] & 0x80);
|
||||||
|
bool charging = ps_connected &&
|
||||||
|
wacom_wac->battery_capacity < 100;
|
||||||
|
|
||||||
|
wacom_notify_battery(wacom_wac, battery, charging,
|
||||||
|
ps_connected);
|
||||||
|
|
||||||
|
if (!wacom->battery.dev &&
|
||||||
|
!(features->quirks & WACOM_QUIRK_BATTERY)) {
|
||||||
|
features->quirks |= WACOM_QUIRK_BATTERY;
|
||||||
|
INIT_WORK(&wacom->work, wacom_battery_work);
|
||||||
|
wacom_schedule_work(wacom_wac);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((features->quirks & WACOM_QUIRK_BATTERY) &&
|
||||||
|
wacom->battery.dev) {
|
||||||
|
features->quirks &= ~WACOM_QUIRK_BATTERY;
|
||||||
|
INIT_WORK(&wacom->work, wacom_battery_work);
|
||||||
|
wacom_schedule_work(wacom_wac);
|
||||||
|
wacom_notify_battery(wacom_wac, 0, 0, 0);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user