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_set_state(musb, 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
54 void __iomem *mbase = musb->mregs; in musb_port_suspend()
56 if (!is_host_active(musb)) in musb_port_suspend()
84 musb_dbg(musb, "Root port suspended, power %02x", power); in musb_port_suspend()
86 musb->port1_status |= USB_PORT_STAT_SUSPEND; in musb_port_suspend()
87 switch (musb_get_state(musb)) { in musb_port_suspend()
89 musb_set_state(musb, OTG_STATE_A_SUSPEND); in musb_port_suspend()
90 musb->is_active = musb->xceiv && in musb_port_suspend()
91 musb->xceiv->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_set_state(musb, OTG_STATE_B_WAIT_ACON); in musb_port_suspend()
100 musb->is_active = musb->xceiv && in musb_port_suspend()
101 musb->xceiv->otg->host->b_hnp_enable; in musb_port_suspend()
102 musb_platform_try_idle(musb, 0); in musb_port_suspend()
105 musb_dbg(musb, "bogus rh suspend? %s", in musb_port_suspend()
106 musb_otg_state_string(musb)); in musb_port_suspend()
113 musb_dbg(musb, "Root port resuming, power %02x", power); in musb_port_suspend()
115 musb->port1_status |= MUSB_PORT_STAT_RESUME; in musb_port_suspend()
116 schedule_delayed_work(&musb->finish_resume_work, in musb_port_suspend()
122 void musb_port_reset(struct musb *musb, bool do_reset) in musb_port_reset() argument
125 void __iomem *mbase = musb->mregs; in musb_port_reset()
127 if (musb_get_state(musb) == OTG_STATE_B_IDLE) { in musb_port_reset()
128 musb_dbg(musb, "HNP: Returning from HNP; no hub reset from b_idle"); in musb_port_reset()
129 musb->port1_status &= ~USB_PORT_STAT_RESET; in musb_port_reset()
133 if (!is_host_active(musb)) in musb_port_reset()
149 long remain = (unsigned long) musb->rh_timer - jiffies; in musb_port_reset()
151 if (musb->rh_timer > 0 && remain > 0) { in musb_port_reset()
154 &musb->deassert_reset_work, remain); in musb_port_reset()
162 schedule_delayed_work(&musb->deassert_reset_work, in musb_port_reset()
171 musb->port1_status |= USB_PORT_STAT_RESET; in musb_port_reset()
172 musb->port1_status &= ~USB_PORT_STAT_ENABLE; in musb_port_reset()
173 schedule_delayed_work(&musb->deassert_reset_work, in musb_port_reset()
176 musb_dbg(musb, "root port reset stopped"); in musb_port_reset()
177 musb_platform_pre_root_reset_end(musb); in musb_port_reset()
180 musb_platform_post_root_reset_end(musb); in musb_port_reset()
184 musb_dbg(musb, "high-speed device connected"); in musb_port_reset()
185 musb->port1_status |= USB_PORT_STAT_HIGH_SPEED; in musb_port_reset()
188 musb->port1_status &= ~USB_PORT_STAT_RESET; in musb_port_reset()
189 musb->port1_status |= USB_PORT_STAT_ENABLE in musb_port_reset()
192 usb_hcd_poll_rh_status(musb->hcd); in musb_port_reset()
194 musb->vbuserr_retry = VBUSERR_RETRY_COUNT; in musb_port_reset()
198 void musb_root_disconnect(struct musb *musb) in musb_root_disconnect() argument
200 musb->port1_status = USB_PORT_STAT_POWER in musb_root_disconnect()
203 usb_hcd_poll_rh_status(musb->hcd); in musb_root_disconnect()
204 musb->is_active = 0; in musb_root_disconnect()
206 switch (musb_get_state(musb)) { in musb_root_disconnect()
208 if (musb->xceiv && musb->xceiv->otg->host->b_hnp_enable) { in musb_root_disconnect()
209 musb_set_state(musb, OTG_STATE_A_PERIPHERAL); in musb_root_disconnect()
210 musb->g.is_a_peripheral = 1; in musb_root_disconnect()
215 musb_set_state(musb, OTG_STATE_A_WAIT_BCON); in musb_root_disconnect()
216 musb->is_active = 0; in musb_root_disconnect()
219 musb_set_state(musb, OTG_STATE_B_IDLE); in musb_root_disconnect()
222 musb_dbg(musb, "host disconnect (%s)", in musb_root_disconnect()
223 musb_otg_state_string(musb)); in musb_root_disconnect()
234 struct musb *musb = hcd_to_musb(hcd); in musb_hub_status_data() local
238 if (musb->port1_status & 0xffff0000) { in musb_hub_status_data()
245 static int musb_has_gadget(struct musb *musb) in musb_has_gadget() argument
256 return musb->port_mode == MUSB_HOST; in musb_has_gadget()
268 struct musb *musb = hcd_to_musb(hcd); in musb_hub_control() local
274 spin_lock_irqsave(&musb->lock, flags); in musb_hub_control()
277 spin_unlock_irqrestore(&musb->lock, flags); in musb_hub_control()
304 musb_port_suspend(musb, false); in musb_hub_control()
308 musb_platform_set_vbus(musb, 0); in musb_hub_control()
319 musb_dbg(musb, "clear feature %d", wValue); in musb_hub_control()
320 musb->port1_status &= ~(1 << wValue); in musb_hub_control()
349 put_unaligned(cpu_to_le32(musb->port1_status in musb_hub_control()
354 musb_dbg(musb, "port status %08x", musb->port1_status); in musb_hub_control()
372 if (!hcd->self.is_b_host && musb_has_gadget(musb)) in musb_hub_control()
376 musb_port_reset(musb, true); in musb_hub_control()
379 musb_port_suspend(musb, true); in musb_hub_control()
382 if (unlikely(is_host_active(musb))) in musb_hub_control()
402 musb_load_testpacket(musb); in musb_hub_control()
409 musb_writeb(musb->mregs, MUSB_DEVCTL, in musb_hub_control()
419 musb_writeb(musb->mregs, MUSB_TESTMODE, temp); in musb_hub_control()
424 musb_dbg(musb, "set feature %d", wValue); in musb_hub_control()
425 musb->port1_status |= 1 << wValue; in musb_hub_control()
433 spin_unlock_irqrestore(&musb->lock, flags); in musb_hub_control()
436 musb_start(musb); in musb_hub_control()