Lines Matching refs:musb

137 	struct platform_device *musb;	/* child musb pdev */  member
146 static void dsps_musb_enable(struct musb *musb) in dsps_musb_enable() argument
148 static int dsps_musb_enable(struct musb *musb) in dsps_musb_enable()
152 struct device *dev = musb->controller; in dsps_musb_enable()
159 void __iomem *reg_base = musb->ctrl_base; in dsps_musb_enable()
163 epmask = ((musb->epmask & wrp->txep_mask) << wrp->txep_shift) | in dsps_musb_enable()
164 ((musb->epmask & wrp->rxep_mask) << wrp->rxep_shift); in dsps_musb_enable()
171 if (is_otg_enabled(musb)) in dsps_musb_enable()
182 static void dsps_musb_disable(struct musb *musb) in dsps_musb_disable() argument
185 struct device *dev = musb->controller; in dsps_musb_disable()
189 void __iomem *reg_base = musb->ctrl_base; in dsps_musb_disable()
194 dsps_writeb(musb->mregs, MUSB_DEVCTL, 0); in dsps_musb_disable()
202 struct musb *musb = (void *)_musb; in otg_timer() local
203 void __iomem *mregs = musb->mregs; in otg_timer()
204 struct device *dev = musb->controller; in otg_timer()
216 dev_dbg(musb->controller, "Poll devctl %02x (%s)\n", devctl, in otg_timer()
217 otg_state_string(musb->xceiv->state)); in otg_timer()
219 spin_lock_irqsave(&musb->lock, flags); in otg_timer()
220 switch (musb->xceiv->state) { in otg_timer()
223 dsps_writeb(musb->mregs, MUSB_DEVCTL, devctl); in otg_timer()
225 devctl = dsps_readb(musb->mregs, MUSB_DEVCTL); in otg_timer()
227 musb->xceiv->state = OTG_STATE_B_IDLE; in otg_timer()
228 MUSB_DEV_MODE(musb); in otg_timer()
230 musb->xceiv->state = OTG_STATE_A_IDLE; in otg_timer()
231 MUSB_HST_MODE(musb); in otg_timer()
235 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; in otg_timer()
236 dsps_writel(musb->ctrl_base, wrp->coreintr_set, in otg_timer()
240 if (!is_peripheral_enabled(musb)) in otg_timer()
248 musb->xceiv->state = OTG_STATE_A_IDLE; in otg_timer()
253 spin_unlock_irqrestore(&musb->lock, flags); in otg_timer()
256 static void dsps_musb_try_idle(struct musb *musb, unsigned long timeout) in dsps_musb_try_idle() argument
258 struct device *dev = musb->controller; in dsps_musb_try_idle()
263 if (!is_otg_enabled(musb)) in dsps_musb_try_idle()
270 if (musb->is_active || (musb->a_wait_bcon == 0 && in dsps_musb_try_idle()
271 musb->xceiv->state == OTG_STATE_A_WAIT_BCON)) { in dsps_musb_try_idle()
272 dev_dbg(musb->controller, "%s active, deleting timer\n", in dsps_musb_try_idle()
273 otg_state_string(musb->xceiv->state)); in dsps_musb_try_idle()
280 dev_dbg(musb->controller, in dsps_musb_try_idle()
286 dev_dbg(musb->controller, "%s inactive, starting idle timer for %u ms\n", in dsps_musb_try_idle()
287 otg_state_string(musb->xceiv->state), in dsps_musb_try_idle()
295 struct musb *musb = hci; in dsps_interrupt() local
296 void __iomem *reg_base = musb->ctrl_base; in dsps_interrupt()
298 struct device *dev = musb->controller; in dsps_interrupt()
309 spin_lock_irqsave(&musb->lock, flags); in dsps_interrupt()
313 musb->int_rx = (epintr & wrp->rxep_bitmap) >> wrp->rxep_shift; in dsps_interrupt()
314 musb->int_tx = (epintr & wrp->txep_bitmap) >> wrp->txep_shift; in dsps_interrupt()
324 musb->int_usb = (usbintr & wrp->usb_bitmap) >> wrp->usb_shift; in dsps_interrupt()
328 dev_dbg(musb->controller, "usbintr (%x) epintr(%x)\n", in dsps_interrupt()
339 if ((usbintr & MUSB_INTR_BABBLE) && is_host_enabled(musb)) in dsps_interrupt()
344 void __iomem *mregs = musb->mregs; in dsps_interrupt()
348 err = is_host_enabled(musb) && (musb->int_usb & in dsps_interrupt()
362 musb->int_usb &= ~MUSB_INTR_VBUSERROR; in dsps_interrupt()
363 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; in dsps_interrupt()
367 } else if (is_host_enabled(musb) && drvvbus) { in dsps_interrupt()
368 musb->is_active = 1; in dsps_interrupt()
369 MUSB_HST_MODE(musb); in dsps_interrupt()
370 musb->xceiv->otg->default_a = 1; in dsps_interrupt()
371 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; in dsps_interrupt()
374 musb->is_active = 0; in dsps_interrupt()
375 MUSB_DEV_MODE(musb); in dsps_interrupt()
376 musb->xceiv->otg->default_a = 0; in dsps_interrupt()
377 musb->xceiv->state = OTG_STATE_B_IDLE; in dsps_interrupt()
381 dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n", in dsps_interrupt()
383 otg_state_string(musb->xceiv->state), in dsps_interrupt()
390 if (musb->int_tx || musb->int_rx || musb->int_usb) in dsps_interrupt()
391 ret |= musb_interrupt(musb); in dsps_interrupt()
400 if (is_otg_enabled(musb) && musb->xceiv->state == OTG_STATE_B_IDLE) in dsps_interrupt()
404 spin_unlock_irqrestore(&musb->lock, flags); in dsps_interrupt()
409 static int dsps_musb_init(struct musb *musb) in dsps_musb_init() argument
412 struct device *dev = musb->controller; in dsps_musb_init()
420 (struct omap_musb_board_data *)musb->controller; in dsps_musb_init()
423 void __iomem *reg_base = musb->ctrl_base; in dsps_musb_init()
428 musb->mregs += wrp->musb_core_offset; in dsps_musb_init()
433 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); in dsps_musb_init()
434 if (IS_ERR_OR_NULL(musb->xceiv)) in dsps_musb_init()
446 if (is_host_enabled(musb)) in dsps_musb_init()
447 setup_timer(&glue->timer, otg_timer, (unsigned long) musb); in dsps_musb_init()
457 musb->isr = dsps_interrupt; in dsps_musb_init()
462 dsps_writel(musb->ctrl_base, wrp->phy_utmi, val); in dsps_musb_init()
470 usb_put_phy(musb->xceiv); in dsps_musb_init()
476 static int dsps_musb_exit(struct musb *musb) in dsps_musb_exit() argument
479 struct device *dev = musb->controller; in dsps_musb_exit()
486 (struct omap_musb_board_data *)musb->controller; in dsps_musb_exit()
490 if (is_host_enabled(musb)) in dsps_musb_exit()
500 usb_put_phy(musb->xceiv); in dsps_musb_exit()
533 struct platform_device *musb; in dsps_create_musb_pdev() local
563 musb = platform_device_alloc("musb-hdrc", -1); in dsps_create_musb_pdev()
564 if (!musb) { in dsps_create_musb_pdev()
570 musb->dev.parent = dev; in dsps_create_musb_pdev()
571 musb->dev.dma_mask = &musb_dmamask; in dsps_create_musb_pdev()
572 musb->dev.coherent_dma_mask = musb_dmamask; in dsps_create_musb_pdev()
574 glue->musb = musb; in dsps_create_musb_pdev()
578 ret = platform_device_add_resources(musb, resources, 2); in dsps_create_musb_pdev()
584 ret = platform_device_add_data(musb, pdata, sizeof(*pdata)); in dsps_create_musb_pdev()
590 ret = platform_device_add(musb); in dsps_create_musb_pdev()
599 platform_device_put(musb); in dsps_create_musb_pdev()
606 platform_device_del(glue->musb); in dsps_delete_musb_pdev()
607 platform_device_put(glue->musb); in dsps_delete_musb_pdev()