acer-wmi: change to emit touchpad on off key
KEY_TOUCHPAD_TOOGLE key is for notice userland change touchpad state via xf86-input-synaptics on the machine that don't toggle touchpad in hardware. But, acer laptop actually toggle touchpad in hardware. So, this patch change to emit KEY_TOUCHPAD_ON/OFF key when acer-wmi grab device state of touchpad. Reference: brc#848270 https://bugzilla.redhat.com/show_bug.cgi?id=848270 Tested-by: Nathanael Noblet <nathanael@gnat.ca> Cc: Carlos Corbacho <carlos@strangeworlds.co.uk> Cc: Matthew Garrett <mjg@redhat.com> Cc: Dmitry Torokhov <dtor@mail.ru> Cc: Corentin Chary <corentincj@iksaif.net> Cc: Thomas Renninger <trenn@suse.de> Signed-off-by: Lee, Chun-Yi <jlee@suse.com> Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
This commit is contained in:
parent
f20aaba981
commit
8e2286ce07
@ -125,7 +125,9 @@ static const struct key_entry acer_wmi_keymap[] = {
|
||||
{KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} },
|
||||
{KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
|
||||
{KE_IGNORE, 0x81, {KEY_SLEEP} },
|
||||
{KE_KEY, 0x82, {KEY_TOUCHPAD_TOGGLE} }, /* Touch Pad On/Off */
|
||||
{KE_KEY, 0x82, {KEY_TOUCHPAD_TOGGLE} }, /* Touch Pad Toggle */
|
||||
{KE_KEY, KEY_TOUCHPAD_ON, {KEY_TOUCHPAD_ON} },
|
||||
{KE_KEY, KEY_TOUCHPAD_OFF, {KEY_TOUCHPAD_OFF} },
|
||||
{KE_IGNORE, 0x83, {KEY_TOUCHPAD_TOGGLE} },
|
||||
{KE_END, 0}
|
||||
};
|
||||
@ -147,6 +149,7 @@ struct event_return_value {
|
||||
#define ACER_WMID3_GDS_THREEG (1<<6) /* 3G */
|
||||
#define ACER_WMID3_GDS_WIMAX (1<<7) /* WiMAX */
|
||||
#define ACER_WMID3_GDS_BLUETOOTH (1<<11) /* BT */
|
||||
#define ACER_WMID3_GDS_TOUCHPAD (1<<1) /* Touchpad */
|
||||
|
||||
struct lm_input_params {
|
||||
u8 function_num; /* Function Number */
|
||||
@ -1678,6 +1681,7 @@ static void acer_wmi_notify(u32 value, void *context)
|
||||
acpi_status status;
|
||||
u16 device_state;
|
||||
const struct key_entry *key;
|
||||
u32 scancode;
|
||||
|
||||
status = wmi_get_event_data(value, &response);
|
||||
if (status != AE_OK) {
|
||||
@ -1714,6 +1718,7 @@ static void acer_wmi_notify(u32 value, void *context)
|
||||
pr_warn("Unknown key number - 0x%x\n",
|
||||
return_value.key_num);
|
||||
} else {
|
||||
scancode = return_value.key_num;
|
||||
switch (key->keycode) {
|
||||
case KEY_WLAN:
|
||||
case KEY_BLUETOOTH:
|
||||
@ -1727,9 +1732,11 @@ static void acer_wmi_notify(u32 value, void *context)
|
||||
rfkill_set_sw_state(bluetooth_rfkill,
|
||||
!(device_state & ACER_WMID3_GDS_BLUETOOTH));
|
||||
break;
|
||||
case KEY_TOUCHPAD_TOGGLE:
|
||||
scancode = (device_state & ACER_WMID3_GDS_TOUCHPAD) ?
|
||||
KEY_TOUCHPAD_ON : KEY_TOUCHPAD_OFF;
|
||||
}
|
||||
sparse_keymap_report_entry(acer_wmi_input_dev, key,
|
||||
1, true);
|
||||
sparse_keymap_report_event(acer_wmi_input_dev, scancode, 1, true);
|
||||
}
|
||||
break;
|
||||
case WMID_ACCEL_EVENT:
|
||||
|
Loading…
Reference in New Issue
Block a user