Commit e1159cb3 authored by Sean Young's avatar Sean Young Committed by Mauro Carvalho Chehab

[media] mceusb: remove pointless mce_flush_rx_buffer function

This function just submits the urb much like mceusb_dev_resume; removing
it simplifies mce_request_packet.

Also add missing usb_kill_urb to mce_dev_probe.
Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent d26cec22
...@@ -153,9 +153,6 @@ ...@@ -153,9 +153,6 @@
#define MCE_COMMAND_IRDATA 0x80 #define MCE_COMMAND_IRDATA 0x80
#define MCE_PACKET_LENGTH_MASK 0x1f /* Packet length mask */ #define MCE_PACKET_LENGTH_MASK 0x1f /* Packet length mask */
#define MCEUSB_RX 1
#define MCEUSB_TX 2
#define VENDOR_PHILIPS 0x0471 #define VENDOR_PHILIPS 0x0471
#define VENDOR_SMK 0x0609 #define VENDOR_SMK 0x0609
#define VENDOR_TATUNG 0x1460 #define VENDOR_TATUNG 0x1460
...@@ -730,50 +727,40 @@ static void mce_async_callback(struct urb *urb) ...@@ -730,50 +727,40 @@ static void mce_async_callback(struct urb *urb)
/* request incoming or send outgoing usb packet - used to initialize remote */ /* request incoming or send outgoing usb packet - used to initialize remote */
static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data, static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data,
int size, int urb_type) int size)
{ {
int res, pipe; int res, pipe;
struct urb *async_urb; struct urb *async_urb;
struct device *dev = ir->dev; struct device *dev = ir->dev;
unsigned char *async_buf; unsigned char *async_buf;
if (urb_type == MCEUSB_TX) { async_urb = usb_alloc_urb(0, GFP_KERNEL);
async_urb = usb_alloc_urb(0, GFP_KERNEL); if (unlikely(!async_urb)) {
if (unlikely(!async_urb)) { dev_err(dev, "Error, couldn't allocate urb!\n");
dev_err(dev, "Error, couldn't allocate urb!\n"); return;
return; }
}
async_buf = kzalloc(size, GFP_KERNEL);
if (!async_buf) {
dev_err(dev, "Error, couldn't allocate buf!\n");
usb_free_urb(async_urb);
return;
}
/* outbound data */ async_buf = kmalloc(size, GFP_KERNEL);
if (usb_endpoint_xfer_int(ir->usb_ep_out)) { if (!async_buf) {
pipe = usb_sndintpipe(ir->usbdev, usb_free_urb(async_urb);
ir->usb_ep_out->bEndpointAddress); return;
usb_fill_int_urb(async_urb, ir->usbdev, pipe, async_buf, }
size, mce_async_callback, ir,
ir->usb_ep_out->bInterval);
} else {
pipe = usb_sndbulkpipe(ir->usbdev,
ir->usb_ep_out->bEndpointAddress);
usb_fill_bulk_urb(async_urb, ir->usbdev, pipe,
async_buf, size, mce_async_callback,
ir);
}
memcpy(async_buf, data, size);
} else if (urb_type == MCEUSB_RX) { /* outbound data */
/* standard request */ if (usb_endpoint_xfer_int(ir->usb_ep_out)) {
async_urb = ir->urb_in; pipe = usb_sndintpipe(ir->usbdev,
ir->usb_ep_out->bEndpointAddress);
usb_fill_int_urb(async_urb, ir->usbdev, pipe, async_buf,
size, mce_async_callback, ir,
ir->usb_ep_out->bInterval);
} else { } else {
dev_err(dev, "Error! Unknown urb type %d\n", urb_type); pipe = usb_sndbulkpipe(ir->usbdev,
return; ir->usb_ep_out->bEndpointAddress);
usb_fill_bulk_urb(async_urb, ir->usbdev, pipe,
async_buf, size, mce_async_callback,
ir);
} }
memcpy(async_buf, data, size);
dev_dbg(dev, "receive request called (size=%#x)", size); dev_dbg(dev, "receive request called (size=%#x)", size);
...@@ -794,19 +781,14 @@ static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) ...@@ -794,19 +781,14 @@ static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size)
if (ir->need_reset) { if (ir->need_reset) {
ir->need_reset = false; ir->need_reset = false;
mce_request_packet(ir, DEVICE_RESUME, rsize, MCEUSB_TX); mce_request_packet(ir, DEVICE_RESUME, rsize);
msleep(10); msleep(10);
} }
mce_request_packet(ir, data, size, MCEUSB_TX); mce_request_packet(ir, data, size);
msleep(10); msleep(10);
} }
static void mce_flush_rx_buffer(struct mceusb_dev *ir, int size)
{
mce_request_packet(ir, NULL, size, MCEUSB_RX);
}
/* Send data out the IR blaster port(s) */ /* Send data out the IR blaster port(s) */
static int mceusb_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count) static int mceusb_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count)
{ {
...@@ -1264,7 +1246,7 @@ static int mceusb_dev_probe(struct usb_interface *intf, ...@@ -1264,7 +1246,7 @@ static int mceusb_dev_probe(struct usb_interface *intf,
struct usb_endpoint_descriptor *ep_in = NULL; struct usb_endpoint_descriptor *ep_in = NULL;
struct usb_endpoint_descriptor *ep_out = NULL; struct usb_endpoint_descriptor *ep_out = NULL;
struct mceusb_dev *ir = NULL; struct mceusb_dev *ir = NULL;
int pipe, maxp, i; int pipe, maxp, i, res;
char buf[63], name[128] = ""; char buf[63], name[128] = "";
enum mceusb_model_type model = id->driver_info; enum mceusb_model_type model = id->driver_info;
bool is_gen3; bool is_gen3;
...@@ -1367,7 +1349,9 @@ static int mceusb_dev_probe(struct usb_interface *intf, ...@@ -1367,7 +1349,9 @@ static int mceusb_dev_probe(struct usb_interface *intf,
/* flush buffers on the device */ /* flush buffers on the device */
dev_dbg(&intf->dev, "Flushing receive buffers\n"); dev_dbg(&intf->dev, "Flushing receive buffers\n");
mce_flush_rx_buffer(ir, maxp); res = usb_submit_urb(ir->urb_in, GFP_KERNEL);
if (res)
dev_err(&intf->dev, "failed to flush buffers: %d\n", res);
/* figure out which firmware/emulator version this hardware has */ /* figure out which firmware/emulator version this hardware has */
mceusb_get_emulator_version(ir); mceusb_get_emulator_version(ir);
...@@ -1402,6 +1386,7 @@ static int mceusb_dev_probe(struct usb_interface *intf, ...@@ -1402,6 +1386,7 @@ static int mceusb_dev_probe(struct usb_interface *intf,
/* Error-handling path */ /* Error-handling path */
rc_dev_fail: rc_dev_fail:
usb_put_dev(ir->usbdev); usb_put_dev(ir->usbdev);
usb_kill_urb(ir->urb_in);
usb_free_urb(ir->urb_in); usb_free_urb(ir->urb_in);
urb_in_alloc_fail: urb_in_alloc_fail:
usb_free_coherent(dev, maxp, ir->buf_in, ir->dma_in); usb_free_coherent(dev, maxp, ir->buf_in, ir->dma_in);
......
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