| From d4f1b06d685d11ebdaccf11c0db1cb3c78736862 Mon Sep 17 00:00:00 2001 |
| From: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Date: Sat, 16 Jan 2016 10:04:49 -0800 |
| Subject: Input: vmmouse - fix absolute device registration |
| |
| From: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| |
| commit d4f1b06d685d11ebdaccf11c0db1cb3c78736862 upstream. |
| |
| We should set device's capabilities first, and then register it, |
| otherwise various handlers already present in the kernel will not be |
| able to connect to the device. |
| |
| Reported-by: Lauri Kasanen <cand@gmx.com> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/input/mouse/vmmouse.c | 13 +++++++------ |
| 1 file changed, 7 insertions(+), 6 deletions(-) |
| |
| --- a/drivers/input/mouse/vmmouse.c |
| +++ b/drivers/input/mouse/vmmouse.c |
| @@ -458,8 +458,6 @@ int vmmouse_init(struct psmouse *psmouse |
| priv->abs_dev = abs_dev; |
| psmouse->private = priv; |
| |
| - input_set_capability(rel_dev, EV_REL, REL_WHEEL); |
| - |
| /* Set up and register absolute device */ |
| snprintf(priv->phys, sizeof(priv->phys), "%s/input1", |
| psmouse->ps2dev.serio->phys); |
| @@ -475,10 +473,6 @@ int vmmouse_init(struct psmouse *psmouse |
| abs_dev->id.version = psmouse->model; |
| abs_dev->dev.parent = &psmouse->ps2dev.serio->dev; |
| |
| - error = input_register_device(priv->abs_dev); |
| - if (error) |
| - goto init_fail; |
| - |
| /* Set absolute device capabilities */ |
| input_set_capability(abs_dev, EV_KEY, BTN_LEFT); |
| input_set_capability(abs_dev, EV_KEY, BTN_RIGHT); |
| @@ -488,6 +482,13 @@ int vmmouse_init(struct psmouse *psmouse |
| input_set_abs_params(abs_dev, ABS_X, 0, VMMOUSE_MAX_X, 0, 0); |
| input_set_abs_params(abs_dev, ABS_Y, 0, VMMOUSE_MAX_Y, 0, 0); |
| |
| + error = input_register_device(priv->abs_dev); |
| + if (error) |
| + goto init_fail; |
| + |
| + /* Add wheel capability to the relative device */ |
| + input_set_capability(rel_dev, EV_REL, REL_WHEEL); |
| + |
| psmouse->protocol_handler = vmmouse_process_byte; |
| psmouse->disconnect = vmmouse_disconnect; |
| psmouse->reconnect = vmmouse_reconnect; |