示例#1
0
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);
}
示例#2
0
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;
}
示例#6
0
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;
}