usb: musb: same MUSB_OFFSET/musb_ep_select for all controller
authorRavi B <ravibabu@ti.com>
Tue, 14 Jun 2011 08:53:22 +0000 (14:23 +0530)
committerVaibhav Hiremath <hvaibhav@ti.com>
Mon, 23 Jan 2012 19:14:04 +0000 (00:44 +0530)
The patch uses the information about hw endpoint register address
mapping from hw glue driver to implement MUSB_OFFSET/musb_ep_select
for different cases.

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
drivers/usb/musb/am35x.c
drivers/usb/musb/blackfin.c
drivers/usb/musb/da8xx.c
drivers/usb/musb/davinci.c
drivers/usb/musb/musb_core.h
drivers/usb/musb/musb_regs.h
drivers/usb/musb/omap2430.c
drivers/usb/musb/tusb6010.c

index 244ca85524f2894b72d29c2a1b95938462f64c3c..624ff82cf259565a2acf31163777162297968e8e 100644 (file)
@@ -443,6 +443,7 @@ static void am35x_musb_read_fifo(struct musb_hw_ep *hw_ep, u16 len, u8 *dst)
 
 static const struct musb_platform_ops am35x_ops = {
        .fifo_mode      = 4,
+       .flags          = MUSB_GLUE_EP_ADDR_FLAT_MAPPING,
        .init           = am35x_musb_init,
        .exit           = am35x_musb_exit,
 
index fea4f08d1b588040f657bea538de63773c081aac..69cf0890cb0ada4b94bdf7bff8ca3adebdda2234 100644 (file)
@@ -448,6 +448,7 @@ static int bfin_musb_exit(struct musb *musb)
 
 static const struct musb_platform_ops bfin_ops = {
        .fifo_mode      = 2,
+       .flags          = MUSB_GLUE_EP_ADDR_FLAT_MAPPING,
        .init           = bfin_musb_init,
        .exit           = bfin_musb_exit,
 
index 1284f8875d7acc405dbc0b5788c14251b0d6d73e..bbfcd3e10d0c59113cd878befa556bbaad8de6ad 100644 (file)
@@ -465,6 +465,7 @@ static int da8xx_musb_exit(struct musb *musb)
 
 static const struct musb_platform_ops da8xx_ops = {
        .fifo_mode      = 2,
+       .flags          = MUSB_GLUE_EP_ADDR_FLAT_MAPPING,
        .init           = da8xx_musb_init,
        .exit           = da8xx_musb_exit,
 
index 4e0b21a4cbb9b8c1291f8db61ae5f7aa5be615c4..f8b92ad575f6e74adad648f2bd54d9a856f3eb31 100644 (file)
@@ -502,6 +502,7 @@ static int davinci_musb_exit(struct musb *musb)
 
 static const struct musb_platform_ops davinci_ops = {
        .fifo_mode      = 2,
+       .flags          = MUSB_GLUE_EP_ADDR_FLAT_MAPPING,
        .init           = davinci_musb_init,
        .exit           = davinci_musb_exit,
 
index e070251deb2ae3efe3f7f8946f4de25e38a8dc0a..5f320018f8510854e10d59b88e1ff27d52b36880 100644 (file)
@@ -164,28 +164,12 @@ enum musb_g_ep0_state {
  * directly with the "flat" model, or after setting up an index register.
  */
 
-#if defined(CONFIG_ARCH_DAVINCI) || defined(CONFIG_SOC_OMAP2430) \
-               || defined(CONFIG_SOC_OMAP3430) || defined(CONFIG_BLACKFIN) \
-               || defined(CONFIG_ARCH_OMAP4)
-/* REVISIT indexed access seemed to
- * misbehave (on DaVinci) for at least peripheral IN ...
- */
-#define        MUSB_FLAT_REG
-#endif
-
-/* "flat" mapping: each endpoint has its own i/o address */
-#ifdef MUSB_FLAT_REG
-#define musb_ep_select(_musb, _mbase, _epnum)  \
-       (((void)(_mbase)), ((void)(_epnum)))
-#define        MUSB_EP_OFFSET                  MUSB_FLAT_OFFSET
-
-/* "indexed" mapping: INDEX register controls register bank select */
-#else
-#define musb_ep_select(_musb, _mbase, _epnum) \
-       musb_writeb((_mbase), MUSB_INDEX, (_epnum))
-#define        MUSB_EP_OFFSET                  MUSB_INDEXED_OFFSET
-#endif
+#define musb_ep_select(_musb, _mbase, _epnum) do { \
+       if (_musb->ops->flags & MUSB_GLUE_EP_ADDR_INDEXED_MAPPING) \
+               musb_writeb((_mbase), MUSB_INDEX, (_epnum)); \
+ } while (0)
 
+#define        MUSB_EP_OFFSET  MUSB_OFFSET
 /****************************** FUNCTIONS ********************************/
 
 #define MUSB_HST_MODE(_musb)\
@@ -201,6 +185,8 @@ enum musb_g_ep0_state {
 /******************************** TYPES *************************************/
 
 #define     MUSB_GLUE_TUSB_STYLE   0x0001
+#define     MUSB_GLUE_EP_ADDR_FLAT_MAPPING     0x0002
+#define     MUSB_GLUE_EP_ADDR_INDEXED_MAPPING  0x0004
 
 /**
  * struct musb_platform_ops - Operations passed to musb_core by HW glue layer
index 1af0ea9a4d063ac2b4146466ee3fde0cb70d1922..b222c08919d02859c8f2f073d17ec4f0911a3b60 100644 (file)
 #define MUSB_FIFOSIZE          0x0F
 #define MUSB_CONFIGDATA                MUSB_FIFOSIZE   /* Re-used for EP0 */
 
+#if 0
 /* Offsets to endpoint registers in indexed model (using INDEX register) */
 #define MUSB_INDEXED_OFFSET(_musb, _epnum, _offset)    \
        (0x10 + (_offset))
 /* Offsets to endpoint registers in flat models */
 #define MUSB_FLAT_OFFSET(_musb, _epnum, _offset)       \
        (0x100 + (0x10*(_epnum)) + (_offset))
+#endif
+
+#define MUSB_OFFSET(_musb, _epnum, _offset)    \
+       ((_musb)->ops->flags & MUSB_GLUE_EP_ADDR_INDEXED_MAPPING ? \
+               (0x10 + (_offset)) : (0x100 + (0x10*(_epnum)) + (_offset)))
+
 
 #include "tusb6010.h"          /* Needed "only" for TUSB_EP0_CONF */
 
index c2813d71d911bc10abbfd259584cda0699b5973b..9c7ae912e7fdd2af7b3378e4a45cb81723da33ad 100644 (file)
@@ -395,6 +395,7 @@ static int omap2430_musb_exit(struct musb *musb)
 
 static const struct musb_platform_ops omap2430_ops = {
        .fifo_mode      = 4,
+       .flags          = MUSB_GLUE_EP_ADDR_FLAT_MAPPING,
        .init           = omap2430_musb_init,
        .exit           = omap2430_musb_exit,
 
index 88a35498260a4fa8688dfe1a60b958e04246bbbc..235c5b86f496504da45b65da1d328726ac996c40 100644 (file)
@@ -1152,7 +1152,8 @@ static int tusb_musb_exit(struct musb *musb)
 
 static const struct musb_platform_ops tusb_ops = {
        .fifo_mode      = 4,
-       .flags          = MUSB_GLUE_TUSB_STYLE,
+       .flags          = MUSB_GLUE_TUSB_STYLE |
+                               MUSB_GLUE_EP_ADDR_INDEXED_MAPPING,
        .init           = tusb_musb_init,
        .exit           = tusb_musb_exit,