diff options
author | Jesse Gilles <jgilles@multitech.com> | 2010-04-21 15:53:09 -0500 |
---|---|---|
committer | Jesse Gilles <jgilles@multitech.com> | 2010-04-26 11:46:05 -0500 |
commit | 82701ed338eb73e83c65b01175b78d2c47045a5b (patch) | |
tree | eb97b703b74df03c3f23827c06be1dbc2e272fae /recipes/linux/linux-2.6.28/mtcdp/linux-2.6.28-option-20100405.patch | |
parent | 561e05654ad646682edb42ec2216886b885fee43 (diff) |
linux-2.6.28: add support MTCDP
Diffstat (limited to 'recipes/linux/linux-2.6.28/mtcdp/linux-2.6.28-option-20100405.patch')
-rw-r--r-- | recipes/linux/linux-2.6.28/mtcdp/linux-2.6.28-option-20100405.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/recipes/linux/linux-2.6.28/mtcdp/linux-2.6.28-option-20100405.patch b/recipes/linux/linux-2.6.28/mtcdp/linux-2.6.28-option-20100405.patch new file mode 100644 index 0000000000..8a06a1f04a --- /dev/null +++ b/recipes/linux/linux-2.6.28/mtcdp/linux-2.6.28-option-20100405.patch @@ -0,0 +1,69 @@ +diff -uprN -X linux-2.6.28/Documentation/dontdiff linux-2.6.28-vanilla/drivers/usb/serial/option.c linux-2.6.28/drivers/usb/serial/option.c +--- linux-2.6.28-vanilla/drivers/usb/serial/option.c 2008-12-24 17:26:37.000000000 -0600 ++++ linux-2.6.28/drivers/usb/serial/option.c 2010-04-05 15:35:16.000000000 -0500 +@@ -696,30 +696,46 @@ static void option_indat_callback(struct + dbg("%s: %p", __func__, urb); + + endpoint = usb_pipeendpoint(urb->pipe); +- port = urb->context; ++ port = urb->context; + +- if (status) { ++ switch (status) { ++ case 0: ++ /* success */ ++ break; ++ case -ECONNRESET: ++ case -ENOENT: ++ case -ESHUTDOWN: ++ /* this urb is terminated, clean up */ ++ dbg("%s: urb shutting down with status: %d on endpoint %02x.", ++ __func__, status, endpoint); ++ return; ++ default: + dbg("%s: nonzero status: %d on endpoint %02x.", +- __func__, status, endpoint); +- } else { ++ __func__, status, endpoint); ++ goto exit; ++ } ++ ++ usb_serial_debug_data(debug, &port->dev, __func__, ++ urb->actual_length, data); ++ ++ if (urb->actual_length) { + tty = tty_port_tty_get(&port->port); +- if (urb->actual_length) { +- tty_buffer_request_room(tty, urb->actual_length); +- tty_insert_flip_string(tty, data, urb->actual_length); +- tty_flip_buffer_push(tty); +- } else +- dbg("%s: empty read urb received", __func__); +- tty_kref_put(tty); + +- /* Resubmit urb so we continue receiving */ +- if (port->port.count && status != -ESHUTDOWN) { +- err = usb_submit_urb(urb, GFP_ATOMIC); +- if (err) +- printk(KERN_ERR "%s: resubmit read urb failed. " +- "(%d)", __func__, err); +- } ++ tty_buffer_request_room(tty, urb->actual_length); ++ tty_insert_flip_string(tty, data, urb->actual_length); ++ tty_flip_buffer_push(tty); ++ ++ tty_kref_put(tty); + } +- return; ++ ++exit: ++ /* Resubmit urb so we continue receiving */ ++ err = usb_submit_urb(urb, GFP_ATOMIC); ++ if (err && err != -EPERM) ++ printk(KERN_ERR "%s: resubmit read urb failed. " ++ "(%d)", __func__, err); ++ else ++ usb_mark_last_busy(port->serial->dev); + } + + static void option_outdat_callback(struct urb *urb) |