• Home
  • Raw
  • Download

Lines Matching refs:musb

34 	struct platform_device	*musb;  member
37 static void tusb_musb_set_vbus(struct musb *musb, int is_on);
46 u8 tusb_get_revision(struct musb *musb) in tusb_get_revision() argument
48 void __iomem *tbase = musb->ctrl_base; in tusb_get_revision()
64 static int tusb_print_revision(struct musb *musb) in tusb_print_revision() argument
66 void __iomem *tbase = musb->ctrl_base; in tusb_print_revision()
69 rev = tusb_get_revision(musb); in tusb_print_revision()
89 return tusb_get_revision(musb); in tusb_print_revision()
99 static void tusb_wbus_quirk(struct musb *musb, int enabled) in tusb_wbus_quirk() argument
101 void __iomem *tbase = musb->ctrl_base; in tusb_wbus_quirk()
114 dev_dbg(musb->controller, "Enabled tusb wbus quirk ctrl %08x ena %08x\n", in tusb_wbus_quirk()
123 dev_dbg(musb->controller, "Disabled tusb wbus quirk ctrl %08x ena %08x\n", in tusb_wbus_quirk()
180 struct musb *musb = hw_ep->musb; in musb_write_fifo() local
187 dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n", in musb_write_fifo()
230 struct musb *musb = hw_ep->musb; in musb_read_fifo() local
235 dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n", in musb_read_fifo()
275 static struct musb *the_musb;
285 struct musb *musb = the_musb; in tusb_draw_power() local
286 void __iomem *tbase = musb->ctrl_base; in tusb_draw_power()
299 if (x->otg->default_a || mA < (musb->min_power << 1)) in tusb_draw_power()
304 musb->is_bus_powered = 1; in tusb_draw_power()
307 musb->is_bus_powered = 0; in tusb_draw_power()
312 dev_dbg(musb->controller, "draw max %d mA VBUS\n", mA); in tusb_draw_power()
320 static void tusb_set_clock_source(struct musb *musb, unsigned mode) in tusb_set_clock_source() argument
322 void __iomem *tbase = musb->ctrl_base; in tusb_set_clock_source()
347 static void tusb_allow_idle(struct musb *musb, u32 wakeup_enables) in tusb_allow_idle() argument
349 void __iomem *tbase = musb->ctrl_base; in tusb_allow_idle()
353 && (tusb_get_revision(musb) == TUSB_REV_30)) in tusb_allow_idle()
354 tusb_wbus_quirk(musb, 1); in tusb_allow_idle()
356 tusb_set_clock_source(musb, 0); in tusb_allow_idle()
368 if (is_host_active(musb)) { in tusb_allow_idle()
378 dev_dbg(musb->controller, "idle, wake on %02x\n", wakeup_enables); in tusb_allow_idle()
384 static int tusb_musb_vbus_status(struct musb *musb) in tusb_musb_vbus_status() argument
386 void __iomem *tbase = musb->ctrl_base; in tusb_musb_vbus_status()
415 struct musb *musb = (void *)_musb; in musb_do_idle() local
418 spin_lock_irqsave(&musb->lock, flags); in musb_do_idle()
420 switch (musb->xceiv->state) { in musb_do_idle()
422 if ((musb->a_wait_bcon != 0) in musb_do_idle()
423 && (musb->idle_timeout == 0 in musb_do_idle()
424 || time_after(jiffies, musb->idle_timeout))) { in musb_do_idle()
425 dev_dbg(musb->controller, "Nothing connected %s, turning off VBUS\n", in musb_do_idle()
426 usb_otg_state_string(musb->xceiv->state)); in musb_do_idle()
430 tusb_musb_set_vbus(musb, 0); in musb_do_idle()
435 if (!musb->is_active) { in musb_do_idle()
439 if (is_host_active(musb) && (musb->port1_status >> 16)) in musb_do_idle()
442 if (!musb->gadget_driver) { in musb_do_idle()
450 tusb_allow_idle(musb, wakeups); in musb_do_idle()
453 spin_unlock_irqrestore(&musb->lock, flags); in musb_do_idle()
469 static void tusb_musb_try_idle(struct musb *musb, unsigned long timeout) in tusb_musb_try_idle() argument
478 if (musb->is_active || ((musb->a_wait_bcon == 0) in tusb_musb_try_idle()
479 && (musb->xceiv->state == OTG_STATE_A_WAIT_BCON))) { in tusb_musb_try_idle()
480 dev_dbg(musb->controller, "%s active, deleting timer\n", in tusb_musb_try_idle()
481 usb_otg_state_string(musb->xceiv->state)); in tusb_musb_try_idle()
491 dev_dbg(musb->controller, "Longer idle timer already pending, ignoring\n"); in tusb_musb_try_idle()
497 dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n", in tusb_musb_try_idle()
498 usb_otg_state_string(musb->xceiv->state), in tusb_musb_try_idle()
510 static void tusb_musb_set_vbus(struct musb *musb, int is_on) in tusb_musb_set_vbus() argument
512 void __iomem *tbase = musb->ctrl_base; in tusb_musb_set_vbus()
515 struct usb_otg *otg = musb->xceiv->otg; in tusb_musb_set_vbus()
524 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in tusb_musb_set_vbus()
529 musb->xceiv->state = OTG_STATE_A_WAIT_VRISE; in tusb_musb_set_vbus()
533 MUSB_HST_MODE(musb); in tusb_musb_set_vbus()
542 switch (musb->xceiv->state) { in tusb_musb_set_vbus()
545 musb->xceiv->state = OTG_STATE_A_WAIT_VFALL; in tusb_musb_set_vbus()
548 musb->xceiv->state = OTG_STATE_A_IDLE; in tusb_musb_set_vbus()
551 musb->xceiv->state = OTG_STATE_A_IDLE; in tusb_musb_set_vbus()
553 musb->is_active = 0; in tusb_musb_set_vbus()
555 MUSB_HST_MODE(musb); in tusb_musb_set_vbus()
557 musb->is_active = 0; in tusb_musb_set_vbus()
559 musb->xceiv->state = OTG_STATE_B_IDLE; in tusb_musb_set_vbus()
560 MUSB_DEV_MODE(musb); in tusb_musb_set_vbus()
571 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in tusb_musb_set_vbus()
573 dev_dbg(musb->controller, "VBUS %s, devctl %02x otg %3x conf %08x prcm %08x\n", in tusb_musb_set_vbus()
574 usb_otg_state_string(musb->xceiv->state), in tusb_musb_set_vbus()
575 musb_readb(musb->mregs, MUSB_DEVCTL), in tusb_musb_set_vbus()
587 static int tusb_musb_set_mode(struct musb *musb, u8 musb_mode) in tusb_musb_set_mode() argument
589 void __iomem *tbase = musb->ctrl_base; in tusb_musb_set_mode()
617 dev_dbg(musb->controller, "Trying to set mode %i\n", musb_mode); in tusb_musb_set_mode()
637 tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase) in tusb_otg_ints() argument
641 struct usb_otg *otg = musb->xceiv->otg; in tusb_otg_ints()
648 dev_dbg(musb->controller, "Default-%c\n", default_a ? 'A' : 'B'); in tusb_otg_ints()
650 tusb_musb_set_vbus(musb, default_a); in tusb_otg_ints()
663 musb->port1_status &= in tusb_otg_ints()
672 dev_dbg(musb->controller, "Forcing disconnect (no interrupt)\n"); in tusb_otg_ints()
673 if (musb->xceiv->state != OTG_STATE_B_IDLE) { in tusb_otg_ints()
675 musb->xceiv->state = OTG_STATE_B_IDLE; in tusb_otg_ints()
676 musb->int_usb |= MUSB_INTR_DISCONNECT; in tusb_otg_ints()
678 musb->is_active = 0; in tusb_otg_ints()
680 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n", in tusb_otg_ints()
681 usb_otg_state_string(musb->xceiv->state), otg_stat); in tusb_otg_ints()
683 schedule_work(&musb->irq_work); in tusb_otg_ints()
686 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n", in tusb_otg_ints()
687 usb_otg_state_string(musb->xceiv->state), otg_stat); in tusb_otg_ints()
689 switch (musb->xceiv->state) { in tusb_otg_ints()
691 dev_dbg(musb->controller, "Got SRP, turning on VBUS\n"); in tusb_otg_ints()
692 musb_platform_set_vbus(musb, 1); in tusb_otg_ints()
695 if (musb->a_wait_bcon != 0) in tusb_otg_ints()
696 musb->is_active = 0; in tusb_otg_ints()
698 musb->is_active = 1; in tusb_otg_ints()
716 if (musb->vbuserr_retry) { in tusb_otg_ints()
717 musb->vbuserr_retry--; in tusb_otg_ints()
718 tusb_musb_set_vbus(musb, 1); in tusb_otg_ints()
720 musb->vbuserr_retry in tusb_otg_ints()
722 tusb_musb_set_vbus(musb, 0); in tusb_otg_ints()
735 dev_dbg(musb->controller, "%s timer, %03x\n", in tusb_otg_ints()
736 usb_otg_state_string(musb->xceiv->state), otg_stat); in tusb_otg_ints()
738 switch (musb->xceiv->state) { in tusb_otg_ints()
743 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in tusb_otg_ints()
747 dev_dbg(musb->controller, "devctl %02x\n", devctl); in tusb_otg_ints()
750 musb->xceiv->state = OTG_STATE_A_WAIT_BCON; in tusb_otg_ints()
751 musb->is_active = 0; in tusb_otg_ints()
753 + msecs_to_jiffies(musb->a_wait_bcon); in tusb_otg_ints()
757 tusb_musb_set_vbus(musb, 0); in tusb_otg_ints()
761 if (musb->a_wait_bcon != 0) in tusb_otg_ints()
763 + msecs_to_jiffies(musb->a_wait_bcon); in tusb_otg_ints()
773 schedule_work(&musb->irq_work); in tusb_otg_ints()
780 struct musb *musb = __hci; in tusb_musb_interrupt() local
781 void __iomem *tbase = musb->ctrl_base; in tusb_musb_interrupt()
785 spin_lock_irqsave(&musb->lock, flags); in tusb_musb_interrupt()
792 dev_dbg(musb->controller, "TUSB IRQ %08x\n", int_src); in tusb_musb_interrupt()
794 musb->int_usb = (u8) int_src; in tusb_musb_interrupt()
801 if (tusb_get_revision(musb) == TUSB_REV_30) in tusb_musb_interrupt()
802 tusb_wbus_quirk(musb, 0); in tusb_musb_interrupt()
813 dev_dbg(musb->controller, "TUSB NOR not ready\n"); in tusb_musb_interrupt()
817 tusb_set_clock_source(musb, 1); in tusb_musb_interrupt()
822 musb->is_active = 1; in tusb_musb_interrupt()
823 schedule_work(&musb->irq_work); in tusb_musb_interrupt()
825 dev_dbg(musb->controller, "wake %sactive %02x\n", in tusb_musb_interrupt()
826 musb->is_active ? "" : "in", reg); in tusb_musb_interrupt()
838 idle_timeout = tusb_otg_ints(musb, int_src, tbase); in tusb_musb_interrupt()
847 dev_dbg(musb->controller, "DMA IRQ %08x\n", dma_src); in tusb_musb_interrupt()
855 dev_dbg(musb->controller, "completing ep%i %s\n", i, "tx"); in tusb_musb_interrupt()
856 musb_dma_completion(musb, i, 1); in tusb_musb_interrupt()
868 musb->int_rx = (((musb_src >> 16) & 0xffff) << 1); in tusb_musb_interrupt()
869 musb->int_tx = (musb_src & 0xffff); in tusb_musb_interrupt()
871 musb->int_rx = 0; in tusb_musb_interrupt()
872 musb->int_tx = 0; in tusb_musb_interrupt()
876 musb_interrupt(musb); in tusb_musb_interrupt()
882 tusb_musb_try_idle(musb, idle_timeout); in tusb_musb_interrupt()
885 spin_unlock_irqrestore(&musb->lock, flags); in tusb_musb_interrupt()
897 static void tusb_musb_enable(struct musb *musb) in tusb_musb_enable() argument
899 void __iomem *tbase = musb->ctrl_base; in tusb_musb_enable()
923 irq_set_irq_type(musb->nIrq, IRQ_TYPE_LEVEL_LOW); in tusb_musb_enable()
941 static void tusb_musb_disable(struct musb *musb) in tusb_musb_disable() argument
943 void __iomem *tbase = musb->ctrl_base; in tusb_musb_disable()
966 static void tusb_setup_cpu_interface(struct musb *musb) in tusb_setup_cpu_interface() argument
968 void __iomem *tbase = musb->ctrl_base; in tusb_setup_cpu_interface()
993 static int tusb_musb_start(struct musb *musb) in tusb_musb_start() argument
995 void __iomem *tbase = musb->ctrl_base; in tusb_musb_start()
1000 if (musb->board_set_power) in tusb_musb_start()
1001 ret = musb->board_set_power(1); in tusb_musb_start()
1007 spin_lock_irqsave(&musb->lock, flags); in tusb_musb_start()
1015 ret = tusb_print_revision(musb); in tusb_musb_start()
1027 tusb_set_clock_source(musb, 1); in tusb_musb_start()
1038 tusb_setup_cpu_interface(musb); in tusb_musb_start()
1049 spin_unlock_irqrestore(&musb->lock, flags); in tusb_musb_start()
1054 spin_unlock_irqrestore(&musb->lock, flags); in tusb_musb_start()
1056 if (musb->board_set_power) in tusb_musb_start()
1057 musb->board_set_power(0); in tusb_musb_start()
1062 static int tusb_musb_init(struct musb *musb) in tusb_musb_init() argument
1070 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); in tusb_musb_init()
1071 if (IS_ERR_OR_NULL(musb->xceiv)) in tusb_musb_init()
1074 pdev = to_platform_device(musb->controller); in tusb_musb_init()
1078 musb->async = mem->start; in tusb_musb_init()
1087 musb->sync = mem->start; in tusb_musb_init()
1095 musb->sync_va = sync; in tusb_musb_init()
1100 musb->mregs += TUSB_BASE_OFFSET; in tusb_musb_init()
1102 ret = tusb_musb_start(musb); in tusb_musb_init()
1108 musb->isr = tusb_musb_interrupt; in tusb_musb_init()
1110 musb->xceiv->set_power = tusb_draw_power; in tusb_musb_init()
1111 the_musb = musb; in tusb_musb_init()
1113 setup_timer(&musb_idle_timer, musb_do_idle, (unsigned long) musb); in tusb_musb_init()
1120 usb_put_phy(musb->xceiv); in tusb_musb_init()
1126 static int tusb_musb_exit(struct musb *musb) in tusb_musb_exit() argument
1131 if (musb->board_set_power) in tusb_musb_exit()
1132 musb->board_set_power(0); in tusb_musb_exit()
1134 iounmap(musb->sync_va); in tusb_musb_exit()
1136 usb_put_phy(musb->xceiv); in tusb_musb_exit()
1160 struct platform_device *musb; in tusb_probe() local
1171 musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO); in tusb_probe()
1172 if (!musb) { in tusb_probe()
1177 musb->dev.parent = &pdev->dev; in tusb_probe()
1178 musb->dev.dma_mask = &tusb_dmamask; in tusb_probe()
1179 musb->dev.coherent_dma_mask = tusb_dmamask; in tusb_probe()
1182 glue->musb = musb; in tusb_probe()
1188 ret = platform_device_add_resources(musb, pdev->resource, in tusb_probe()
1195 ret = platform_device_add_data(musb, pdata, sizeof(*pdata)); in tusb_probe()
1201 ret = platform_device_add(musb); in tusb_probe()
1210 platform_device_put(musb); in tusb_probe()
1223 platform_device_unregister(glue->musb); in tusb_remove()