Lines Matching refs:musb

79 static struct musb *sunxi_musb;
83 struct platform_device *musb; member
105 struct musb *musb = platform_get_drvdata(glue->musb); in sunxi_musb_work() local
109 spin_lock_irqsave(&musb->lock, flags); in sunxi_musb_work()
111 devctl = readb(musb->mregs + SUNXI_MUSB_DEVCTL); in sunxi_musb_work()
114 musb->xceiv->otg->default_a = 1; in sunxi_musb_work()
115 musb->xceiv->otg->state = OTG_STATE_A_IDLE; in sunxi_musb_work()
116 MUSB_HST_MODE(musb); in sunxi_musb_work()
120 musb->xceiv->otg->default_a = 0; in sunxi_musb_work()
121 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in sunxi_musb_work()
122 MUSB_DEV_MODE(musb); in sunxi_musb_work()
125 writeb(devctl, musb->mregs + SUNXI_MUSB_DEVCTL); in sunxi_musb_work()
127 spin_unlock_irqrestore(&musb->lock, flags); in sunxi_musb_work()
144 static void sunxi_musb_set_vbus(struct musb *musb, int is_on) in sunxi_musb_set_vbus() argument
146 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_set_vbus()
156 static void sunxi_musb_pre_root_reset_end(struct musb *musb) in sunxi_musb_pre_root_reset_end() argument
158 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_pre_root_reset_end()
163 static void sunxi_musb_post_root_reset_end(struct musb *musb) in sunxi_musb_post_root_reset_end() argument
165 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_post_root_reset_end()
172 struct musb *musb = __hci; in sunxi_musb_interrupt() local
175 spin_lock_irqsave(&musb->lock, flags); in sunxi_musb_interrupt()
177 musb->int_usb = readb(musb->mregs + SUNXI_MUSB_INTRUSB); in sunxi_musb_interrupt()
178 if (musb->int_usb) in sunxi_musb_interrupt()
179 writeb(musb->int_usb, musb->mregs + SUNXI_MUSB_INTRUSB); in sunxi_musb_interrupt()
186 if ((musb->int_usb & MUSB_INTR_BABBLE) && is_host_active(musb)) { in sunxi_musb_interrupt()
187 musb->int_usb &= ~MUSB_INTR_BABBLE; in sunxi_musb_interrupt()
188 musb->int_usb |= MUSB_INTR_DISCONNECT; in sunxi_musb_interrupt()
191 if ((musb->int_usb & MUSB_INTR_RESET) && !is_host_active(musb)) { in sunxi_musb_interrupt()
193 musb_ep_select(musb->mregs, 0); in sunxi_musb_interrupt()
194 musb_writeb(musb->mregs, MUSB_FADDR, 0); in sunxi_musb_interrupt()
197 musb->int_tx = readw(musb->mregs + SUNXI_MUSB_INTRTX); in sunxi_musb_interrupt()
198 if (musb->int_tx) in sunxi_musb_interrupt()
199 writew(musb->int_tx, musb->mregs + SUNXI_MUSB_INTRTX); in sunxi_musb_interrupt()
201 musb->int_rx = readw(musb->mregs + SUNXI_MUSB_INTRRX); in sunxi_musb_interrupt()
202 if (musb->int_rx) in sunxi_musb_interrupt()
203 writew(musb->int_rx, musb->mregs + SUNXI_MUSB_INTRRX); in sunxi_musb_interrupt()
205 musb_interrupt(musb); in sunxi_musb_interrupt()
207 spin_unlock_irqrestore(&musb->lock, flags); in sunxi_musb_interrupt()
228 static int sunxi_musb_init(struct musb *musb) in sunxi_musb_init() argument
230 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_init()
233 sunxi_musb = musb; in sunxi_musb_init()
234 musb->phy = glue->phy; in sunxi_musb_init()
235 musb->xceiv = glue->xceiv; in sunxi_musb_init()
238 ret = sunxi_sram_claim(musb->controller->parent); in sunxi_musb_init()
253 writeb(SUNXI_MUSB_VEND0_PIO_MODE, musb->mregs + SUNXI_MUSB_VEND0); in sunxi_musb_init()
256 if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) { in sunxi_musb_init()
267 if (musb->port_mode == MUSB_PORT_MODE_HOST) { in sunxi_musb_init()
276 musb->isr = sunxi_musb_interrupt; in sunxi_musb_init()
279 pm_runtime_get(musb->controller); in sunxi_musb_init()
286 if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) in sunxi_musb_init()
296 sunxi_sram_release(musb->controller->parent); in sunxi_musb_init()
300 static int sunxi_musb_exit(struct musb *musb) in sunxi_musb_exit() argument
302 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_exit()
304 pm_runtime_put(musb->controller); in sunxi_musb_exit()
312 if (musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) in sunxi_musb_exit()
321 sunxi_sram_release(musb->controller->parent); in sunxi_musb_exit()
326 static void sunxi_musb_enable(struct musb *musb) in sunxi_musb_enable() argument
328 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_enable()
337 static void sunxi_musb_disable(struct musb *musb) in sunxi_musb_disable() argument
339 struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent); in sunxi_musb_disable()
344 struct dma_controller *sunxi_musb_dma_controller_create(struct musb *musb, in sunxi_musb_dma_controller_create() argument
724 glue->musb = platform_device_register_full(&pinfo); in sunxi_musb_probe()
725 if (IS_ERR(glue->musb)) { in sunxi_musb_probe()
726 ret = PTR_ERR(glue->musb); in sunxi_musb_probe()
743 platform_device_unregister(glue->musb); /* Frees glue ! */ in sunxi_musb_remove()