MODULE_ALIAS("platform:" MUSB_DRIVER_NAME);
-
-inline void mbusywait(int ms)
-{
- unsigned long end_time = jiffies + msecs_to_jiffies(ms);
- while(time_before(jiffies,end_time))
- cpu_relax();
-
-}
-
void musb_force_term(void __iomem *addr, enum musb_term term)
{
u8 r;
-
+ /* activate pulldown resistors on datalines */
r = musb_ulpi_readb(addr, ISP1704_OTG_CTRL);
r |= ISP1704_OTG_CTRL_DP_PULLDOWN | ISP1704_OTG_CTRL_DM_PULLDOWN;
musb_ulpi_writeb(addr, ISP1704_OTG_CTRL, r);
r = musb_ulpi_readb(addr, ISP1704_FUNC_CTRL);
-
+ /* clear speed-selection bits */
+ r &= ~ISP1704_FUNC_CTRL_XCVRSELECT_MASK;
+ /* set new speed-selection bits */
switch(term) {
case MUSB_TERM_HOST_HIGHSPEED:
- r &= ~ISP1704_FUNC_CTRL_XCVRSELECT;
+ r |= ISP1704_FUNC_CTRL_HIGH_SPEED;
r &= ~ISP1704_FUNC_CTRL_TERMSELECT;
r &= ~ISP1704_FUNC_CTRL_OPMODE;
break;
case MUSB_TERM_HOST_FULLSPEED:
- r |= 1 << ISP1704_FUNC_CTRL_XCVRSELECT_SHIFT;
+ r |= ISP1704_FUNC_CTRL_FULL_SPEED;
r |= ISP1704_FUNC_CTRL_TERMSELECT;
r &= ~ISP1704_FUNC_CTRL_OPMODE;
break;
case MUSB_TERM_HOST_LOWSPEED:
- r |= 2 << ISP1704_FUNC_CTRL_XCVRSELECT_SHIFT;
+ r |= ISP1704_FUNC_CTRL_LOW_SPEED;
r |= ISP1704_FUNC_CTRL_TERMSELECT;
r &= ~ISP1704_FUNC_CTRL_OPMODE;
break;
return;
}
- r |= ISP1704_OTG_CTRL_IDPULLUP;
musb_ulpi_writeb(addr, ISP1704_FUNC_CTRL, r);
}