Lines Matching refs:musb
29 struct platform_device *musb; member
32 #define glue_to_musb(g) platform_get_drvdata(g->musb)
34 static void ux500_musb_set_vbus(struct musb *musb, int is_on) in ux500_musb_set_vbus() argument
43 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in ux500_musb_set_vbus()
46 if (musb->xceiv->otg->state == OTG_STATE_A_IDLE) { in ux500_musb_set_vbus()
49 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in ux500_musb_set_vbus()
54 while (musb_readb(musb->mregs, MUSB_DEVCTL) & 0x80) { in ux500_musb_set_vbus()
57 dev_err(musb->controller, in ux500_musb_set_vbus()
64 musb->is_active = 1; in ux500_musb_set_vbus()
65 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; in ux500_musb_set_vbus()
67 MUSB_HST_MODE(musb); in ux500_musb_set_vbus()
70 musb->is_active = 0; in ux500_musb_set_vbus()
76 MUSB_DEV_MODE(musb); in ux500_musb_set_vbus()
78 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in ux500_musb_set_vbus()
89 dev_dbg(musb->controller, "VBUS %s, devctl %02x\n", in ux500_musb_set_vbus()
90 usb_otg_state_string(musb->xceiv->otg->state), in ux500_musb_set_vbus()
91 musb_readb(musb->mregs, MUSB_DEVCTL)); in ux500_musb_set_vbus()
97 struct musb *musb = container_of(nb, struct musb, nb); in musb_otg_notifications() local
99 dev_dbg(musb->controller, "musb_otg_notifications %ld %s\n", in musb_otg_notifications()
100 event, usb_otg_state_string(musb->xceiv->otg->state)); in musb_otg_notifications()
104 dev_dbg(musb->controller, "ID GND\n"); in musb_otg_notifications()
105 ux500_musb_set_vbus(musb, 1); in musb_otg_notifications()
108 dev_dbg(musb->controller, "VBUS Connect\n"); in musb_otg_notifications()
111 dev_dbg(musb->controller, "VBUS Disconnect\n"); in musb_otg_notifications()
112 if (is_host_active(musb)) in musb_otg_notifications()
113 ux500_musb_set_vbus(musb, 0); in musb_otg_notifications()
115 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in musb_otg_notifications()
118 dev_dbg(musb->controller, "ID float\n"); in musb_otg_notifications()
128 struct musb *musb = __hci; in ux500_musb_interrupt() local
130 spin_lock_irqsave(&musb->lock, flags); in ux500_musb_interrupt()
132 musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); in ux500_musb_interrupt()
133 musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); in ux500_musb_interrupt()
134 musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); in ux500_musb_interrupt()
136 if (musb->int_usb || musb->int_tx || musb->int_rx) in ux500_musb_interrupt()
137 retval = musb_interrupt(musb); in ux500_musb_interrupt()
139 spin_unlock_irqrestore(&musb->lock, flags); in ux500_musb_interrupt()
144 static int ux500_musb_init(struct musb *musb) in ux500_musb_init() argument
148 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); in ux500_musb_init()
149 if (IS_ERR_OR_NULL(musb->xceiv)) { in ux500_musb_init()
154 musb->nb.notifier_call = musb_otg_notifications; in ux500_musb_init()
155 status = usb_register_notifier(musb->xceiv, &musb->nb); in ux500_musb_init()
157 dev_dbg(musb->controller, "notification register failed\n"); in ux500_musb_init()
161 musb->isr = ux500_musb_interrupt; in ux500_musb_init()
166 static int ux500_musb_exit(struct musb *musb) in ux500_musb_exit() argument
168 usb_unregister_notifier(musb->xceiv, &musb->nb); in ux500_musb_exit()
170 usb_put_phy(musb->xceiv); in ux500_musb_exit()
222 struct platform_device *musb; in ux500_probe() local
244 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); in ux500_probe()
245 if (!musb) { in ux500_probe()
263 musb->dev.parent = &pdev->dev; in ux500_probe()
264 musb->dev.dma_mask = &pdev->dev.coherent_dma_mask; in ux500_probe()
265 musb->dev.coherent_dma_mask = pdev->dev.coherent_dma_mask; in ux500_probe()
268 glue->musb = musb; in ux500_probe()
289 ret = platform_device_add_resources(musb, musb_resources, in ux500_probe()
296 ret = platform_device_add_data(musb, pdata, sizeof(*pdata)); in ux500_probe()
302 ret = platform_device_add(musb); in ux500_probe()
314 platform_device_put(musb); in ux500_probe()
324 platform_device_unregister(glue->musb); in ux500_remove()
334 struct musb *musb = glue_to_musb(glue); in ux500_suspend() local
336 if (musb) in ux500_suspend()
337 usb_phy_set_suspend(musb->xceiv, 1); in ux500_suspend()
347 struct musb *musb = glue_to_musb(glue); in ux500_resume() local
356 if (musb) in ux500_resume()
357 usb_phy_set_suspend(musb->xceiv, 0); in ux500_resume()