|
@@ -227,11 +227,22 @@ static int read_mos_reg(struct usb_serial *serial, unsigned int serial_portnum,
|
|
|
__u8 requesttype = (__u8)0xc0;
|
|
|
__u16 index = get_reg_index(reg);
|
|
|
__u16 value = get_reg_value(reg, serial_portnum);
|
|
|
- int status = usb_control_msg(usbdev, pipe, request, requesttype, value,
|
|
|
- index, data, 1, MOS_WDR_TIMEOUT);
|
|
|
- if (status < 0)
|
|
|
+ u8 *buf;
|
|
|
+ int status;
|
|
|
+
|
|
|
+ buf = kmalloc(1, GFP_KERNEL);
|
|
|
+ if (!buf)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ status = usb_control_msg(usbdev, pipe, request, requesttype, value,
|
|
|
+ index, buf, 1, MOS_WDR_TIMEOUT);
|
|
|
+ if (status == 1)
|
|
|
+ *data = *buf;
|
|
|
+ else if (status < 0)
|
|
|
dev_err(&usbdev->dev,
|
|
|
"mos7720: usb_control_msg() failed: %d", status);
|
|
|
+ kfree(buf);
|
|
|
+
|
|
|
return status;
|
|
|
}
|
|
|
|