Input: usbtouchscreen - fix control-request directions
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:1d3e20236d
("[PATCH] USB: usbtouchscreen: unified USB touchscreen driver") Fixes:24ced062a2
("usbtouchscreen: add support for DMC TSC-10/25 devices") Fixes:9e3b25837a
("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>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
23e8f46884
commit
a2ad0bddd0
@@ -251,7 +251,7 @@ static int e2i_init(struct usbtouch_usb *usbtouch)
|
|||||||
int ret;
|
int ret;
|
||||||
struct usb_device *udev = interface_to_usbdev(usbtouch->interface);
|
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,
|
0x01, 0x02, 0x0000, 0x0081,
|
||||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||||
|
|
||||||
@@ -531,7 +531,7 @@ static int mtouch_init(struct usbtouch_usb *usbtouch)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
|
ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
|
||||||
MTOUCHUSB_RESET,
|
MTOUCHUSB_RESET,
|
||||||
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||||
1, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
1, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||||
@@ -543,7 +543,7 @@ static int mtouch_init(struct usbtouch_usb *usbtouch)
|
|||||||
msleep(150);
|
msleep(150);
|
||||||
|
|
||||||
for (i = 0; i < 3; i++) {
|
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,
|
MTOUCHUSB_ASYNC_REPORT,
|
||||||
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||||
1, 1, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
1, 1, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||||
@@ -722,7 +722,7 @@ static int dmc_tsc10_init(struct usbtouch_usb *usbtouch)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* start sending data */
|
/* start sending data */
|
||||||
ret = usb_control_msg(dev, usb_rcvctrlpipe (dev, 0),
|
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||||
TSC10_CMD_DATA1,
|
TSC10_CMD_DATA1,
|
||||||
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
|
||||||
0, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
0, 0, NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||||
|
Reference in New Issue
Block a user