cppi41: fix MODE_REG compatibility among platforms
authorAjay Kumar Gupta <ajay.gupta@ti.com>
Fri, 24 Jul 2009 12:32:08 +0000 (18:02 +0530)
committerVaibhav Hiremath <hvaibhav@ti.com>
Mon, 23 Jan 2012 19:14:11 +0000 (00:44 +0530)
AM3517 has seperate Tx and Rx MODE registers whereas OMAPL137/DA8x
has only one registers for both Rx and Tx modes.

Solving this difference by adding TX_MODE and RX_MODE registers
seperately which are actually same in case of OMAPL137/DA8x but
different for AM3517.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
drivers/usb/musb/cppi41_dma.c

index 33c5461cfccd17593a08334bfc71f61aa94d45c0..48d77d349033f2f2ce262130e5d56d8794266e14 100644 (file)
@@ -278,7 +278,8 @@ static int __devinit cppi41_controller_start(struct dma_controller *controller)
        musb_writel(reg_base, USB_AUTOREQ_REG, 0);
 
        /* Disable the CDC/RNDIS modes */
-       musb_writel(reg_base, USB_MODE_REG, 0);
+       musb_writel(reg_base, USB_TX_MODE_REG, 0);
+       musb_writel(reg_base, USB_RX_MODE_REG, 0);
 
        return 1;
 
@@ -332,7 +333,8 @@ static int cppi41_controller_stop(struct dma_controller *controller)
        musb_writel(reg_base, USB_AUTOREQ_REG, 0);
 
        /* Disable the CDC/RNDIS modes */
-       musb_writel(reg_base, USB_MODE_REG, 0);
+       musb_writel(reg_base, USB_TX_MODE_REG, 0);
+       musb_writel(reg_base, USB_RX_MODE_REG, 0);
 
        return 1;
 }
@@ -480,17 +482,20 @@ static void cppi41_mode_update(struct cppi41_channel *cppi_ch, u8 mode)
        if (mode != cppi_ch->dma_mode) {
                struct cppi41 *cppi = cppi_ch->channel.private_data;
                void *__iomem reg_base = cppi->musb->ctrl_base;
-               u32 reg_val = musb_readl(reg_base, USB_MODE_REG);
+               u32 reg_val;
                u8 ep_num = cppi_ch->ch_num + 1;
 
                if (cppi_ch->transmit) {
+                       reg_val = musb_readl(reg_base, USB_TX_MODE_REG);
                        reg_val &= ~USB_TX_MODE_MASK(ep_num);
                        reg_val |= mode << USB_TX_MODE_SHIFT(ep_num);
+                       musb_writel(reg_base, USB_TX_MODE_REG, reg_val);
                } else {
+                       reg_val = musb_readl(reg_base, USB_RX_MODE_REG);
                        reg_val &= ~USB_RX_MODE_MASK(ep_num);
                        reg_val |= mode << USB_RX_MODE_SHIFT(ep_num);
+                       musb_writel(reg_base, USB_RX_MODE_REG, reg_val);
                }
-               musb_writel(reg_base, USB_MODE_REG, reg_val);
                cppi_ch->dma_mode = mode;
        }
 }