Input: usbtouchscreen - fix control-request directions
authorJohan Hovold <johan@kernel.org>
Mon, 24 May 2021 17:02:59 +0000 (10:02 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 25 May 2021 03:56:11 +0000 (20:56 -0700)
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>
drivers/input/touchscreen/usbtouchscreen.c

index c847453a03c2694f0d43636b01317d24aa8ce999..43c521f50c851d37253151f57b9adda5fd24ebeb 100644 (file)
@@ -251,7 +251,7 @@ static int e2i_init(struct usbtouch_usb *usbtouch)
        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_usb *usbtouch)
        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_usb *usbtouch)
        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 usbtouch_usb *usbtouch)
        }
 
        /* 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);