From 39b3244a1f9faf9efa387cf0eac3100f93fe267e Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Wed, 19 May 2010 00:01:31 +0200 Subject: [PATCH] --- yaml --- r: 195524 b: refs/heads/master c: 12e2e52cc578714d5824a27dd1a131a5418d636b h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/usb/serial/safe_serial.c | 47 +++++--------------------- 2 files changed, 9 insertions(+), 40 deletions(-) diff --git a/[refs] b/[refs] index c67c5daf2edd..e4ba1655b966 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 241c80ea72be4828c63f5dd44b142e54d0a12f5d +refs/heads/master: 12e2e52cc578714d5824a27dd1a131a5418d636b diff --git a/trunk/drivers/usb/serial/safe_serial.c b/trunk/drivers/usb/serial/safe_serial.c index 915c094ef92c..d9af5c5ed9e8 100644 --- a/trunk/drivers/usb/serial/safe_serial.c +++ b/trunk/drivers/usb/serial/safe_serial.c @@ -213,38 +213,20 @@ static __u16 __inline__ fcs_compute10(unsigned char *sp, int len, __u16 fcs) return fcs; } -static void safe_read_bulk_callback(struct urb *urb) +static void safe_process_read_urb(struct urb *urb) { - struct usb_serial_port *port = urb->context; + struct usb_serial_port *port = urb->context; unsigned char *data = urb->transfer_buffer; unsigned char length = urb->actual_length; struct tty_struct *tty; - int result; - int status = urb->status; - dbg("%s", __func__); - - if (status) { - dbg("%s - nonzero read bulk status received: %d", - __func__, status); + if (!length) return; - } - dbg("safe_read_bulk_callback length: %d", - port->read_urb->actual_length); -#ifdef ECHO_RCV - { - int i; - unsigned char *cp = port->read_urb->transfer_buffer; - for (i = 0; i < port->read_urb->actual_length; i++) { - if ((i % 32) == 0) - printk("\nru[%02x] ", i); - printk("%02x ", *cp++); - } - printk("\n"); - } -#endif tty = tty_port_tty_get(&port->port); + if (!tty) + return; + if (safe) { __u16 fcs; fcs = fcs_compute10(data, length, CRC10_INITFCS); @@ -268,21 +250,8 @@ static void safe_read_bulk_callback(struct urb *urb) tty_insert_flip_string(tty, data, length); tty_flip_buffer_push(tty); } - tty_kref_put(tty); - /* Continue trying to always read */ - usb_fill_bulk_urb(urb, port->serial->dev, - usb_rcvbulkpipe(port->serial->dev, - port->bulk_in_endpointAddress), - urb->transfer_buffer, urb->transfer_buffer_length, - safe_read_bulk_callback, port); - - result = usb_submit_urb(urb, GFP_ATOMIC); - if (result) - dev_err(&port->dev, - "%s - failed resubmitting read urb, error %d\n", - __func__, result); - /* FIXME: Need a mechanism to retry later if this happens */ + tty_kref_put(tty); } static int safe_prepare_write_buffer(struct usb_serial_port *port, @@ -343,7 +312,7 @@ static struct usb_serial_driver safe_device = { .id_table = id_table, .usb_driver = &safe_driver, .num_ports = 1, - .read_bulk_callback = safe_read_bulk_callback, + .process_read_urb = safe_process_read_urb, .prepare_write_buffer = safe_prepare_write_buffer, .attach = safe_startup, };