|
@@ -1028,18 +1028,22 @@ void musb_start(struct musb *musb)
|
|
|
{
|
|
|
void __iomem *regs = musb->mregs;
|
|
|
u8 devctl = musb_readb(regs, MUSB_DEVCTL);
|
|
|
+ u8 power;
|
|
|
|
|
|
dev_dbg(musb->controller, "<== devctl %02x\n", devctl);
|
|
|
|
|
|
musb_enable_interrupts(musb);
|
|
|
musb_writeb(regs, MUSB_TESTMODE, 0);
|
|
|
|
|
|
- /* put into basic highspeed mode and start session */
|
|
|
- musb_writeb(regs, MUSB_POWER, MUSB_POWER_ISOUPDATE
|
|
|
- | MUSB_POWER_HSENAB
|
|
|
- /* ENSUSPEND wedges tusb */
|
|
|
- /* | MUSB_POWER_ENSUSPEND */
|
|
|
- );
|
|
|
+ power = MUSB_POWER_ISOUPDATE;
|
|
|
+ /*
|
|
|
+ * treating UNKNOWN as unspecified maximum speed, in which case
|
|
|
+ * we will default to high-speed.
|
|
|
+ */
|
|
|
+ if (musb->config->maximum_speed == USB_SPEED_HIGH ||
|
|
|
+ musb->config->maximum_speed == USB_SPEED_UNKNOWN)
|
|
|
+ power |= MUSB_POWER_HSENAB;
|
|
|
+ musb_writeb(regs, MUSB_POWER, power);
|
|
|
|
|
|
musb->is_active = 0;
|
|
|
devctl = musb_readb(regs, MUSB_DEVCTL);
|