Lines Matching refs:musb

48 	struct platform_device	*musb;  member
53 #define glue_to_musb(g) platform_get_drvdata(g->musb)
61 struct musb *musb = (void *)_musb; in musb_do_idle() local
66 spin_lock_irqsave(&musb->lock, flags); in musb_do_idle()
68 switch (musb->xceiv->otg->state) { in musb_do_idle()
71 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in musb_do_idle()
73 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in musb_do_idle()
74 MUSB_DEV_MODE(musb); in musb_do_idle()
76 musb->xceiv->otg->state = OTG_STATE_A_IDLE; in musb_do_idle()
77 MUSB_HST_MODE(musb); in musb_do_idle()
82 if (musb->port1_status & MUSB_PORT_STAT_RESUME) { in musb_do_idle()
83 power = musb_readb(musb->mregs, MUSB_POWER); in musb_do_idle()
85 dev_dbg(musb->controller, "root port resume stopped, power %02x\n", power); in musb_do_idle()
86 musb_writeb(musb->mregs, MUSB_POWER, power); in musb_do_idle()
87 musb->is_active = 1; in musb_do_idle()
88 musb->port1_status &= ~(USB_PORT_STAT_SUSPEND in musb_do_idle()
90 musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16; in musb_do_idle()
91 usb_hcd_poll_rh_status(musb->hcd); in musb_do_idle()
93 musb->xceiv->otg->state = OTG_STATE_A_HOST; in musb_do_idle()
97 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in musb_do_idle()
99 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in musb_do_idle()
101 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON; in musb_do_idle()
105 spin_unlock_irqrestore(&musb->lock, flags); in musb_do_idle()
109 static void omap2430_musb_try_idle(struct musb *musb, unsigned long timeout) in omap2430_musb_try_idle() argument
118 if (musb->is_active || ((musb->a_wait_bcon == 0) in omap2430_musb_try_idle()
119 && (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON))) { in omap2430_musb_try_idle()
120 dev_dbg(musb->controller, "%s active, deleting timer\n", in omap2430_musb_try_idle()
121 usb_otg_state_string(musb->xceiv->otg->state)); in omap2430_musb_try_idle()
131 dev_dbg(musb->controller, "Longer idle timer already pending, ignoring\n"); in omap2430_musb_try_idle()
137 dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n", in omap2430_musb_try_idle()
138 usb_otg_state_string(musb->xceiv->otg->state), in omap2430_musb_try_idle()
143 static void omap2430_musb_set_vbus(struct musb *musb, int is_on) in omap2430_musb_set_vbus() argument
145 struct usb_otg *otg = musb->xceiv->otg; in omap2430_musb_set_vbus()
153 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in omap2430_musb_set_vbus()
156 if (musb->xceiv->otg->state == OTG_STATE_A_IDLE) { in omap2430_musb_set_vbus()
160 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in omap2430_musb_set_vbus()
165 while (musb_readb(musb->mregs, MUSB_DEVCTL) & in omap2430_musb_set_vbus()
173 dev_err(musb->controller, in omap2430_musb_set_vbus()
181 musb->is_active = 1; in omap2430_musb_set_vbus()
183 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; in omap2430_musb_set_vbus()
185 MUSB_HST_MODE(musb); in omap2430_musb_set_vbus()
188 musb->is_active = 0; in omap2430_musb_set_vbus()
195 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in omap2430_musb_set_vbus()
198 MUSB_DEV_MODE(musb); in omap2430_musb_set_vbus()
200 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in omap2430_musb_set_vbus()
202 dev_dbg(musb->controller, "VBUS %s, devctl %02x " in omap2430_musb_set_vbus()
204 usb_otg_state_string(musb->xceiv->otg->state), in omap2430_musb_set_vbus()
205 musb_readb(musb->mregs, MUSB_DEVCTL)); in omap2430_musb_set_vbus()
208 static int omap2430_musb_set_mode(struct musb *musb, u8 musb_mode) in omap2430_musb_set_mode() argument
210 u8 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in omap2430_musb_set_mode()
213 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in omap2430_musb_set_mode()
218 static inline void omap2430_low_level_exit(struct musb *musb) in omap2430_low_level_exit() argument
223 l = musb_readl(musb->mregs, OTG_FORCESTDBY); in omap2430_low_level_exit()
225 musb_writel(musb->mregs, OTG_FORCESTDBY, l); in omap2430_low_level_exit()
228 static inline void omap2430_low_level_init(struct musb *musb) in omap2430_low_level_init() argument
232 l = musb_readl(musb->mregs, OTG_FORCESTDBY); in omap2430_low_level_init()
234 musb_writel(musb->mregs, OTG_FORCESTDBY, l); in omap2430_low_level_init()
258 struct musb *musb = glue_to_musb(glue); in omap_musb_set_mailbox() local
259 struct device *dev = musb->controller; in omap_musb_set_mailbox()
262 struct usb_otg *otg = musb->xceiv->otg; in omap_musb_set_mailbox()
269 musb->xceiv->otg->state = OTG_STATE_A_IDLE; in omap_musb_set_mailbox()
270 musb->xceiv->last_event = USB_EVENT_ID; in omap_musb_set_mailbox()
271 if (musb->gadget_driver) { in omap_musb_set_mailbox()
275 omap2430_musb_set_vbus(musb, 1); in omap_musb_set_mailbox()
283 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in omap_musb_set_mailbox()
284 musb->xceiv->last_event = USB_EVENT_VBUS; in omap_musb_set_mailbox()
285 if (musb->gadget_driver) in omap_musb_set_mailbox()
294 musb->xceiv->last_event = USB_EVENT_NONE; in omap_musb_set_mailbox()
295 if (musb->gadget_driver) { in omap_musb_set_mailbox()
296 omap2430_musb_set_vbus(musb, 0); in omap_musb_set_mailbox()
302 otg_set_vbus(musb->xceiv->otg, 0); in omap_musb_set_mailbox()
311 atomic_notifier_call_chain(&musb->xceiv->notifier, in omap_musb_set_mailbox()
312 musb->xceiv->last_event, NULL); in omap_musb_set_mailbox()
320 struct musb *musb = glue_to_musb(glue); in omap_musb_mailbox_work() local
321 struct device *dev = musb->controller; in omap_musb_mailbox_work()
333 struct musb *musb = __hci; in omap2430_musb_interrupt() local
335 spin_lock_irqsave(&musb->lock, flags); in omap2430_musb_interrupt()
337 musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); in omap2430_musb_interrupt()
338 musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); in omap2430_musb_interrupt()
339 musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); in omap2430_musb_interrupt()
341 if (musb->int_usb || musb->int_tx || musb->int_rx) in omap2430_musb_interrupt()
342 retval = musb_interrupt(musb); in omap2430_musb_interrupt()
344 spin_unlock_irqrestore(&musb->lock, flags); in omap2430_musb_interrupt()
349 static int omap2430_musb_init(struct musb *musb) in omap2430_musb_init() argument
353 struct device *dev = musb->controller; in omap2430_musb_init()
363 musb->phy = devm_phy_get(dev->parent, "usb2-phy"); in omap2430_musb_init()
371 musb->xceiv = devm_usb_get_phy_by_phandle(dev->parent, in omap2430_musb_init()
374 musb->xceiv = devm_usb_get_phy_dev(dev, 0); in omap2430_musb_init()
375 musb->phy = devm_phy_get(dev, "usb"); in omap2430_musb_init()
378 if (IS_ERR(musb->xceiv)) { in omap2430_musb_init()
379 status = PTR_ERR(musb->xceiv); in omap2430_musb_init()
388 if (IS_ERR(musb->phy)) { in omap2430_musb_init()
390 return PTR_ERR(musb->phy); in omap2430_musb_init()
392 musb->isr = omap2430_musb_interrupt; in omap2430_musb_init()
411 l = musb_readl(musb->mregs, OTG_INTERFSEL); in omap2430_musb_init()
421 musb_writel(musb->mregs, OTG_INTERFSEL, l); in omap2430_musb_init()
425 musb_readl(musb->mregs, OTG_REVISION), in omap2430_musb_init()
426 musb_readl(musb->mregs, OTG_SYSCONFIG), in omap2430_musb_init()
427 musb_readl(musb->mregs, OTG_SYSSTATUS), in omap2430_musb_init()
428 musb_readl(musb->mregs, OTG_INTERFSEL), in omap2430_musb_init()
429 musb_readl(musb->mregs, OTG_SIMENABLE)); in omap2430_musb_init()
431 setup_timer(&musb_idle_timer, musb_do_idle, (unsigned long) musb); in omap2430_musb_init()
436 phy_init(musb->phy); in omap2430_musb_init()
437 phy_power_on(musb->phy); in omap2430_musb_init()
439 pm_runtime_put_noidle(musb->controller); in omap2430_musb_init()
447 static void omap2430_musb_enable(struct musb *musb) in omap2430_musb_enable() argument
451 struct device *dev = musb->controller; in omap2430_musb_enable()
462 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in omap2430_musb_enable()
465 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in omap2430_musb_enable()
466 while (musb_readb(musb->mregs, MUSB_DEVCTL) & in omap2430_musb_enable()
486 static void omap2430_musb_disable(struct musb *musb) in omap2430_musb_disable() argument
488 struct device *dev = musb->controller; in omap2430_musb_disable()
496 static int omap2430_musb_exit(struct musb *musb) in omap2430_musb_exit() argument
500 omap2430_low_level_exit(musb); in omap2430_musb_exit()
501 phy_power_off(musb->phy); in omap2430_musb_exit()
502 phy_exit(musb->phy); in omap2430_musb_exit()
532 struct platform_device *musb; in omap2430_probe() local
542 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); in omap2430_probe()
543 if (!musb) { in omap2430_probe()
548 musb->dev.parent = &pdev->dev; in omap2430_probe()
549 musb->dev.dma_mask = &omap2430_dmamask; in omap2430_probe()
550 musb->dev.coherent_dma_mask = omap2430_dmamask; in omap2430_probe()
553 glue->musb = musb; in omap2430_probe()
628 ret = platform_device_add_resources(musb, musb_resources, in omap2430_probe()
635 ret = platform_device_add_data(musb, pdata, sizeof(*pdata)); in omap2430_probe()
647 ret = platform_device_add(musb); in omap2430_probe()
656 platform_device_put(musb); in omap2430_probe()
667 platform_device_unregister(glue->musb); in omap2430_remove()
677 struct musb *musb = glue_to_musb(glue); in omap2430_runtime_suspend() local
679 if (musb) { in omap2430_runtime_suspend()
680 musb->context.otg_interfsel = musb_readl(musb->mregs, in omap2430_runtime_suspend()
683 omap2430_low_level_exit(musb); in omap2430_runtime_suspend()
692 struct musb *musb = glue_to_musb(glue); in omap2430_runtime_resume() local
694 if (!musb) in omap2430_runtime_resume()
697 omap2430_low_level_init(musb); in omap2430_runtime_resume()
698 musb_writel(musb->mregs, OTG_INTERFSEL, in omap2430_runtime_resume()
699 musb->context.otg_interfsel); in omap2430_runtime_resume()