static int acc_function_set_alt(struct usb_function *f, unsigned intf, unsigned alt) { struct acc_dev *dev = func_to_dev(f); struct usb_composite_dev *cdev = f->config->cdev; int ret; DBG(cdev, "acc_function_set_alt intf: %d alt: %d\n", intf, alt); ret = usb_ep_enable(dev->ep_in, ep_choose(cdev->gadget, &acc_highspeed_in_desc, &acc_fullspeed_in_desc)); if (ret) return ret; ret = usb_ep_enable(dev->ep_out, ep_choose(cdev->gadget, &acc_highspeed_out_desc, &acc_fullspeed_out_desc)); if (ret) { usb_ep_disable(dev->ep_in); return ret; } dev->online = 1; /* readers may be blocked waiting for us to go online */ wake_up(&dev->read_wq); #ifdef CONFIG_ANDROID_PANTECH_USB_MANAGER usb_interface_enum_cb(ACCESSORY_TYPE_FLAG); #endif return 0; }
static int gser_set_alt(struct usb_function *f, unsigned intf, unsigned alt) { struct f_gser *gser = func_to_gser(f); struct usb_composite_dev *cdev = f->config->cdev; int rc = 0; /* we know alt == 0, so this is an activation or a reset */ #ifdef CONFIG_MODEM_SUPPORT if (gser->notify->driver_data) { DBG(cdev, "reset generic ctl ttyGS%d\n", gser->port_num); usb_ep_disable(gser->notify); } if (!gser->notify->desc) { if (config_ep_by_speed(cdev->gadget, f, gser->notify)) { gser->notify->desc = NULL; return -EINVAL; } } rc = usb_ep_enable(gser->notify); if (rc) { ERROR(cdev, "can't enable %s, result %d\n", gser->notify->name, rc); return rc; } gser->notify->driver_data = gser; #endif if (gser->port.in->driver_data) { DBG(cdev, "reset generic data ttyGS%d\n", gser->port_num); gport_disconnect(gser); } if (!gser->port.in->desc || !gser->port.out->desc) { DBG(cdev, "activate generic ttyGS%d\n", gser->port_num); if (config_ep_by_speed(cdev->gadget, f, gser->port.in) || config_ep_by_speed(cdev->gadget, f, gser->port.out)) { gser->port.in->desc = NULL; gser->port.out->desc = NULL; return -EINVAL; } } #ifdef FEATURE_PANTECH_MODEM_REOPEN_DELAY schedule_delayed_work(&gser->connect_work, msecs_to_jiffies(50)); #else gport_connect(gser); #endif gser->online = 1; #ifdef CONFIG_ANDROID_PANTECH_USB_MANAGER usb_interface_enum_cb(ACM_TYPE_FLAG); #endif return rc; }
static int mtp_function_set_alt(struct usb_function *f, unsigned intf, unsigned alt) { int ret; printk(KERN_DEBUG "%s intf=%d alt=%d\n", __func__, intf, alt); ret = usb_ep_enable(g_usb_mtp_context.bulk_in, ep_choose(g_usb_mtp_context.cdev->gadget, &hs_bulk_in_desc, &fs_bulk_in_desc)); if (ret) return ret; ret = usb_ep_enable(g_usb_mtp_context.bulk_out, ep_choose(g_usb_mtp_context.cdev->gadget, &hs_bulk_out_desc, &fs_bulk_out_desc)); if (ret) { usb_ep_disable(g_usb_mtp_context.bulk_in); return ret; } ret = usb_ep_enable(g_usb_mtp_context.intr_in, ep_choose(g_usb_mtp_context.cdev->gadget, &hs_intr_in_desc, &fs_intr_in_desc)); if (ret) { usb_ep_disable(g_usb_mtp_context.bulk_in); usb_ep_disable(g_usb_mtp_context.bulk_out); return ret; } usb_interface_enum_cb(MTP_TYPE_FLAG); g_usb_mtp_context.cur_read_req = 0; g_usb_mtp_context.read_buf = 0; g_usb_mtp_context.data_len = 0; /* we're online -- get all rx requests queued */ start_out_receive(); g_usb_mtp_context.online = 1; g_usb_mtp_context.cancel = 0; g_usb_mtp_context.ctl_cancel = 0; g_usb_mtp_context.error = 0; /* readers may be blocked waiting for us to go online */ wake_up(&g_usb_mtp_context.rx_wq); return 0; }