diff options
author | Mayank Rana <mrana@codeaurora.org> | 2015-10-06 14:41:03 -0700 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 19:58:21 -0700 |
commit | ea1cd34463715f0776b9b992016000277f550841 (patch) | |
tree | 469f90514c377c1120e6b16ebe6c1312cbd14d96 /drivers/usb/gadget/function | |
parent | 4687a02e767fc1cc2f9275d6b7e3cb681a0d9945 (diff) |
usb: u_data_bridge: Lower DTR on USB cable disconnect to modem
When DUN call is operational and USB cable is being disconnected,
DTR is not being lowered with modem. This results into no DUN call
functionality on next USB cable connect case. Fix this issue by
lowering DTR to modem on USB cable disconnect.
This change also returns zero instead of -EAGAIN when there is no
write USB request available. Also it moves port open interrupted
message loglevel from pr_err() to pr_debug to reduce logging on
serial console.
Change-Id: I3259417aceee2713d7765c9de34ace4ea2d3ed96
Signed-off-by: Mayank Rana <mrana@codeaurora.org>
Diffstat (limited to 'drivers/usb/gadget/function')
-rw-r--r-- | drivers/usb/gadget/function/u_data_bridge.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/usb/gadget/function/u_data_bridge.c b/drivers/usb/gadget/function/u_data_bridge.c index 8a0ac837d66b..1da24304bcd8 100644 --- a/drivers/usb/gadget/function/u_data_bridge.c +++ b/drivers/usb/gadget/function/u_data_bridge.c @@ -362,7 +362,7 @@ int gbridge_port_open(struct inode *inode, struct file *file) ret = wait_event_interruptible(port->open_wq, port->is_connected); if (ret) { - pr_err("open interrupted.\n"); + pr_debug("open interrupted.\n"); return ret; } @@ -521,7 +521,7 @@ ssize_t gbridge_port_write(struct file *file, if (list_empty(&port->write_pool)) { spin_unlock_irqrestore(&port->port_lock, flags); pr_debug("%s: Request list is empty.\n", __func__); - return -EAGAIN; + return 0; } pool = &port->write_pool; req = list_first_entry(pool, struct usb_request, list); @@ -912,6 +912,10 @@ void gbridge_disconnect(void *gptr, u8 portno) gser = gptr; gbridge_stop_io(port); + + /* lower DTR to modem */ + gbridge_notify_modem(gser, portno, 0); + spin_lock_irqsave(&port->port_lock, flags); port->is_connected = false; port->port_usb = NULL; |