Files
media_build/backports/v5.18_rc2.patch
CrazyCat 1995c153cf Update backport patches up to 5.19.
Drop support for <4.9.
2023-03-18 23:29:21 +02:00

71 lines
2.4 KiB
Diff

diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c
index 6795e6fcf558..b0dd59dc09eb 100644
--- a/drivers/media/rc/mceusb.c
+++ b/drivers/media/rc/mceusb.c
@@ -1439,37 +1439,42 @@ static void mceusb_gen1_init(struct mceusb_dev *ir)
{
int ret;
struct device *dev = ir->dev;
- char data[USB_CTRL_MSG_SZ];
+ char *data;
+
+ data = kzalloc(USB_CTRL_MSG_SZ, GFP_KERNEL);
+ if (!data) {
+ dev_err(dev, "%s: memory allocation failed!", __func__);
+ return;
+ }
/*
* This is a strange one. Windows issues a set address to the device
* on the receive control pipe and expect a certain value pair back
*/
- ret = usb_control_msg_recv(ir->usbdev, 0, USB_REQ_SET_ADDRESS,
- USB_DIR_IN | USB_TYPE_VENDOR,
- 0, 0, data, USB_CTRL_MSG_SZ, 3000,
- GFP_KERNEL);
+ ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
+ USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0,
+ data, USB_CTRL_MSG_SZ, 3000);
dev_dbg(dev, "set address - ret = %d", ret);
dev_dbg(dev, "set address - data[0] = %d, data[1] = %d",
data[0], data[1]);
/* set feature: bit rate 38400 bps */
- ret = usb_control_msg_send(ir->usbdev, 0,
- USB_REQ_SET_FEATURE, USB_TYPE_VENDOR,
- 0xc04e, 0x0000, NULL, 0, 3000, GFP_KERNEL);
+ ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
+ USB_REQ_SET_FEATURE, USB_TYPE_VENDOR,
+ 0xc04e, 0x0000, NULL, 0, 3000);
dev_dbg(dev, "set feature - ret = %d", ret);
/* bRequest 4: set char length to 8 bits */
- ret = usb_control_msg_send(ir->usbdev, 0,
- 4, USB_TYPE_VENDOR,
- 0x0808, 0x0000, NULL, 0, 3000, GFP_KERNEL);
+ ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
+ 4, USB_TYPE_VENDOR,
+ 0x0808, 0x0000, NULL, 0, 3000);
dev_dbg(dev, "set char length - retB = %d", ret);
/* bRequest 2: set handshaking to use DTR/DSR */
- ret = usb_control_msg_send(ir->usbdev, 0,
- 2, USB_TYPE_VENDOR,
- 0x0000, 0x0100, NULL, 0, 3000, GFP_KERNEL);
+ ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
+ 2, USB_TYPE_VENDOR,
+ 0x0000, 0x0100, NULL, 0, 3000);
dev_dbg(dev, "set handshake - retC = %d", ret);
/* device resume */
@@ -1477,6 +1482,8 @@ static void mceusb_gen1_init(struct mceusb_dev *ir)
/* get hw/sw revision? */
mce_command_out(ir, GET_REVISION, sizeof(GET_REVISION));
+
+ kfree(data);
}
static void mceusb_gen2_init(struct mceusb_dev *ir)