| From 41e81022a04a0294c55cfa7e366bc14b9634c66e Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Mon, 24 May 2021 10:02:59 -0700 |
| Subject: Input: usbtouchscreen - fix control-request directions |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit 41e81022a04a0294c55cfa7e366bc14b9634c66e upstream. |
| |
| The direction of the pipe argument must match the request-type direction |
| bit or control requests may fail depending on the host-controller-driver |
| implementation. |
| |
| Fix the four control requests which erroneously used usb_rcvctrlpipe(). |
| |
| Fixes: 1d3e20236d7a ("[PATCH] USB: usbtouchscreen: unified USB touchscreen driver") |
| Fixes: 24ced062a296 ("usbtouchscreen: add support for DMC TSC-10/25 devices") |
| Fixes: 9e3b25837a20 ("Input: usbtouchscreen - add support for e2i touchscreen controller") |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Cc: stable@vger.kernel.org # 2.6.17 |
| Link: https://lore.kernel.org/r/20210524092048.4443-1-johan@kernel.org |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/input/touchscreen/usbtouchscreen.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/input/touchscreen/usbtouchscreen.c |
| +++ b/drivers/input/touchscreen/usbtouchscreen.c |
| @@ -251,7 +251,7 @@ static int e2i_init(struct usbtouch_usb |
| int ret; |
| struct usb_device *udev = interface_to_usbdev(usbtouch->interface); |
| |
| - ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), |
| + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), |
| 0x01, 0x02, 0x0000, 0x0081, |
| NULL, 0, USB_CTRL_SET_TIMEOUT); |
| |
| @@ -531,7 +531,7 @@ static int mtouch_init(struct usbtouch_u |
| if (ret) |
| return ret; |
| |
| - ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), |
| + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), |
| MTOUCHUSB_RESET, |
| USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
| 1, 0, NULL, 0, USB_CTRL_SET_TIMEOUT); |
| @@ -543,7 +543,7 @@ static int mtouch_init(struct usbtouch_u |
| msleep(150); |
| |
| for (i = 0; i < 3; i++) { |
| - ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), |
| + ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), |
| MTOUCHUSB_ASYNC_REPORT, |
| USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
| 1, 1, NULL, 0, USB_CTRL_SET_TIMEOUT); |
| @@ -722,7 +722,7 @@ static int dmc_tsc10_init(struct usbtouc |
| } |
| |
| /* start sending data */ |
| - ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0), |
| + ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), |
| TSC10_CMD_DATA1, |
| USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
| 0, 0, NULL, 0, USB_CTRL_SET_TIMEOUT); |