Lines Matching refs:musb
32 struct platform_device *musb; member
37 #define glue_to_musb(g) platform_get_drvdata(g->musb)
41 static void omap2430_musb_set_vbus(struct musb *musb, int is_on) in omap2430_musb_set_vbus() argument
43 struct usb_otg *otg = musb->xceiv->otg; in omap2430_musb_set_vbus()
51 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in omap2430_musb_set_vbus()
54 if (musb->xceiv->otg->state == OTG_STATE_A_IDLE) { in omap2430_musb_set_vbus()
58 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in omap2430_musb_set_vbus()
63 while (musb_readb(musb->mregs, MUSB_DEVCTL) & in omap2430_musb_set_vbus()
71 dev_err(musb->controller, in omap2430_musb_set_vbus()
79 musb->is_active = 1; in omap2430_musb_set_vbus()
80 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; in omap2430_musb_set_vbus()
82 MUSB_HST_MODE(musb); in omap2430_musb_set_vbus()
85 musb->is_active = 0; in omap2430_musb_set_vbus()
91 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in omap2430_musb_set_vbus()
94 MUSB_DEV_MODE(musb); in omap2430_musb_set_vbus()
96 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in omap2430_musb_set_vbus()
98 dev_dbg(musb->controller, "VBUS %s, devctl %02x " in omap2430_musb_set_vbus()
100 usb_otg_state_string(musb->xceiv->otg->state), in omap2430_musb_set_vbus()
101 musb_readb(musb->mregs, MUSB_DEVCTL)); in omap2430_musb_set_vbus()
104 static inline void omap2430_low_level_exit(struct musb *musb) in omap2430_low_level_exit() argument
109 l = musb_readl(musb->mregs, OTG_FORCESTDBY); in omap2430_low_level_exit()
111 musb_writel(musb->mregs, OTG_FORCESTDBY, l); in omap2430_low_level_exit()
114 static inline void omap2430_low_level_init(struct musb *musb) in omap2430_low_level_init() argument
118 l = musb_readl(musb->mregs, OTG_FORCESTDBY); in omap2430_low_level_init()
120 musb_writel(musb->mregs, OTG_FORCESTDBY, l); in omap2430_low_level_init()
145 struct musb *musb = glue_to_musb(glue); in omap_musb_set_mailbox() local
147 dev_get_platdata(musb->controller); in omap_musb_set_mailbox()
150 pm_runtime_get_sync(musb->controller); in omap_musb_set_mailbox()
153 dev_dbg(musb->controller, "ID GND\n"); in omap_musb_set_mailbox()
155 musb->xceiv->otg->state = OTG_STATE_A_IDLE; in omap_musb_set_mailbox()
156 musb->xceiv->last_event = USB_EVENT_ID; in omap_musb_set_mailbox()
157 if (musb->gadget_driver) { in omap_musb_set_mailbox()
160 omap2430_musb_set_vbus(musb, 1); in omap_musb_set_mailbox()
165 dev_dbg(musb->controller, "VBUS Connect\n"); in omap_musb_set_mailbox()
167 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in omap_musb_set_mailbox()
168 musb->xceiv->last_event = USB_EVENT_VBUS; in omap_musb_set_mailbox()
174 dev_dbg(musb->controller, "VBUS Disconnect\n"); in omap_musb_set_mailbox()
176 musb->xceiv->last_event = USB_EVENT_NONE; in omap_musb_set_mailbox()
177 if (musb->gadget_driver) in omap_musb_set_mailbox()
178 omap2430_musb_set_vbus(musb, 0); in omap_musb_set_mailbox()
181 otg_set_vbus(musb->xceiv->otg, 0); in omap_musb_set_mailbox()
187 dev_dbg(musb->controller, "ID float\n"); in omap_musb_set_mailbox()
189 pm_runtime_mark_last_busy(musb->controller); in omap_musb_set_mailbox()
190 pm_runtime_put_autosuspend(musb->controller); in omap_musb_set_mailbox()
191 atomic_notifier_call_chain(&musb->xceiv->notifier, in omap_musb_set_mailbox()
192 musb->xceiv->last_event, NULL); in omap_musb_set_mailbox()
208 struct musb *musb = __hci; in omap2430_musb_interrupt() local
210 spin_lock_irqsave(&musb->lock, flags); in omap2430_musb_interrupt()
212 musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); in omap2430_musb_interrupt()
213 musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); in omap2430_musb_interrupt()
214 musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); in omap2430_musb_interrupt()
216 if (musb->int_usb || musb->int_tx || musb->int_rx) in omap2430_musb_interrupt()
217 retval = musb_interrupt(musb); in omap2430_musb_interrupt()
219 spin_unlock_irqrestore(&musb->lock, flags); in omap2430_musb_interrupt()
224 static int omap2430_musb_init(struct musb *musb) in omap2430_musb_init() argument
228 struct device *dev = musb->controller; in omap2430_musb_init()
237 musb->phy = devm_phy_get(dev->parent, "usb2-phy"); in omap2430_musb_init()
245 musb->xceiv = devm_usb_get_phy_by_phandle(dev->parent, "usb-phy", 0); in omap2430_musb_init()
247 if (IS_ERR(musb->xceiv)) { in omap2430_musb_init()
248 status = PTR_ERR(musb->xceiv); in omap2430_musb_init()
257 if (IS_ERR(musb->phy)) { in omap2430_musb_init()
259 return PTR_ERR(musb->phy); in omap2430_musb_init()
261 musb->isr = omap2430_musb_interrupt; in omap2430_musb_init()
262 phy_init(musb->phy); in omap2430_musb_init()
263 phy_power_on(musb->phy); in omap2430_musb_init()
265 l = musb_readl(musb->mregs, OTG_INTERFSEL); in omap2430_musb_init()
275 musb_writel(musb->mregs, OTG_INTERFSEL, l); in omap2430_musb_init()
279 musb_readl(musb->mregs, OTG_REVISION), in omap2430_musb_init()
280 musb_readl(musb->mregs, OTG_SYSCONFIG), in omap2430_musb_init()
281 musb_readl(musb->mregs, OTG_SYSSTATUS), in omap2430_musb_init()
282 musb_readl(musb->mregs, OTG_INTERFSEL), in omap2430_musb_init()
283 musb_readl(musb->mregs, OTG_SIMENABLE)); in omap2430_musb_init()
291 static void omap2430_musb_enable(struct musb *musb) in omap2430_musb_enable() argument
295 struct device *dev = musb->controller; in omap2430_musb_enable()
307 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in omap2430_musb_enable()
310 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in omap2430_musb_enable()
311 while (musb_readb(musb->mregs, MUSB_DEVCTL) & in omap2430_musb_enable()
331 static void omap2430_musb_disable(struct musb *musb) in omap2430_musb_disable() argument
333 struct device *dev = musb->controller; in omap2430_musb_disable()
341 static int omap2430_musb_exit(struct musb *musb) in omap2430_musb_exit() argument
343 struct device *dev = musb->controller; in omap2430_musb_exit()
346 omap2430_low_level_exit(musb); in omap2430_musb_exit()
347 phy_power_off(musb->phy); in omap2430_musb_exit()
348 phy_exit(musb->phy); in omap2430_musb_exit()
349 musb->phy = NULL; in omap2430_musb_exit()
379 struct platform_device *musb; in omap2430_probe() local
394 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); in omap2430_probe()
395 if (!musb) { in omap2430_probe()
400 musb->dev.parent = &pdev->dev; in omap2430_probe()
401 musb->dev.dma_mask = &omap2430_dmamask; in omap2430_probe()
402 musb->dev.coherent_dma_mask = omap2430_dmamask; in omap2430_probe()
405 glue->musb = musb; in omap2430_probe()
476 ret = platform_device_add_resources(musb, musb_resources, in omap2430_probe()
483 ret = platform_device_add_data(musb, pdata, sizeof(*pdata)); in omap2430_probe()
491 ret = platform_device_add(musb); in omap2430_probe()
503 platform_device_put(musb); in omap2430_probe()
513 platform_device_unregister(glue->musb); in omap2430_remove()
524 struct musb *musb = glue_to_musb(glue); in omap2430_runtime_suspend() local
526 if (!musb) in omap2430_runtime_suspend()
529 musb->context.otg_interfsel = musb_readl(musb->mregs, in omap2430_runtime_suspend()
532 omap2430_low_level_exit(musb); in omap2430_runtime_suspend()
540 struct musb *musb = glue_to_musb(glue); in omap2430_runtime_resume() local
542 if (!musb) in omap2430_runtime_resume()
545 omap2430_low_level_init(musb); in omap2430_runtime_resume()
546 musb_writel(musb->mregs, OTG_INTERFSEL, in omap2430_runtime_resume()
547 musb->context.otg_interfsel); in omap2430_runtime_resume()