From: "jingle.wu" <jingle.wu@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> Add suspend command for elan trackpoint --- drivers/input/mouse/trackpoint.c | 16 ++++++++++++++++ drivers/input/mouse/trackpoint.h | 1 + 2 files changed, 17 insertions(+) diff --git a/drivers/input/mouse/trackpoint.c b/drivers/input/mouse/trackpoint.c index 3eefee2ee2a1..b3cba973a4eb 100644 --- a/drivers/input/mouse/trackpoint.c +++ b/drivers/input/mouse/trackpoint.c @@ -389,6 +389,20 @@ static int trackpoint_reconnect(struct psmouse *psmouse) return 0; } +static void trackpoint_cleanup(struct psmouse *psmouse) +{ + struct trackpoint_data *tp = psmouse->private; + u8 param[3] = { TP_TOGGLE, TP_TOGGLE_BURST, TP_TOGGLE_ELAN_SLEEP }; + + if (tp->variant_id == TP_VARIANT_ELAN) { + if (ps2_command(&psmouse->ps2dev, param, + MAKE_PS2_CMD(3, 0, TP_COMMAND))) { + psmouse_err(psmouse, + "failed to suspend trackpont.\n"); + } + } +} + int trackpoint_detect(struct psmouse *psmouse, bool set_properties) { struct ps2dev *ps2dev = &psmouse->ps2dev; @@ -421,6 +435,8 @@ int trackpoint_detect(struct psmouse *psmouse, bool set_properties) psmouse->reconnect = trackpoint_reconnect; psmouse->disconnect = trackpoint_disconnect; + psmouse->cleanup = trackpoint_cleanup; + if (variant_id != TP_VARIANT_IBM) { /* Newer variants do not support extended button query. */ button_info = 0x33; diff --git a/drivers/input/mouse/trackpoint.h b/drivers/input/mouse/trackpoint.h index 5cb93ed26085..c7fa75452976 100644 --- a/drivers/input/mouse/trackpoint.h +++ b/drivers/input/mouse/trackpoint.h @@ -107,6 +107,7 @@ #define TP_TOGGLE_EXT_TAG 0x22 /* Bit 3 of the first packet coming from the external device will be forced to 1 */ #define TP_MASK_EXT_TAG 0x04 +#define TP_TOGGLE_ELAN_SLEEP 0x8 /* Power on Self Test Results */ -- 2.17.1