{
        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);