Lines Matching refs:musb
48 struct musb *musb; in musb_host_finish_resume() local
52 musb = container_of(work, struct musb, finish_resume_work.work); in musb_host_finish_resume()
54 spin_lock_irqsave(&musb->lock, flags); in musb_host_finish_resume()
56 power = musb_readb(musb->mregs, MUSB_POWER); in musb_host_finish_resume()
58 dev_dbg(musb->controller, "root port resume stopped, power %02x\n", in musb_host_finish_resume()
60 musb_writeb(musb->mregs, MUSB_POWER, power); in musb_host_finish_resume()
67 musb->is_active = 1; in musb_host_finish_resume()
68 musb->port1_status &= ~(USB_PORT_STAT_SUSPEND | MUSB_PORT_STAT_RESUME); in musb_host_finish_resume()
69 musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16; in musb_host_finish_resume()
70 usb_hcd_poll_rh_status(musb->hcd); in musb_host_finish_resume()
72 musb->xceiv->otg->state = OTG_STATE_A_HOST; in musb_host_finish_resume()
74 spin_unlock_irqrestore(&musb->lock, flags); in musb_host_finish_resume()
77 void musb_port_suspend(struct musb *musb, bool do_suspend) in musb_port_suspend() argument
79 struct usb_otg *otg = musb->xceiv->otg; in musb_port_suspend()
81 void __iomem *mbase = musb->mregs; in musb_port_suspend()
83 if (!is_host_active(musb)) in musb_port_suspend()
107 dev_dbg(musb->controller, "Root port suspended, power %02x\n", power); in musb_port_suspend()
109 musb->port1_status |= USB_PORT_STAT_SUSPEND; in musb_port_suspend()
110 switch (musb->xceiv->otg->state) { in musb_port_suspend()
112 musb->xceiv->otg->state = OTG_STATE_A_SUSPEND; in musb_port_suspend()
113 musb->is_active = otg->host->b_hnp_enable; in musb_port_suspend()
114 if (musb->is_active) in musb_port_suspend()
115 mod_timer(&musb->otg_timer, jiffies in musb_port_suspend()
118 musb_platform_try_idle(musb, 0); in musb_port_suspend()
121 musb->xceiv->otg->state = OTG_STATE_B_WAIT_ACON; in musb_port_suspend()
122 musb->is_active = otg->host->b_hnp_enable; in musb_port_suspend()
123 musb_platform_try_idle(musb, 0); in musb_port_suspend()
126 dev_dbg(musb->controller, "bogus rh suspend? %s\n", in musb_port_suspend()
127 usb_otg_state_string(musb->xceiv->otg->state)); in musb_port_suspend()
134 dev_dbg(musb->controller, "Root port resuming, power %02x\n", power); in musb_port_suspend()
137 musb->port1_status |= MUSB_PORT_STAT_RESUME; in musb_port_suspend()
138 schedule_delayed_work(&musb->finish_resume_work, in musb_port_suspend()
143 void musb_port_reset(struct musb *musb, bool do_reset) in musb_port_reset() argument
146 void __iomem *mbase = musb->mregs; in musb_port_reset()
148 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE) { in musb_port_reset()
149 dev_dbg(musb->controller, "HNP: Returning from HNP; no hub reset from b_idle\n"); in musb_port_reset()
150 musb->port1_status &= ~USB_PORT_STAT_RESET; in musb_port_reset()
154 if (!is_host_active(musb)) in musb_port_reset()
170 long remain = (unsigned long) musb->rh_timer - jiffies; in musb_port_reset()
172 if (musb->rh_timer > 0 && remain > 0) { in musb_port_reset()
175 &musb->deassert_reset_work, remain); in musb_port_reset()
183 schedule_delayed_work(&musb->deassert_reset_work, in musb_port_reset()
192 musb->port1_status |= USB_PORT_STAT_RESET; in musb_port_reset()
193 musb->port1_status &= ~USB_PORT_STAT_ENABLE; in musb_port_reset()
194 schedule_delayed_work(&musb->deassert_reset_work, in musb_port_reset()
197 dev_dbg(musb->controller, "root port reset stopped\n"); in musb_port_reset()
198 musb_platform_pre_root_reset_end(musb); in musb_port_reset()
201 musb_platform_post_root_reset_end(musb); in musb_port_reset()
205 dev_dbg(musb->controller, "high-speed device connected\n"); in musb_port_reset()
206 musb->port1_status |= USB_PORT_STAT_HIGH_SPEED; in musb_port_reset()
209 musb->port1_status &= ~USB_PORT_STAT_RESET; in musb_port_reset()
210 musb->port1_status |= USB_PORT_STAT_ENABLE in musb_port_reset()
213 usb_hcd_poll_rh_status(musb->hcd); in musb_port_reset()
215 musb->vbuserr_retry = VBUSERR_RETRY_COUNT; in musb_port_reset()
219 void musb_root_disconnect(struct musb *musb) in musb_root_disconnect() argument
221 struct usb_otg *otg = musb->xceiv->otg; in musb_root_disconnect()
223 musb->port1_status = USB_PORT_STAT_POWER in musb_root_disconnect()
226 usb_hcd_poll_rh_status(musb->hcd); in musb_root_disconnect()
227 musb->is_active = 0; in musb_root_disconnect()
229 switch (musb->xceiv->otg->state) { in musb_root_disconnect()
232 musb->xceiv->otg->state = OTG_STATE_A_PERIPHERAL; in musb_root_disconnect()
233 musb->g.is_a_peripheral = 1; in musb_root_disconnect()
238 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON; in musb_root_disconnect()
239 musb->is_active = 0; in musb_root_disconnect()
242 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in musb_root_disconnect()
245 dev_dbg(musb->controller, "host disconnect (%s)\n", in musb_root_disconnect()
246 usb_otg_state_string(musb->xceiv->otg->state)); in musb_root_disconnect()
256 struct musb *musb = hcd_to_musb(hcd); in musb_hub_status_data() local
260 if (musb->port1_status & 0xffff0000) { in musb_hub_status_data()
267 static int musb_has_gadget(struct musb *musb) in musb_has_gadget() argument
278 return musb->port_mode == MUSB_PORT_MODE_HOST; in musb_has_gadget()
290 struct musb *musb = hcd_to_musb(hcd); in musb_hub_control() local
295 spin_lock_irqsave(&musb->lock, flags); in musb_hub_control()
298 spin_unlock_irqrestore(&musb->lock, flags); in musb_hub_control()
325 musb_port_suspend(musb, false); in musb_hub_control()
329 musb_platform_set_vbus(musb, 0); in musb_hub_control()
340 dev_dbg(musb->controller, "clear feature %d\n", wValue); in musb_hub_control()
341 musb->port1_status &= ~(1 << wValue); in musb_hub_control()
370 put_unaligned(cpu_to_le32(musb->port1_status in musb_hub_control()
375 dev_dbg(musb->controller, "port status %08x\n", in musb_hub_control()
376 musb->port1_status); in musb_hub_control()
394 if (!hcd->self.is_b_host && musb_has_gadget(musb)) in musb_hub_control()
395 musb_start(musb); in musb_hub_control()
398 musb_port_reset(musb, true); in musb_hub_control()
401 musb_port_suspend(musb, true); in musb_hub_control()
404 if (unlikely(is_host_active(musb))) in musb_hub_control()
424 musb_load_testpacket(musb); in musb_hub_control()
431 musb_writeb(musb->mregs, MUSB_DEVCTL, in musb_hub_control()
441 musb_writeb(musb->mregs, MUSB_TESTMODE, temp); in musb_hub_control()
446 dev_dbg(musb->controller, "set feature %d\n", wValue); in musb_hub_control()
447 musb->port1_status |= 1 << wValue; in musb_hub_control()
455 spin_unlock_irqrestore(&musb->lock, flags); in musb_hub_control()