Lines Matching refs:musb
136 struct platform_device *musb; /* child musb pdev */ member
145 static void dsps_musb_enable(struct musb *musb) in dsps_musb_enable() argument
147 static int dsps_musb_enable(struct musb *musb) in dsps_musb_enable()
151 struct device *dev = musb->controller; in dsps_musb_enable()
158 void __iomem *reg_base = musb->ctrl_base; in dsps_musb_enable()
162 epmask = ((musb->epmask & wrp->txep_mask) << wrp->txep_shift) | in dsps_musb_enable()
163 ((musb->epmask & wrp->rxep_mask) << wrp->rxep_shift); in dsps_musb_enable()
170 if (is_otg_enabled(musb)) in dsps_musb_enable()
181 static void dsps_musb_disable(struct musb *musb) in dsps_musb_disable() argument
184 struct device *dev = musb->controller; in dsps_musb_disable()
188 void __iomem *reg_base = musb->ctrl_base; in dsps_musb_disable()
193 dsps_writeb(musb->mregs, MUSB_DEVCTL, 0); in dsps_musb_disable()
201 struct musb *musb = (void *)_musb; in otg_timer() local
202 void __iomem *mregs = musb->mregs; in otg_timer()
203 struct device *dev = musb->controller; in otg_timer()
215 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl, in otg_timer()
216 otg_state_string(musb->xceiv->state)); in otg_timer()
218 spin_lock_irqsave(&musb->lock, flags); in otg_timer()
219 switch (musb->xceiv->state) { in otg_timer()
222 dsps_writeb(musb->mregs, MUSB_DEVCTL, devctl); in otg_timer()
224 devctl = dsps_readb(musb->mregs, MUSB_DEVCTL); in otg_timer()
226 musb->xceiv->state = OTG_STATE_B_IDLE; in otg_timer()
227 MUSB_DEV_MODE(musb); in otg_timer()
229 musb->xceiv->state = OTG_STATE_A_IDLE; in otg_timer()
230 MUSB_HST_MODE(musb); in otg_timer()
234 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; in otg_timer()
235 dsps_writel(musb->ctrl_base, wrp->coreintr_set, in otg_timer()
239 if (!is_peripheral_enabled(musb)) in otg_timer()
247 musb->xceiv->state = OTG_STATE_A_IDLE; in otg_timer()
252 spin_unlock_irqrestore(&musb->lock, flags); in otg_timer()
255 static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout) in dsps_musb_try_idle() argument
257 struct device *dev = musb->controller; in dsps_musb_try_idle()
262 if (!is_otg_enabled(musb)) in dsps_musb_try_idle()
269 if (musb->is_active || (musb->a_wait_bcon == 0 && in dsps_musb_try_idle()
270 musb->xceiv->state == OTG_STATE_A_WAIT_BCON)) { in dsps_musb_try_idle()
271 dev_dbg(musb->controller, "%s active, deleting timer\n", in dsps_musb_try_idle()
272 otg_state_string(musb->xceiv->state)); in dsps_musb_try_idle()
279 dev_dbg(musb->controller, in dsps_musb_try_idle()
285 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n", in dsps_musb_try_idle()
286 otg_state_string(musb->xceiv->state), in dsps_musb_try_idle()
294 struct musb *musb = hci; in dsps_interrupt() local
295 void __iomem *reg_base = musb->ctrl_base; in dsps_interrupt()
297 struct device *dev = musb->controller; in dsps_interrupt()
308 spin_lock_irqsave(&musb->lock, flags); in dsps_interrupt()
312 musb->int_rx = (epintr & wrp->rxep_bitmap) >> wrp->rxep_shift; in dsps_interrupt()
313 musb->int_tx = (epintr & wrp->txep_bitmap) >> wrp->txep_shift; in dsps_interrupt()
323 musb->int_usb = (usbintr & wrp->usb_bitmap) >> wrp->usb_shift; in dsps_interrupt()
327 dev_dbg(musb->controller, "usbintr (%x) epintr(%x)\n", in dsps_interrupt()
338 if ((usbintr & MUSB_INTR_BABBLE) && is_host_enabled(musb)) in dsps_interrupt()
343 void __iomem *mregs = musb->mregs; in dsps_interrupt()
347 err = is_host_enabled(musb) && (musb->int_usb & in dsps_interrupt()
361 musb->int_usb &= ~MUSB_INTR_VBUSERROR; in dsps_interrupt()
362 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; in dsps_interrupt()
366 } else if (is_host_enabled(musb) && drvvbus) { in dsps_interrupt()
367 musb->is_active = 1; in dsps_interrupt()
368 MUSB_HST_MODE(musb); in dsps_interrupt()
369 musb->xceiv->otg->default_a = 1; in dsps_interrupt()
370 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; in dsps_interrupt()
373 musb->is_active = 0; in dsps_interrupt()
374 MUSB_DEV_MODE(musb); in dsps_interrupt()
375 musb->xceiv->otg->default_a = 0; in dsps_interrupt()
376 musb->xceiv->state = OTG_STATE_B_IDLE; in dsps_interrupt()
380 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", in dsps_interrupt()
382 otg_state_string(musb->xceiv->state), in dsps_interrupt()
389 if (musb->int_tx || musb->int_rx || musb->int_usb) in dsps_interrupt()
390 ret |= musb_interrupt(musb); in dsps_interrupt()
399 if (is_otg_enabled(musb) && musb->xceiv->state == OTG_STATE_B_IDLE) in dsps_interrupt()
403 spin_unlock_irqrestore(&musb->lock, flags); in dsps_interrupt()
408 static int dsps_musb_init(struct musb *musb) in dsps_musb_init() argument
411 struct device *dev = musb->controller; in dsps_musb_init()
419 (struct omap_musb_board_data *)musb->controller; in dsps_musb_init()
422 void __iomem *reg_base = musb->ctrl_base; in dsps_musb_init()
427 musb->mregs += wrp->musb_core_offset; in dsps_musb_init()
432 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); in dsps_musb_init()
433 if (IS_ERR_OR_NULL(musb->xceiv)) in dsps_musb_init()
445 if (is_host_enabled(musb)) in dsps_musb_init()
446 setup_timer(&glue->timer, otg_timer, (unsigned long) musb); in dsps_musb_init()
456 musb->isr = dsps_interrupt; in dsps_musb_init()
461 dsps_writel(musb->ctrl_base, wrp->phy_utmi, val); in dsps_musb_init()
469 usb_put_phy(musb->xceiv); in dsps_musb_init()
475 static int dsps_musb_exit(struct musb *musb) in dsps_musb_exit() argument
478 struct device *dev = musb->controller; in dsps_musb_exit()
485 (struct omap_musb_board_data *)musb->controller; in dsps_musb_exit()
489 if (is_host_enabled(musb)) in dsps_musb_exit()
499 usb_put_phy(musb->xceiv); in dsps_musb_exit()
532 struct platform_device *musb; in dsps_create_musb_pdev() local
562 musb = platform_device_alloc("musb-hdrc", -1); in dsps_create_musb_pdev()
563 if (!musb) { in dsps_create_musb_pdev()
569 musb->dev.parent = dev; in dsps_create_musb_pdev()
570 musb->dev.dma_mask = &musb_dmamask; in dsps_create_musb_pdev()
571 musb->dev.coherent_dma_mask = musb_dmamask; in dsps_create_musb_pdev()
573 glue->musb = musb; in dsps_create_musb_pdev()
577 ret = platform_device_add_resources(musb, resources, 2); in dsps_create_musb_pdev()
583 ret = platform_device_add_data(musb, pdata, sizeof(*pdata)); in dsps_create_musb_pdev()
589 ret = platform_device_add(musb); in dsps_create_musb_pdev()
598 platform_device_put(musb); in dsps_create_musb_pdev()
605 platform_device_del(glue->musb); in dsps_delete_musb_pdev()
606 platform_device_put(glue->musb); in dsps_delete_musb_pdev()