static void ghsic_send_cbits_tomodem(void *gptr, u8 portno, int cbits) { struct gctrl_port *port; if (portno >= no_ctrl_ports || !gptr) { pr_err("%s: Invalid portno#%d\n", __func__, portno); return; } port = gctrl_ports[portno].port; if (!port) { pr_err("%s: port is null\n", __func__); return; } if (cbits == port->cbits_tomodem) return; port->cbits_tomodem = cbits; if (!test_bit(CH_OPENED, &port->bridge_sts)) return; pr_debug("%s: ctrl_tomodem:%d\n", __func__, cbits); ctrl_bridge_set_cbits(port->brdg.ch_id, cbits); }
void ctrl_bridge_close(unsigned int id) { struct ctrl_bridge *dev; if (id >= MAX_BRIDGE_DEVICES) return; dev = __dev[id]; if (!dev || !dev->brdg) return; dev_dbg(&dev->intf->dev, "%s:\n", __func__); ctrl_bridge_set_cbits(dev->brdg->ch_id, 0); dev_err(&dev->intf->dev, "%s: usb_wait_anchor_empty_timeout tx_submitted\n", __func__); usb_wait_anchor_empty_timeout(&dev->tx_submitted, 500); dev_err(&dev->intf->dev, "%s: tx_submitted usb_anchor_empty:%d\n", __func__, usb_anchor_empty(&dev->tx_submitted)); usb_unlink_anchored_urbs(&dev->tx_submitted); dev->brdg = NULL; }
static void ghsic_ctrl_connect_w(struct work_struct *w) { struct gserial *gser = NULL; struct grmnet *gr = NULL; struct gctrl_port *port = container_of(w, struct gctrl_port, connect_w); unsigned long flags; int retval; unsigned cbits; if (!port || !test_bit(CH_READY, &port->bridge_sts)) return; pr_debug("%s: port:%p\n", __func__, port); retval = ctrl_bridge_open(&port->brdg); if (retval) { pr_err("%s: ctrl bridge open failed :%d\n", __func__, retval); return; } spin_lock_irqsave(&port->port_lock, flags); if (!port->port_usb) { ctrl_bridge_close(port->brdg.ch_id); spin_unlock_irqrestore(&port->port_lock, flags); return; } set_bit(CH_OPENED, &port->bridge_sts); if (port->cbits_tomodem) ctrl_bridge_set_cbits(port->brdg.ch_id, port->cbits_tomodem); spin_unlock_irqrestore(&port->port_lock, flags); cbits = ctrl_bridge_get_cbits_tohost(port->brdg.ch_id); if (port->gtype == USB_GADGET_SERIAL && (cbits & ACM_CTRL_DCD)) { gser = port->port_usb; if (gser && gser->connect) gser->connect(gser); return; } if (port->gtype == USB_GADGET_RMNET) { gr = port->port_usb; if (gr && gr->connect) gr->connect(gr); } }
void ctrl_bridge_close(unsigned int id) { struct ctrl_bridge *dev; if (id >= MAX_BRIDGE_DEVICES) return; dev = __dev[id]; if (!dev || !dev->brdg) return; dev_dbg(&dev->intf->dev, "%s:\n", __func__); ctrl_bridge_set_cbits(dev->brdg->ch_id, 0); dev->brdg = NULL; }
void ctrl_bridge_close(unsigned int id) { struct ctrl_bridge *dev; if (id >= MAX_BRIDGE_DEVICES) return; dev = __dev[id]; if (!dev || !dev->brdg) return; dev_dbg(&dev->udev->dev, "%s:\n", __func__); ctrl_bridge_set_cbits(dev->brdg->ch_id, 0); usb_unlink_anchored_urbs(&dev->tx_submitted); dev->brdg = NULL; }
void ctrl_bridge_close(unsigned int id) { struct ctrl_bridge *dev; if (id >= MAX_BRIDGE_DEVICES) return; dev = __dev[id]; if (!dev || !dev->brdg) return; dev_dbg(&dev->intf->dev, "%s:\n", __func__); ctrl_bridge_set_cbits(dev->brdg->ch_id, 0); //(+)12/11/08 p10919 : mdm remotefs hello fail fix by case 01013984 usb_wait_anchor_empty_timeout(&dev->tx_submitted,500); //(+)12/11/08 p10919 usb_unlink_anchored_urbs(&dev->tx_submitted); dev->brdg = NULL; }