Lines Matching refs:musb
23 struct musb *musb; in musb_host_finish_resume() local
27 musb = container_of(work, struct musb, finish_resume_work.work); in musb_host_finish_resume()
29 spin_lock_irqsave(&musb->lock, flags); in musb_host_finish_resume()
31 power = musb_readb(musb->mregs, MUSB_POWER); in musb_host_finish_resume()
33 musb_dbg(musb, "root port resume stopped, power %02x", power); in musb_host_finish_resume()
34 musb_writeb(musb->mregs, MUSB_POWER, power); in musb_host_finish_resume()
41 musb->is_active = 1; in musb_host_finish_resume()
42 musb->port1_status &= ~(USB_PORT_STAT_SUSPEND | MUSB_PORT_STAT_RESUME); in musb_host_finish_resume()
43 musb->port1_status |= USB_PORT_STAT_C_SUSPEND << 16; in musb_host_finish_resume()
44 usb_hcd_poll_rh_status(musb->hcd); in musb_host_finish_resume()
46 musb->xceiv->otg->state = OTG_STATE_A_HOST; in musb_host_finish_resume()
48 spin_unlock_irqrestore(&musb->lock, flags); in musb_host_finish_resume()
51 int musb_port_suspend(struct musb *musb, bool do_suspend) in musb_port_suspend() argument
53 struct usb_otg *otg = musb->xceiv->otg; in musb_port_suspend()
55 void __iomem *mbase = musb->mregs; in musb_port_suspend()
57 if (!is_host_active(musb)) in musb_port_suspend()
85 musb_dbg(musb, "Root port suspended, power %02x", power); in musb_port_suspend()
87 musb->port1_status |= USB_PORT_STAT_SUSPEND; in musb_port_suspend()
88 switch (musb->xceiv->otg->state) { in musb_port_suspend()
90 musb->xceiv->otg->state = OTG_STATE_A_SUSPEND; in musb_port_suspend()
91 musb->is_active = otg->host->b_hnp_enable; in musb_port_suspend()
92 if (musb->is_active) in musb_port_suspend()
93 mod_timer(&musb->otg_timer, jiffies in musb_port_suspend()
96 musb_platform_try_idle(musb, 0); in musb_port_suspend()
99 musb->xceiv->otg->state = OTG_STATE_B_WAIT_ACON; in musb_port_suspend()
100 musb->is_active = otg->host->b_hnp_enable; in musb_port_suspend()
101 musb_platform_try_idle(musb, 0); in musb_port_suspend()
104 musb_dbg(musb, "bogus rh suspend? %s", in musb_port_suspend()
105 usb_otg_state_string(musb->xceiv->otg->state)); in musb_port_suspend()
112 musb_dbg(musb, "Root port resuming, power %02x", power); in musb_port_suspend()
114 musb->port1_status |= MUSB_PORT_STAT_RESUME; in musb_port_suspend()
115 schedule_delayed_work(&musb->finish_resume_work, in musb_port_suspend()
121 void musb_port_reset(struct musb *musb, bool do_reset) in musb_port_reset() argument
124 void __iomem *mbase = musb->mregs; in musb_port_reset()
126 if (musb->xceiv->otg->state == OTG_STATE_B_IDLE) { in musb_port_reset()
127 musb_dbg(musb, "HNP: Returning from HNP; no hub reset from b_idle"); in musb_port_reset()
128 musb->port1_status &= ~USB_PORT_STAT_RESET; in musb_port_reset()
132 if (!is_host_active(musb)) in musb_port_reset()
148 long remain = (unsigned long) musb->rh_timer - jiffies; in musb_port_reset()
150 if (musb->rh_timer > 0 && remain > 0) { in musb_port_reset()
153 &musb->deassert_reset_work, remain); in musb_port_reset()
161 schedule_delayed_work(&musb->deassert_reset_work, in musb_port_reset()
170 musb->port1_status |= USB_PORT_STAT_RESET; in musb_port_reset()
171 musb->port1_status &= ~USB_PORT_STAT_ENABLE; in musb_port_reset()
172 schedule_delayed_work(&musb->deassert_reset_work, in musb_port_reset()
175 musb_dbg(musb, "root port reset stopped"); in musb_port_reset()
176 musb_platform_pre_root_reset_end(musb); in musb_port_reset()
179 musb_platform_post_root_reset_end(musb); in musb_port_reset()
183 musb_dbg(musb, "high-speed device connected"); in musb_port_reset()
184 musb->port1_status |= USB_PORT_STAT_HIGH_SPEED; in musb_port_reset()
187 musb->port1_status &= ~USB_PORT_STAT_RESET; in musb_port_reset()
188 musb->port1_status |= USB_PORT_STAT_ENABLE in musb_port_reset()
191 usb_hcd_poll_rh_status(musb->hcd); in musb_port_reset()
193 musb->vbuserr_retry = VBUSERR_RETRY_COUNT; in musb_port_reset()
197 void musb_root_disconnect(struct musb *musb) in musb_root_disconnect() argument
199 struct usb_otg *otg = musb->xceiv->otg; in musb_root_disconnect()
201 musb->port1_status = USB_PORT_STAT_POWER in musb_root_disconnect()
204 usb_hcd_poll_rh_status(musb->hcd); in musb_root_disconnect()
205 musb->is_active = 0; in musb_root_disconnect()
207 switch (musb->xceiv->otg->state) { in musb_root_disconnect()
210 musb->xceiv->otg->state = OTG_STATE_A_PERIPHERAL; in musb_root_disconnect()
211 musb->g.is_a_peripheral = 1; in musb_root_disconnect()
216 musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON; in musb_root_disconnect()
217 musb->is_active = 0; in musb_root_disconnect()
220 musb->xceiv->otg->state = OTG_STATE_B_IDLE; in musb_root_disconnect()
223 musb_dbg(musb, "host disconnect (%s)", in musb_root_disconnect()
224 usb_otg_state_string(musb->xceiv->otg->state)); in musb_root_disconnect()
235 struct musb *musb = hcd_to_musb(hcd); in musb_hub_status_data() local
239 if (musb->port1_status & 0xffff0000) { in musb_hub_status_data()
246 static int musb_has_gadget(struct musb *musb) in musb_has_gadget() argument
257 return musb->port_mode == MUSB_HOST; in musb_has_gadget()
269 struct musb *musb = hcd_to_musb(hcd); in musb_hub_control() local
275 spin_lock_irqsave(&musb->lock, flags); in musb_hub_control()
278 spin_unlock_irqrestore(&musb->lock, flags); in musb_hub_control()
305 musb_port_suspend(musb, false); in musb_hub_control()
309 musb_platform_set_vbus(musb, 0); in musb_hub_control()
320 musb_dbg(musb, "clear feature %d", wValue); in musb_hub_control()
321 musb->port1_status &= ~(1 << wValue); in musb_hub_control()
350 put_unaligned(cpu_to_le32(musb->port1_status in musb_hub_control()
355 musb_dbg(musb, "port status %08x", musb->port1_status); in musb_hub_control()
373 if (!hcd->self.is_b_host && musb_has_gadget(musb)) in musb_hub_control()
377 musb_port_reset(musb, true); in musb_hub_control()
380 musb_port_suspend(musb, true); in musb_hub_control()
383 if (unlikely(is_host_active(musb))) in musb_hub_control()
403 musb_load_testpacket(musb); in musb_hub_control()
410 musb_writeb(musb->mregs, MUSB_DEVCTL, in musb_hub_control()
420 musb_writeb(musb->mregs, MUSB_TESTMODE, temp); in musb_hub_control()
425 musb_dbg(musb, "set feature %d", wValue); in musb_hub_control()
426 musb->port1_status |= 1 << wValue; in musb_hub_control()
434 spin_unlock_irqrestore(&musb->lock, flags); in musb_hub_control()
437 musb_start(musb); in musb_hub_control()