hcm's fixes usbhost
authorThomas Tanner <maemo@tannerlab.com>
Mon, 7 Jun 2010 22:09:28 +0000 (00:09 +0200)
committerThomas Tanner <maemo@tannerlab.com>
Mon, 7 Jun 2010 22:09:28 +0000 (00:09 +0200)
usbhost/drivers/usb/musb/isp1704.h
usbhost/drivers/usb/musb/musb_core.c
usbhost/drivers/usb/musb/musb_procfs.c

index 7a2220a..e0e4a5c 100644 (file)
 #define ISP1704_PRODUCT_ID_HIGH                0x03
 #define ISP1704_FUNC_CTRL              0x04
 #define ISP1704_OTG_CTRL               0x0a
-#define ISP1704_USB_INTRISE            0x0d
-#define ISP1704_USB_INTFALL            0x10
-#define ISP1704_USB_INTSTAT   0x13
+#define ISP1704_USB_INTRISE            0x0d /* interrupt enable rising register (ds p. 35 ff)*/
+#define ISP1704_USB_INTFALL            0x10 /* interrupt enable falling register */
+#define ISP1704_USB_INTSTAT            0x13 /* interrupt status register */
 #define ISP1704_DEBUG                  0x15
 #define ISP1704_SCRATCH                        0x16
 #define ISP1704_PWR_CTRL               0x3d
 
 /* Function control */
-#define ISP1704_FUNC_CTRL_FULL_SPEED   (1 << 0)
-#define ISP1704_FUNC_CTRL_XCVRSELECT   0x3
-#define ISP1704_FUNC_CTRL_XCVRSELECT_SHIFT     (1 << 0)
-#define ISP1704_FUNC_CTRL_TERMSELECT   (1 << 2)
-#define ISP1704_FUNC_CTRL_OPMODE       (1 << 3)
-#define ISP1704_FUNC_CTRL_OPMODE_SHIFT 3
-#define ISP1704_FUNC_CTRL_RESET                (1 << 5)
-#define ISP1704_FUNC_CTRL_SUSPENDM     (1 << 6)
+#define ISP1704_FUNC_CTRL_XCVRSELECT_SHIFT     0
+#define ISP1704_FUNC_CTRL_XCVRSELECT_MASK      (3 << 0)
+#define ISP1704_FUNC_CTRL_HIGH_SPEED           (0 << 0)
+#define ISP1704_FUNC_CTRL_FULL_SPEED           (1 << 0)
+#define ISP1704_FUNC_CTRL_LOW_SPEED            (2 << 0)
+#define ISP1704_FUNC_CTRL_TERMSELECT           (1 << 2)
+#define ISP1704_FUNC_CTRL_OPMODE               (1 << 3)
+#define ISP1704_FUNC_CTRL_OPMODE_SHIFT         3
+#define ISP1704_FUNC_CTRL_RESET                        (1 << 5)
+#define ISP1704_FUNC_CTRL_SUSPENDM             (1 << 6)
 
 /* OTG Control */
 #define ISP1704_OTG_CTRL_IDPULLUP      (1 << 0)
index 27c7948..07e21e7 100644 (file)
@@ -143,42 +143,35 @@ MODULE_LICENSE("GPL");
 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;
@@ -188,7 +181,6 @@ void musb_force_term(void __iomem *addr, enum musb_term term)
                return;
        }
 
-       r |= ISP1704_OTG_CTRL_IDPULLUP;
        musb_ulpi_writeb(addr, ISP1704_FUNC_CTRL, r);
 
 }
index 6846f31..8e28c4a 100644 (file)
@@ -616,7 +616,6 @@ done:
  * 
  */
 
-extern inline void mbusywait(int ms);
 extern void musb_port_reset(struct musb *musb, bool do_reset);
 extern void musb_port_suspend(struct musb *musb, bool do_suspend);