Commit 88fa51e1 authored by Prameela Rani Garnepudi's avatar Prameela Rani Garnepudi Committed by Kalle Valo

rsi: Add usb multi-byte read operation

USB multibyte read will be used in the new firmware loading method
for RS9113 chipset.
Signed-off-by: default avatarPrameela Rani Garnepudi <prameela.j04cs@gmail.com>
Signed-off-by: default avatarAmitkumar Karwar <amit.karwar@redpinesignals.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent ea3336ac
...@@ -276,6 +276,46 @@ static int rsi_rx_urb_submit(struct rsi_hw *adapter) ...@@ -276,6 +276,46 @@ static int rsi_rx_urb_submit(struct rsi_hw *adapter)
return status; return status;
} }
static int rsi_usb_read_register_multiple(struct rsi_hw *adapter, u32 addr,
u8 *data, u16 count)
{
struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev;
u8 *buf;
u16 transfer;
int status;
if (!addr)
return -EINVAL;
buf = kzalloc(RSI_USB_BUF_SIZE, GFP_KERNEL);
if (!buf)
return -ENOMEM;
while (count) {
transfer = min_t(u16, count, RSI_USB_BUF_SIZE);
status = usb_control_msg(dev->usbdev,
usb_rcvctrlpipe(dev->usbdev, 0),
USB_VENDOR_REGISTER_READ,
RSI_USB_REQ_IN,
((addr & 0xffff0000) >> 16),
(addr & 0xffff), (void *)buf,
transfer, USB_CTRL_GET_TIMEOUT);
if (status < 0) {
rsi_dbg(ERR_ZONE,
"Reg read failed with error code :%d\n",
status);
kfree(buf);
return status;
}
memcpy(data, buf, transfer);
count -= transfer;
data += transfer;
addr += transfer;
}
kfree(buf);
return 0;
}
/** /**
* rsi_usb_write_register_multiple() - This function writes multiple bytes of * rsi_usb_write_register_multiple() - This function writes multiple bytes of
* information to multiple registers. * information to multiple registers.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment