Skip to content

Commit e082c95

Browse files
authored
Merge pull request linuxwacom#358 from jigpu/for-6.4-backport
For 6.4 backport
2 parents 820f80c + cfb8236 commit e082c95

File tree

4 files changed

+25
-64
lines changed

4 files changed

+25
-64
lines changed

3.17/wacom_sys.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2265,13 +2265,6 @@ static int wacom_parse_and_register(struct wacom *wacom, bool wireless)
22652265
if (error)
22662266
goto fail_shared_data;
22672267

2268-
if (!(features->device_type & WACOM_DEVICETYPE_WL_MONITOR) &&
2269-
(features->quirks & WACOM_QUIRK_BATTERY)) {
2270-
error = wacom_initialize_battery(wacom);
2271-
if (error)
2272-
goto fail_battery;
2273-
}
2274-
22752268
error = wacom_register_inputs(wacom);
22762269
if (error)
22772270
goto fail_register_inputs;
@@ -2331,7 +2324,6 @@ static int wacom_parse_and_register(struct wacom *wacom, bool wireless)
23312324
#ifndef WACOM_POWERSUPPLY_41
23322325
wacom_destroy_battery(wacom);
23332326
#endif
2334-
fail_battery:
23352327
fail_shared_data:
23362328
fail_parsed:
23372329
fail_allocate_inputs:
@@ -2417,9 +2409,6 @@ static void wacom_wireless_work(struct work_struct *work)
24172409

24182410
strlcpy(wacom_wac->name, wacom_wac1->name,
24192411
sizeof(wacom_wac->name));
2420-
error = wacom_initialize_battery(wacom);
2421-
if (error)
2422-
goto fail;
24232412
}
24242413

24252414
return;

3.17/wacom_wac.c

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ static void wacom_notify_battery(struct wacom_wac *wacom_wac,
126126
bool bat_connected, bool ps_connected)
127127
{
128128
struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
129+
bool bat_initialized = WACOM_POWERSUPPLY_DEVICE(wacom->battery.battery);
130+
bool has_quirk = wacom_wac->features.quirks & WACOM_QUIRK_BATTERY;
131+
132+
if (bat_initialized != has_quirk)
133+
wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
129134

130135
__wacom_notify_battery(&wacom->battery, bat_status, bat_capacity,
131136
bat_charging, bat_connected, ps_connected);
@@ -1954,18 +1959,7 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage,
19541959
static void wacom_wac_battery_usage_mapping(struct hid_device *hdev,
19551960
struct hid_field *field, struct hid_usage *usage)
19561961
{
1957-
struct wacom *wacom = hid_get_drvdata(hdev);
1958-
struct wacom_wac *wacom_wac = &wacom->wacom_wac;
1959-
struct wacom_features *features = &wacom_wac->features;
1960-
unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
1961-
1962-
switch (equivalent_usage) {
1963-
case HID_DG_BATTERYSTRENGTH:
1964-
case WACOM_HID_WD_BATTERY_LEVEL:
1965-
case WACOM_HID_WD_BATTERY_CHARGING:
1966-
features->quirks |= WACOM_QUIRK_BATTERY;
1967-
break;
1968-
}
1962+
return;
19691963
}
19701964

19711965
static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *field,
@@ -1986,18 +1980,21 @@ static void wacom_wac_battery_event(struct hid_device *hdev, struct hid_field *f
19861980
wacom_wac->hid_data.bat_connected = 1;
19871981
wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
19881982
}
1983+
wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
19891984
break;
19901985
case WACOM_HID_WD_BATTERY_LEVEL:
19911986
value = value * 100 / (field->logical_maximum - field->logical_minimum);
19921987
wacom_wac->hid_data.battery_capacity = value;
19931988
wacom_wac->hid_data.bat_connected = 1;
19941989
wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
1990+
wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
19951991
break;
19961992
case WACOM_HID_WD_BATTERY_CHARGING:
19971993
wacom_wac->hid_data.bat_charging = value;
19981994
wacom_wac->hid_data.ps_connected = value;
19991995
wacom_wac->hid_data.bat_connected = 1;
20001996
wacom_wac->hid_data.bat_status = WACOM_POWER_SUPPLY_STATUS_AUTO;
1997+
wacom_wac->features.quirks |= WACOM_QUIRK_BATTERY;
20011998
break;
20021999
}
20032000
}
@@ -2013,18 +2010,15 @@ static void wacom_wac_battery_report(struct hid_device *hdev,
20132010
{
20142011
struct wacom *wacom = hid_get_drvdata(hdev);
20152012
struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2016-
struct wacom_features *features = &wacom_wac->features;
20172013

2018-
if (features->quirks & WACOM_QUIRK_BATTERY) {
2019-
int status = wacom_wac->hid_data.bat_status;
2020-
int capacity = wacom_wac->hid_data.battery_capacity;
2021-
bool charging = wacom_wac->hid_data.bat_charging;
2022-
bool connected = wacom_wac->hid_data.bat_connected;
2023-
bool powered = wacom_wac->hid_data.ps_connected;
2014+
int status = wacom_wac->hid_data.bat_status;
2015+
int capacity = wacom_wac->hid_data.battery_capacity;
2016+
bool charging = wacom_wac->hid_data.bat_charging;
2017+
bool connected = wacom_wac->hid_data.bat_connected;
2018+
bool powered = wacom_wac->hid_data.ps_connected;
20242019

2025-
wacom_notify_battery(wacom_wac, status, capacity, charging,
2026-
connected, powered);
2027-
}
2020+
wacom_notify_battery(wacom_wac, status, capacity, charging,
2021+
connected, powered);
20282022
}
20292023

20302024
static void wacom_wac_pad_usage_mapping(struct hid_device *hdev,
@@ -3389,19 +3383,13 @@ static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
33893383
int battery = (data[8] & 0x3f) * 100 / 31;
33903384
bool charging = !!(data[8] & 0x80);
33913385

3386+
features->quirks |= WACOM_QUIRK_BATTERY;
33923387
wacom_notify_battery(wacom_wac, WACOM_POWER_SUPPLY_STATUS_AUTO,
33933388
battery, charging, battery || charging, 1);
3394-
3395-
if (!WACOM_POWERSUPPLY_DEVICE(wacom->battery.battery) &&
3396-
!(features->quirks & WACOM_QUIRK_BATTERY)) {
3397-
features->quirks |= WACOM_QUIRK_BATTERY;
3398-
wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
3399-
}
34003389
}
34013390
else if ((features->quirks & WACOM_QUIRK_BATTERY) &&
34023391
WACOM_POWERSUPPLY_DEVICE(wacom->battery.battery)) {
34033392
features->quirks &= ~WACOM_QUIRK_BATTERY;
3404-
wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
34053393
wacom_notify_battery(wacom_wac, POWER_SUPPLY_STATUS_UNKNOWN, 0, 0, 0, 0);
34063394
}
34073395
return 0;

3.7/wacom_sys.c

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1753,18 +1753,13 @@ static int wacom_remote_create_one(struct wacom *wacom, u32 serial,
17531753
static int wacom_remote_attach_battery(struct wacom *wacom, int index)
17541754
{
17551755
struct wacom_remote *remote = wacom->remote;
1756-
int error;
1756+
17571757
if (!remote->remotes[index].registered)
17581758
return 0;
17591759

17601760
if (WACOM_POWERSUPPLY_DEVICE(remote->remotes[index].battery.battery))
17611761
return 0;
17621762

1763-
error = __wacom_initialize_battery(wacom,
1764-
&wacom->remote->remotes[index].battery);
1765-
if (error)
1766-
return error;
1767-
17681763
return 0;
17691764
}
17701765

@@ -1894,10 +1889,6 @@ static void wacom_wireless_work(struct work_struct *work)
18941889
wacom_wac->shared->touch_input = wacom_wac2->input;
18951890
}
18961891
}
1897-
1898-
error = wacom_initialize_battery(wacom);
1899-
if (error)
1900-
goto fail;
19011892
}
19021893

19031894
return;

3.7/wacom_wac.c

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ static void wacom_notify_battery(struct wacom_wac *wacom_wac,
7777
bool bat_connected, bool ps_connected)
7878
{
7979
struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
80+
bool bat_initialized = WACOM_POWERSUPPLY_DEVICE(wacom->battery.battery);
81+
bool has_quirk = wacom_wac->features.quirks & WACOM_QUIRK_BATTERY;
82+
83+
if (bat_initialized != has_quirk)
84+
wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
8085

8186
__wacom_notify_battery(&wacom->battery, bat_status, bat_capacity,
8287
bat_charging, bat_connected, ps_connected);
@@ -1839,19 +1844,13 @@ static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
18391844
int battery = (data[8] & 0x3f) * 100 / 31;
18401845
bool charging = !!(data[8] & 0x80);
18411846

1847+
features->quirks |= WACOM_QUIRK_BATTERY;
18421848
wacom_notify_battery(wacom_wac, WACOM_POWER_SUPPLY_STATUS_AUTO,
18431849
battery, charging, battery || charging, 1);
1844-
1845-
if (!WACOM_POWERSUPPLY_DEVICE(wacom->battery.battery) &&
1846-
!(features->quirks & WACOM_QUIRK_BATTERY)) {
1847-
features->quirks |= WACOM_QUIRK_BATTERY;
1848-
wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
1849-
}
18501850
}
18511851
else if ((features->quirks & WACOM_QUIRK_BATTERY) &&
18521852
WACOM_POWERSUPPLY_DEVICE(wacom->battery.battery)) {
18531853
features->quirks &= ~WACOM_QUIRK_BATTERY;
1854-
wacom_schedule_work(wacom_wac, WACOM_WORKER_BATTERY);
18551854
wacom_notify_battery(wacom_wac, POWER_SUPPLY_STATUS_UNKNOWN, 0, 0, 0, 0);
18561855
}
18571856
return 0;
@@ -1878,7 +1877,6 @@ static void wacom_mspro_touch_toggle(struct wacom_wac *wacom)
18781877

18791878
static int wacom_mspro_device_irq(struct wacom_wac *wacom)
18801879
{
1881-
struct wacom *w = container_of(wacom, struct wacom, wacom_wac);
18821880
struct wacom_features *features = &wacom->features;
18831881
unsigned char *data = wacom->data;
18841882
bool bat_charging;
@@ -1887,12 +1885,7 @@ static int wacom_mspro_device_irq(struct wacom_wac *wacom)
18871885
battery_level = data[1] & 0x7F;
18881886
bat_charging = data[1] & 0x80;
18891887

1890-
if (!WACOM_POWERSUPPLY_DEVICE(w->battery.battery) &&
1891-
!(features->quirks & WACOM_QUIRK_BATTERY)) {
1892-
features->quirks |= WACOM_QUIRK_BATTERY;
1893-
wacom_schedule_work(wacom, WACOM_WORKER_BATTERY);
1894-
}
1895-
1888+
features->quirks |= WACOM_QUIRK_BATTERY;
18961889
wacom_notify_battery(wacom, WACOM_POWER_SUPPLY_STATUS_AUTO,
18971890
battery_level, bat_charging, 1, bat_charging);
18981891

0 commit comments

Comments
 (0)