usb: renesas_usbhs: add support for SUDMAC
authorShimoda, Yoshihiro <yoshihiro.shimoda.uh@renesas.com>
Thu, 5 Jan 2012 06:37:22 +0000 (15:37 +0900)
committerFelipe Balbi <balbi@ti.com>
Tue, 24 Jan 2012 09:33:04 +0000 (11:33 +0200)
The SUDMAC uses 8-bit width only. So, when the driver uses SUDMAC,
we have to clear the MBW_32.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/renesas_usbhs/fifo.c
include/linux/usb/renesas_usbhs.h

index 72339bd6fcab862565ee222aa4ead450f1d2945d..03a9cc529c820b3f6ec26c8ef1187c0fa1bbd70d 100644 (file)
@@ -23,6 +23,7 @@
 #define usbhsf_get_cfifo(p)    (&((p)->fifo_info.cfifo))
 #define usbhsf_get_d0fifo(p)   (&((p)->fifo_info.d0fifo))
 #define usbhsf_get_d1fifo(p)   (&((p)->fifo_info.d1fifo))
+#define usbhsf_is_cfifo(p, f)  (usbhsf_get_cfifo(p) == f)
 
 #define usbhsf_fifo_is_busy(f) ((f)->pipe) /* see usbhs_pipe_select_fifo */
 
@@ -305,7 +306,10 @@ static int usbhsf_fifo_select(struct usbhs_pipe *pipe,
        }
 
        /* "base" will be used below  */
-       usbhs_write(priv, fifo->sel, base | MBW_32);
+       if (usbhs_get_dparam(priv, has_sudmac) && !usbhsf_is_cfifo(priv, fifo))
+               usbhs_write(priv, fifo->sel, base);
+       else
+               usbhs_write(priv, fifo->sel, base | MBW_32);
 
        /* check ISEL and CURPIPE value */
        while (timeout--) {
index 0d3f98879256c107ec3702b5b2da117636c6821b..547e59cc00eadfb4a9992f5238fc2b42e7646314 100644 (file)
@@ -149,6 +149,7 @@ struct renesas_usbhs_driver_param {
         * option:
         */
        u32 has_otg:1; /* for controlling PWEN/EXTLP */
+       u32 has_sudmac:1; /* for SUDMAC */
 };
 
 /*