musb: output an error when wrong speed is selected for the hostmode
[h-e-n] / drivers / usb / musb / musb_virthub.c
index 7e7900f..bd033e5 100644 (file)
@@ -112,7 +112,7 @@ static void musb_port_suspend(struct musb *musb, bool do_suspend)
 
 static void musb_port_reset(struct musb *musb, bool do_reset)
 {
-       u8              power;
+       u8              power, testmode;
        void __iomem    *mbase = musb->mregs;
 
 #ifdef CONFIG_USB_MUSB_OTG
@@ -162,10 +162,16 @@ static void musb_port_reset(struct musb *musb, bool do_reset)
 
                musb->ignore_disconnect = false;
 
+               testmode = musb_readb(mbase, MUSB_TESTMODE);
                power = musb_readb(mbase, MUSB_POWER);
                if (power & MUSB_POWER_HSMODE) {
                        DBG(4, "high-speed device connected\n");
                        musb->port1_status |= USB_PORT_STAT_HIGH_SPEED;
+                       if (!(testmode & MUSB_TEST_FORCE_HS))
+                               pr_err("Forced hostmode error: a high-speed device attached but not high-speed mode selected\n"); 
+               } else {
+                       if (testmode & MUSB_TEST_FORCE_HS)
+                               pr_err("Forced hostmode error: a full/low-speed device attached but high-speed mode selected\n"); 
                }
 
                musb->port1_status &= ~USB_PORT_STAT_RESET;