Lines Matching refs:musb

31 	struct platform_device	*musb;  member
35 static void tusb_musb_set_vbus(struct musb *musb, int is_on);
44 static u8 tusb_get_revision(struct musb *musb) in tusb_get_revision() argument
46 void __iomem *tbase = musb->ctrl_base; in tusb_get_revision()
61 static void tusb_print_revision(struct musb *musb) in tusb_print_revision() argument
63 void __iomem *tbase = musb->ctrl_base; in tusb_print_revision()
66 rev = musb->tusb_revision; in tusb_print_revision()
94 static void tusb_wbus_quirk(struct musb *musb, int enabled) in tusb_wbus_quirk() argument
96 void __iomem *tbase = musb->ctrl_base; in tusb_wbus_quirk()
109 dev_dbg(musb->controller, "Enabled tusb wbus quirk ctrl %08x ena %08x\n", in tusb_wbus_quirk()
118 dev_dbg(musb->controller, "Disabled tusb wbus quirk ctrl %08x ena %08x\n", in tusb_wbus_quirk()
221 struct musb *musb = hw_ep->musb; in tusb_write_fifo() local
228 dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n", in tusb_write_fifo()
271 struct musb *musb = hw_ep->musb; in tusb_read_fifo() local
276 dev_dbg(musb->controller, "%cX ep%d fifo %p count %d buf %p\n", in tusb_read_fifo()
316 static struct musb *the_musb;
326 struct musb *musb = the_musb; in tusb_draw_power() local
327 void __iomem *tbase = musb->ctrl_base; in tusb_draw_power()
340 if (x->otg->default_a || mA < (musb->min_power << 1)) in tusb_draw_power()
345 musb->is_bus_powered = 1; in tusb_draw_power()
348 musb->is_bus_powered = 0; in tusb_draw_power()
353 dev_dbg(musb->controller, "draw max %d mA VBUS\n", mA); in tusb_draw_power()
361 static void tusb_set_clock_source(struct musb *musb, unsigned mode) in tusb_set_clock_source() argument
363 void __iomem *tbase = musb->ctrl_base; in tusb_set_clock_source()
388 static void tusb_allow_idle(struct musb *musb, u32 wakeup_enables) in tusb_allow_idle() argument
390 void __iomem *tbase = musb->ctrl_base; in tusb_allow_idle()
394 && (musb->tusb_revision == TUSB_REV_30)) in tusb_allow_idle()
395 tusb_wbus_quirk(musb, 1); in tusb_allow_idle()
397 tusb_set_clock_source(musb, 0); in tusb_allow_idle()
409 if (is_host_active(musb)) { in tusb_allow_idle()
419 dev_dbg(musb->controller, "idle, wake on %02x\n", wakeup_enables); in tusb_allow_idle()
425 static int tusb_musb_vbus_status(struct musb *musb) in tusb_musb_vbus_status() argument
427 void __iomem *tbase = musb->ctrl_base; in tusb_musb_vbus_status()
454 struct musb *musb = from_timer(musb, t, dev_timer); in musb_do_idle() local
457 spin_lock_irqsave(&musb->lock, flags); in musb_do_idle()
459 switch (musb->xceiv->otg->state) { in musb_do_idle()
461 if ((musb->a_wait_bcon != 0) in musb_do_idle()
462 && (musb->idle_timeout == 0 in musb_do_idle()
463 || time_after(jiffies, musb->idle_timeout))) { in musb_do_idle()
464 dev_dbg(musb->controller, "Nothing connected %s, turning off VBUS\n", in musb_do_idle()
465 usb_otg_state_string(musb->xceiv->otg->state)); in musb_do_idle()
469 tusb_musb_set_vbus(musb, 0); in musb_do_idle()
474 if (!musb->is_active) { in musb_do_idle()
478 if (is_host_active(musb) && (musb->port1_status >> 16)) in musb_do_idle()
481 if (!musb->gadget_driver) { in musb_do_idle()
489 tusb_allow_idle(musb, wakeups); in musb_do_idle()
492 spin_unlock_irqrestore(&musb->lock, flags); in musb_do_idle()
508 static void tusb_musb_try_idle(struct musb *musb, unsigned long timeout) in tusb_musb_try_idle() argument
517 if (musb->is_active || ((musb->a_wait_bcon == 0) in tusb_musb_try_idle()
518 && (musb->xceiv->otg->state == OTG_STATE_A_WAIT_BCON))) { in tusb_musb_try_idle()
519 dev_dbg(musb->controller, "%s active, deleting timer\n", in tusb_musb_try_idle()
520 usb_otg_state_string(musb->xceiv->otg->state)); in tusb_musb_try_idle()
521 del_timer(&musb->dev_timer); in tusb_musb_try_idle()
527 if (!timer_pending(&musb->dev_timer)) in tusb_musb_try_idle()
530 dev_dbg(musb->controller, "Longer idle timer already pending, ignoring\n"); in tusb_musb_try_idle()
536 dev_dbg(musb->controller, "%s inactive, for idle timer for %lu ms\n", in tusb_musb_try_idle()
537 usb_otg_state_string(musb->xceiv->otg->state), in tusb_musb_try_idle()
539 mod_timer(&musb->dev_timer, timeout); in tusb_musb_try_idle()
549 static void tusb_musb_set_vbus(struct musb *musb, int is_on) in tusb_musb_set_vbus() argument
551 void __iomem *tbase = musb->ctrl_base; in tusb_musb_set_vbus()
554 struct usb_otg *otg = musb->xceiv->otg; in tusb_musb_set_vbus()
563 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in tusb_musb_set_vbus()
568 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; in tusb_musb_set_vbus()
572 MUSB_HST_MODE(musb); in tusb_musb_set_vbus()
581 switch (musb->xceiv->otg->state) { in tusb_musb_set_vbus()
584 musb->xceiv->otg->state = OTG_STATE_A_WAIT_VFALL; in tusb_musb_set_vbus()
587 musb->xceiv->otg->state = OTG_STATE_A_IDLE; in tusb_musb_set_vbus()
590 musb->xceiv->otg->state = OTG_STATE_A_IDLE; in tusb_musb_set_vbus()
592 musb->is_active = 0; in tusb_musb_set_vbus()
594 MUSB_HST_MODE(musb); in tusb_musb_set_vbus()
596 musb->is_active = 0; in tusb_musb_set_vbus()
598 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in tusb_musb_set_vbus()
599 MUSB_DEV_MODE(musb); in tusb_musb_set_vbus()
610 musb_writeb(musb->mregs, MUSB_DEVCTL, devctl); in tusb_musb_set_vbus()
612 dev_dbg(musb->controller, "VBUS %s, devctl %02x otg %3x conf %08x prcm %08x\n", in tusb_musb_set_vbus()
613 usb_otg_state_string(musb->xceiv->otg->state), in tusb_musb_set_vbus()
614 musb_readb(musb->mregs, MUSB_DEVCTL), in tusb_musb_set_vbus()
626 static int tusb_musb_set_mode(struct musb *musb, u8 musb_mode) in tusb_musb_set_mode() argument
628 void __iomem *tbase = musb->ctrl_base; in tusb_musb_set_mode()
656 dev_dbg(musb->controller, "Trying to set mode %i\n", musb_mode); in tusb_musb_set_mode()
676 tusb_otg_ints(struct musb *musb, u32 int_src, void __iomem *tbase) in tusb_otg_ints() argument
680 struct usb_otg *otg = musb->xceiv->otg; in tusb_otg_ints()
687 dev_dbg(musb->controller, "Default-%c\n", default_a ? 'A' : 'B'); in tusb_otg_ints()
689 tusb_musb_set_vbus(musb, default_a); in tusb_otg_ints()
702 musb->port1_status &= in tusb_otg_ints()
711 dev_dbg(musb->controller, "Forcing disconnect (no interrupt)\n"); in tusb_otg_ints()
712 if (musb->xceiv->otg->state != OTG_STATE_B_IDLE) { in tusb_otg_ints()
714 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in tusb_otg_ints()
715 musb->int_usb |= MUSB_INTR_DISCONNECT; in tusb_otg_ints()
717 musb->is_active = 0; in tusb_otg_ints()
719 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n", in tusb_otg_ints()
720 usb_otg_state_string(musb->xceiv->otg->state), otg_stat); in tusb_otg_ints()
722 schedule_delayed_work(&musb->irq_work, 0); in tusb_otg_ints()
725 dev_dbg(musb->controller, "vbus change, %s, otg %03x\n", in tusb_otg_ints()
726 usb_otg_state_string(musb->xceiv->otg->state), otg_stat); in tusb_otg_ints()
728 switch (musb->xceiv->otg->state) { in tusb_otg_ints()
730 dev_dbg(musb->controller, "Got SRP, turning on VBUS\n"); in tusb_otg_ints()
731 musb_platform_set_vbus(musb, 1); in tusb_otg_ints()
734 if (musb->a_wait_bcon != 0) in tusb_otg_ints()
735 musb->is_active = 0; in tusb_otg_ints()
737 musb->is_active = 1; in tusb_otg_ints()
755 if (musb->vbuserr_retry) { in tusb_otg_ints()
756 musb->vbuserr_retry--; in tusb_otg_ints()
757 tusb_musb_set_vbus(musb, 1); in tusb_otg_ints()
759 musb->vbuserr_retry in tusb_otg_ints()
761 tusb_musb_set_vbus(musb, 0); in tusb_otg_ints()
774 dev_dbg(musb->controller, "%s timer, %03x\n", in tusb_otg_ints()
775 usb_otg_state_string(musb->xceiv->otg->state), otg_stat); in tusb_otg_ints()
777 switch (musb->xceiv->otg->state) { in tusb_otg_ints()
782 devctl = musb_readb(musb->mregs, MUSB_DEVCTL); in tusb_otg_ints()
786 dev_dbg(musb->controller, "devctl %02x\n", devctl); in tusb_otg_ints()
789 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON; in tusb_otg_ints()
790 musb->is_active = 0; in tusb_otg_ints()
792 + msecs_to_jiffies(musb->a_wait_bcon); in tusb_otg_ints()
796 tusb_musb_set_vbus(musb, 0); in tusb_otg_ints()
800 if (musb->a_wait_bcon != 0) in tusb_otg_ints()
802 + msecs_to_jiffies(musb->a_wait_bcon); in tusb_otg_ints()
812 schedule_delayed_work(&musb->irq_work, 0); in tusb_otg_ints()
819 struct musb *musb = __hci; in tusb_musb_interrupt() local
820 void __iomem *tbase = musb->ctrl_base; in tusb_musb_interrupt()
824 spin_lock_irqsave(&musb->lock, flags); in tusb_musb_interrupt()
831 dev_dbg(musb->controller, "TUSB IRQ %08x\n", int_src); in tusb_musb_interrupt()
833 musb->int_usb = (u8) int_src; in tusb_musb_interrupt()
840 if (musb->tusb_revision == TUSB_REV_30) in tusb_musb_interrupt()
841 tusb_wbus_quirk(musb, 0); in tusb_musb_interrupt()
852 dev_dbg(musb->controller, "TUSB NOR not ready\n"); in tusb_musb_interrupt()
856 tusb_set_clock_source(musb, 1); in tusb_musb_interrupt()
861 musb->is_active = 1; in tusb_musb_interrupt()
862 schedule_delayed_work(&musb->irq_work, 0); in tusb_musb_interrupt()
864 dev_dbg(musb->controller, "wake %sactive %02x\n", in tusb_musb_interrupt()
865 musb->is_active ? "" : "in", reg); in tusb_musb_interrupt()
871 del_timer(&musb->dev_timer); in tusb_musb_interrupt()
877 idle_timeout = tusb_otg_ints(musb, int_src, tbase); in tusb_musb_interrupt()
886 dev_dbg(musb->controller, "DMA IRQ %08x\n", dma_src); in tusb_musb_interrupt()
895 musb->int_rx = (((musb_src >> 16) & 0xffff) << 1); in tusb_musb_interrupt()
896 musb->int_tx = (musb_src & 0xffff); in tusb_musb_interrupt()
898 musb->int_rx = 0; in tusb_musb_interrupt()
899 musb->int_tx = 0; in tusb_musb_interrupt()
903 musb_interrupt(musb); in tusb_musb_interrupt()
909 tusb_musb_try_idle(musb, idle_timeout); in tusb_musb_interrupt()
912 spin_unlock_irqrestore(&musb->lock, flags); in tusb_musb_interrupt()
924 static void tusb_musb_enable(struct musb *musb) in tusb_musb_enable() argument
926 void __iomem *tbase = musb->ctrl_base; in tusb_musb_enable()
950 irq_set_irq_type(musb->nIrq, IRQ_TYPE_LEVEL_LOW); in tusb_musb_enable()
968 static void tusb_musb_disable(struct musb *musb) in tusb_musb_disable() argument
970 void __iomem *tbase = musb->ctrl_base; in tusb_musb_disable()
980 del_timer(&musb->dev_timer); in tusb_musb_disable()
993 static void tusb_setup_cpu_interface(struct musb *musb) in tusb_setup_cpu_interface() argument
995 void __iomem *tbase = musb->ctrl_base; in tusb_setup_cpu_interface()
1020 static int tusb_musb_start(struct musb *musb) in tusb_musb_start() argument
1022 void __iomem *tbase = musb->ctrl_base; in tusb_musb_start()
1027 if (musb->board_set_power) in tusb_musb_start()
1028 ret = musb->board_set_power(1); in tusb_musb_start()
1034 spin_lock_irqsave(&musb->lock, flags); in tusb_musb_start()
1042 musb->tusb_revision = tusb_get_revision(musb); in tusb_musb_start()
1043 tusb_print_revision(musb); in tusb_musb_start()
1044 if (musb->tusb_revision < 2) { in tusb_musb_start()
1046 musb->tusb_revision); in tusb_musb_start()
1055 tusb_set_clock_source(musb, 1); in tusb_musb_start()
1066 tusb_setup_cpu_interface(musb); in tusb_musb_start()
1077 spin_unlock_irqrestore(&musb->lock, flags); in tusb_musb_start()
1082 spin_unlock_irqrestore(&musb->lock, flags); in tusb_musb_start()
1084 if (musb->board_set_power) in tusb_musb_start()
1085 musb->board_set_power(0); in tusb_musb_start()
1090 static int tusb_musb_init(struct musb *musb) in tusb_musb_init() argument
1097 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2); in tusb_musb_init()
1098 if (IS_ERR_OR_NULL(musb->xceiv)) in tusb_musb_init()
1101 pdev = to_platform_device(musb->controller); in tusb_musb_init()
1105 musb->async = mem->start; in tusb_musb_init()
1114 musb->sync = mem->start; in tusb_musb_init()
1122 musb->sync_va = sync; in tusb_musb_init()
1127 musb->mregs += TUSB_BASE_OFFSET; in tusb_musb_init()
1129 ret = tusb_musb_start(musb); in tusb_musb_init()
1135 musb->isr = tusb_musb_interrupt; in tusb_musb_init()
1137 musb->xceiv->set_power = tusb_draw_power; in tusb_musb_init()
1138 the_musb = musb; in tusb_musb_init()
1140 timer_setup(&musb->dev_timer, musb_do_idle, 0); in tusb_musb_init()
1147 usb_put_phy(musb->xceiv); in tusb_musb_init()
1152 static int tusb_musb_exit(struct musb *musb) in tusb_musb_exit() argument
1154 del_timer_sync(&musb->dev_timer); in tusb_musb_exit()
1157 if (musb->board_set_power) in tusb_musb_exit()
1158 musb->board_set_power(0); in tusb_musb_exit()
1160 iounmap(musb->sync_va); in tusb_musb_exit()
1162 usb_put_phy(musb->xceiv); in tusb_musb_exit()
1203 struct platform_device *musb; in tusb_probe() local
1244 glue->musb = musb = platform_device_register_full(&pinfo); in tusb_probe()
1245 if (IS_ERR(musb)) { in tusb_probe()
1246 ret = PTR_ERR(musb); in tusb_probe()
1258 platform_device_unregister(glue->musb); in tusb_remove()