mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 14:30:06 -04:00
Merge tag 'input-for-v7.2-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input fixes from Dmitry Torokhov: - fix MELFAS MMS114 touchscreen driver to reject invalid touch IDs and avoid multi-touch slot corruption - fix a crash in the Sega Dreamcast (Maple) mouse driver when opening the device, caused by missing driver data - fixes for Maple drivers (keyboard, mouse, joystick) to properly order setting driver data and device registration to avoid races * tag 'input-for-v7.2-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: mms114 - fix multi-touch slot corruption Input: maple_keyb - set driver data before registering input device Input: maplecontrol - set driver data before registering input device Input: maplemouse - set driver data before registering input device Input: maplemouse - fix NULL pointer dereference in open()
This commit is contained in:
@@ -112,6 +112,8 @@ static int probe_maple_controller(struct device *dev)
|
||||
pad->dev = idev;
|
||||
pad->mdev = mdev;
|
||||
|
||||
maple_set_drvdata(mdev, pad);
|
||||
|
||||
idev->open = dc_pad_open;
|
||||
idev->close = dc_pad_close;
|
||||
|
||||
@@ -146,7 +148,6 @@ static int probe_maple_controller(struct device *dev)
|
||||
goto fail;
|
||||
|
||||
mdev->driver = mdrv;
|
||||
maple_set_drvdata(mdev, pad);
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -166,6 +166,8 @@ static int probe_maple_kbd(struct device *dev)
|
||||
kbd->dev = idev;
|
||||
memcpy(kbd->keycode, dc_kbd_keycode, sizeof(kbd->keycode));
|
||||
|
||||
maple_set_drvdata(mdev, kbd);
|
||||
|
||||
idev->name = mdev->product_name;
|
||||
idev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
|
||||
idev->keycode = kbd->keycode;
|
||||
@@ -190,8 +192,6 @@ static int probe_maple_kbd(struct device *dev)
|
||||
|
||||
mdev->driver = mdrv;
|
||||
|
||||
maple_set_drvdata(mdev, kbd);
|
||||
|
||||
return error;
|
||||
|
||||
fail_register:
|
||||
|
||||
@@ -48,7 +48,7 @@ static void dc_mouse_callback(struct mapleq *mq)
|
||||
|
||||
static int dc_mouse_open(struct input_dev *dev)
|
||||
{
|
||||
struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev));
|
||||
struct dc_mouse *mse = input_get_drvdata(dev);
|
||||
|
||||
maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50,
|
||||
MAPLE_FUNC_MOUSE);
|
||||
@@ -58,7 +58,7 @@ static int dc_mouse_open(struct input_dev *dev)
|
||||
|
||||
static void dc_mouse_close(struct input_dev *dev)
|
||||
{
|
||||
struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev));
|
||||
struct dc_mouse *mse = input_get_drvdata(dev);
|
||||
|
||||
maple_getcond_callback(mse->mdev, dc_mouse_callback, 0,
|
||||
MAPLE_FUNC_MOUSE);
|
||||
@@ -88,6 +88,9 @@ static int probe_maple_mouse(struct device *dev)
|
||||
mse->dev = input_dev;
|
||||
mse->mdev = mdev;
|
||||
|
||||
maple_set_drvdata(mdev, mse);
|
||||
|
||||
input_set_drvdata(input_dev, mse);
|
||||
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
|
||||
input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
|
||||
BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
|
||||
@@ -102,12 +105,12 @@ static int probe_maple_mouse(struct device *dev)
|
||||
goto fail_register;
|
||||
|
||||
mdev->driver = mdrv;
|
||||
maple_set_drvdata(mdev, mse);
|
||||
|
||||
return error;
|
||||
|
||||
fail_register:
|
||||
input_free_device(input_dev);
|
||||
maple_set_drvdata(mdev, NULL);
|
||||
fail_nomem:
|
||||
kfree(mse);
|
||||
fail:
|
||||
|
||||
@@ -165,7 +165,7 @@ static void mms114_process_mt(struct mms114_data *data, struct mms114_touch *tou
|
||||
unsigned int x;
|
||||
unsigned int y;
|
||||
|
||||
if (touch->id > MMS114_MAX_TOUCH) {
|
||||
if (touch->id == 0 || touch->id > MMS114_MAX_TOUCH) {
|
||||
dev_err(&client->dev, "Wrong touch id (%d)\n", touch->id);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user