static int msm_otg_set_peripheral(struct otg_transceiver *xceiv, struct usb_gadget *gadget) { struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg); if (!dev || (dev != the_msm_otg)) return -ENODEV; if (!gadget) { msm_otg_start_peripheral(xceiv, 0); dev->otg.gadget = 0; disable_sess_valid(dev); if (dev->pmic_notif_supp && dev->pdata->pmic_unregister_vbus_sn) dev->pdata->pmic_unregister_vbus_sn (&msm_otg_set_vbus_state); return 0; } dev->otg.gadget = gadget; enable_sess_valid(dev); if (dev->pmic_notif_supp && dev->pdata->pmic_register_vbus_sn) dev->pdata->pmic_register_vbus_sn(&msm_otg_set_vbus_state); pr_info("peripheral driver registered w/ tranceiver\n"); wake_lock(&dev->wlock); queue_work(dev->wq, &dev->sm_work); return 0; }
static int msm_otg_set_peripheral(struct otg_transceiver *xceiv, struct usb_gadget *gadget) { struct msm_otg *dev = container_of(xceiv, struct msm_otg, otg); if (!dev || (dev != the_msm_otg)) return -ENODEV; if (!gadget) { msm_otg_start_peripheral(xceiv, 0); dev->otg.gadget = 0; disable_sess_valid(dev); return 0; } dev->otg.gadget = gadget; enable_sess_valid(dev); pr_info("peripheral driver registered w/ tranceiver\n"); if (is_b_sess_vld()) msm_otg_start_peripheral(&dev->otg, 1); else if (is_host()) msm_otg_start_host(&dev->otg, 1); else msm_otg_suspend(dev); return 0; }