Skip to content

Commit

Permalink
HID: wacom: Intuos4 battery charging changes
Browse files Browse the repository at this point in the history
Intuos4 WL is separately reporting power supply and battery
charging status - now hid-wacom is using that information.
Previously hid-wacom was wrongly treating "battery charging" bit
as "power supply connected". Now it should report battery charging,
battery discharging, battery full and power supply status.

Intuos4 WL sends reports when is in use (obvious) and when unplugging
power supply. If means that if the device is being charged, but it's not
being used it will never report "battery full". The same problem happens
after the device has been connected, but it's not in use - the
battery/ac status will be incorrect. Currently there is no mechanism to
ask the device to send a report containing battery/ac status.

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
PrzemoF authored and Jiri Kosina committed Jul 4, 2013
1 parent 26e0446 commit 9d15762
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion drivers/hid/hid-wacom.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ struct wacom_data {
__u8 battery_capacity;
__u8 power_raw;
__u8 ps_connected;
__u8 bat_charging;
struct power_supply battery;
struct power_supply ac;
__u8 led_selector;
Expand All @@ -62,6 +63,7 @@ static enum power_supply_property wacom_battery_props[] = {
POWER_SUPPLY_PROP_PRESENT,
POWER_SUPPLY_PROP_CAPACITY,
POWER_SUPPLY_PROP_SCOPE,
POWER_SUPPLY_PROP_STATUS,
};

static enum power_supply_property wacom_ac_props[] = {
Expand Down Expand Up @@ -287,6 +289,15 @@ static int wacom_battery_get_property(struct power_supply *psy,
case POWER_SUPPLY_PROP_CAPACITY:
val->intval = wdata->battery_capacity;
break;
case POWER_SUPPLY_PROP_STATUS:
if (wdata->bat_charging)
val->intval = POWER_SUPPLY_STATUS_CHARGING;
else
if (wdata->battery_capacity == 100 && wdata->ps_connected)
val->intval = POWER_SUPPLY_STATUS_FULL;
else
val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
break;
default:
ret = -EINVAL;
break;
Expand Down Expand Up @@ -727,7 +738,8 @@ static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report,
if (power_raw != wdata->power_raw) {
wdata->power_raw = power_raw;
wdata->battery_capacity = batcap_i4[power_raw & 0x07];
wdata->ps_connected = power_raw & 0x08;
wdata->bat_charging = (power_raw & 0x08) ? 1 : 0;
wdata->ps_connected = (power_raw & 0x10) ? 1 : 0;
}

break;
Expand Down

0 comments on commit 9d15762

Please sign in to comment.