Commit d4f1b06d authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: vmmouse - fix absolute device registration

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: default avatarLauri Kasanen <cand@gmx.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 015bb5e1
...@@ -458,8 +458,6 @@ int vmmouse_init(struct psmouse *psmouse) ...@@ -458,8 +458,6 @@ int vmmouse_init(struct psmouse *psmouse)
priv->abs_dev = abs_dev; priv->abs_dev = abs_dev;
psmouse->private = priv; psmouse->private = priv;
input_set_capability(rel_dev, EV_REL, REL_WHEEL);
/* Set up and register absolute device */ /* Set up and register absolute device */
snprintf(priv->phys, sizeof(priv->phys), "%s/input1", snprintf(priv->phys, sizeof(priv->phys), "%s/input1",
psmouse->ps2dev.serio->phys); psmouse->ps2dev.serio->phys);
...@@ -475,10 +473,6 @@ int vmmouse_init(struct psmouse *psmouse) ...@@ -475,10 +473,6 @@ int vmmouse_init(struct psmouse *psmouse)
abs_dev->id.version = psmouse->model; abs_dev->id.version = psmouse->model;
abs_dev->dev.parent = &psmouse->ps2dev.serio->dev; abs_dev->dev.parent = &psmouse->ps2dev.serio->dev;
error = input_register_device(priv->abs_dev);
if (error)
goto init_fail;
/* Set absolute device capabilities */ /* Set absolute device capabilities */
input_set_capability(abs_dev, EV_KEY, BTN_LEFT); input_set_capability(abs_dev, EV_KEY, BTN_LEFT);
input_set_capability(abs_dev, EV_KEY, BTN_RIGHT); input_set_capability(abs_dev, EV_KEY, BTN_RIGHT);
...@@ -488,6 +482,13 @@ int vmmouse_init(struct psmouse *psmouse) ...@@ -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_X, 0, VMMOUSE_MAX_X, 0, 0);
input_set_abs_params(abs_dev, ABS_Y, 0, VMMOUSE_MAX_Y, 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->protocol_handler = vmmouse_process_byte;
psmouse->disconnect = vmmouse_disconnect; psmouse->disconnect = vmmouse_disconnect;
psmouse->reconnect = vmmouse_reconnect; psmouse->reconnect = vmmouse_reconnect;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment