dev_err(mcbsp_tx->dev, "TX Frame Sync Error! : 0x%x\n",
                        irqst_spcr2);
                /* Writing zero to XSYNC_ERR clears the IRQ */
-               MCBSP_WRITE(mcbsp_tx, SPCR2, irqst_spcr2 & ~(XSYNC_ERR));
+               MCBSP_WRITE(mcbsp_tx, SPCR2,
+                           MCBSP_READ_CACHE(mcbsp_tx, SPCR2) & ~(XSYNC_ERR));
        } else {
                complete(&mcbsp_tx->tx_irq_completion);
        }
                dev_err(mcbsp_rx->dev, "RX Frame Sync Error! : 0x%x\n",
                        irqst_spcr1);
                /* Writing zero to RSYNC_ERR clears the IRQ */
-               MCBSP_WRITE(mcbsp_rx, SPCR1, irqst_spcr1 & ~(RSYNC_ERR));
+               MCBSP_WRITE(mcbsp_rx, SPCR1,
+                           MCBSP_READ_CACHE(mcbsp_rx, SPCR1) & ~(RSYNC_ERR));
        } else {
                complete(&mcbsp_rx->tx_irq_completion);
        }
        }
        mcbsp = id_to_mcbsp_ptr(id);
 
-       mcbsp->rx_word_length = (MCBSP_READ(mcbsp, RCR1) >> 5) & 0x7;
-       mcbsp->tx_word_length = (MCBSP_READ(mcbsp, XCR1) >> 5) & 0x7;
+       mcbsp->rx_word_length = (MCBSP_READ_CACHE(mcbsp, RCR1) >> 5) & 0x7;
+       mcbsp->tx_word_length = (MCBSP_READ_CACHE(mcbsp, XCR1) >> 5) & 0x7;
 
-       idle = !((MCBSP_READ(mcbsp, SPCR2) | MCBSP_READ(mcbsp, SPCR1)) & 1);
+       idle = !((MCBSP_READ_CACHE(mcbsp, SPCR2) |
+                       MCBSP_READ_CACHE(mcbsp, SPCR1)) & 1);
 
        if (idle) {
                /* Start the sample generator */
-               w = MCBSP_READ(mcbsp, SPCR2);
+               w = MCBSP_READ_CACHE(mcbsp, SPCR2);
                MCBSP_WRITE(mcbsp, SPCR2, w | (1 << 6));
        }
 
        /* Enable transmitter and receiver */
        tx &= 1;
-       w = MCBSP_READ(mcbsp, SPCR2);
+       w = MCBSP_READ_CACHE(mcbsp, SPCR2);
        MCBSP_WRITE(mcbsp, SPCR2, w | tx);
 
        rx &= 1;
-       w = MCBSP_READ(mcbsp, SPCR1);
+       w = MCBSP_READ_CACHE(mcbsp, SPCR1);
        MCBSP_WRITE(mcbsp, SPCR1, w | rx);
 
        /*
 
        if (idle) {
                /* Start frame sync */
-               w = MCBSP_READ(mcbsp, SPCR2);
+               w = MCBSP_READ_CACHE(mcbsp, SPCR2);
                MCBSP_WRITE(mcbsp, SPCR2, w | (1 << 7));
        }
 
        if (cpu_is_omap2430() || cpu_is_omap34xx()) {
                /* Release the transmitter and receiver */
-               w = MCBSP_READ(mcbsp, XCCR);
+               w = MCBSP_READ_CACHE(mcbsp, XCCR);
                w &= ~(tx ? XDISABLE : 0);
                MCBSP_WRITE(mcbsp, XCCR, w);
-               w = MCBSP_READ(mcbsp, RCCR);
+               w = MCBSP_READ_CACHE(mcbsp, RCCR);
                w &= ~(rx ? RDISABLE : 0);
                MCBSP_WRITE(mcbsp, RCCR, w);
        }
        /* Reset transmitter */
        tx &= 1;
        if (cpu_is_omap2430() || cpu_is_omap34xx()) {
-               w = MCBSP_READ(mcbsp, XCCR);
+               w = MCBSP_READ_CACHE(mcbsp, XCCR);
                w |= (tx ? XDISABLE : 0);
                MCBSP_WRITE(mcbsp, XCCR, w);
        }
-       w = MCBSP_READ(mcbsp, SPCR2);
+       w = MCBSP_READ_CACHE(mcbsp, SPCR2);
        MCBSP_WRITE(mcbsp, SPCR2, w & ~tx);
 
        /* Reset receiver */
        rx &= 1;
        if (cpu_is_omap2430() || cpu_is_omap34xx()) {
-               w = MCBSP_READ(mcbsp, RCCR);
+               w = MCBSP_READ_CACHE(mcbsp, RCCR);
                w |= (rx ? RDISABLE : 0);
                MCBSP_WRITE(mcbsp, RCCR, w);
        }
-       w = MCBSP_READ(mcbsp, SPCR1);
+       w = MCBSP_READ_CACHE(mcbsp, SPCR1);
        MCBSP_WRITE(mcbsp, SPCR1, w & ~rx);
 
-       idle = !((MCBSP_READ(mcbsp, SPCR2) | MCBSP_READ(mcbsp, SPCR1)) & 1);
+       idle = !((MCBSP_READ_CACHE(mcbsp, SPCR2) |
+                       MCBSP_READ_CACHE(mcbsp, SPCR1)) & 1);
 
        if (idle) {
                /* Reset the sample rate generator */
-               w = MCBSP_READ(mcbsp, SPCR2);
+               w = MCBSP_READ_CACHE(mcbsp, SPCR2);
                MCBSP_WRITE(mcbsp, SPCR2, w & ~(1 << 6));
        }
 }
        if (MCBSP_READ(mcbsp, SPCR2) & XSYNC_ERR) {
                /* clear error */
                MCBSP_WRITE(mcbsp, SPCR2,
-                               MCBSP_READ(mcbsp, SPCR2) & (~XSYNC_ERR));
+                               MCBSP_READ_CACHE(mcbsp, SPCR2) & (~XSYNC_ERR));
                /* resend */
                return -1;
        } else {
                while (!(MCBSP_READ(mcbsp, SPCR2) & XRDY)) {
                        if (attemps++ > 1000) {
                                MCBSP_WRITE(mcbsp, SPCR2,
-                                           MCBSP_READ(mcbsp, SPCR2) & (~XRST));
+                                               MCBSP_READ_CACHE(mcbsp, SPCR2) &
+                                               (~XRST));
                                udelay(10);
                                MCBSP_WRITE(mcbsp, SPCR2,
-                                           MCBSP_READ(mcbsp, SPCR2) | (XRST));
+                                               MCBSP_READ_CACHE(mcbsp, SPCR2) |
+                                               (XRST));
                                udelay(10);
                                dev_err(mcbsp->dev, "Could not write to"
                                        " McBSP%d Register\n", mcbsp->id);
        if (MCBSP_READ(mcbsp, SPCR1) & RSYNC_ERR) {
                /* clear error */
                MCBSP_WRITE(mcbsp, SPCR1,
-                               MCBSP_READ(mcbsp, SPCR1) & (~RSYNC_ERR));
+                               MCBSP_READ_CACHE(mcbsp, SPCR1) & (~RSYNC_ERR));
                /* resend */
                return -1;
        } else {
                while (!(MCBSP_READ(mcbsp, SPCR1) & RRDY)) {
                        if (attemps++ > 1000) {
                                MCBSP_WRITE(mcbsp, SPCR1,
-                                           MCBSP_READ(mcbsp, SPCR1) & (~RRST));
+                                               MCBSP_READ_CACHE(mcbsp, SPCR1) &
+                                               (~RRST));
                                udelay(10);
                                MCBSP_WRITE(mcbsp, SPCR1,
-                                           MCBSP_READ(mcbsp, SPCR1) | (RRST));
+                                               MCBSP_READ_CACHE(mcbsp, SPCR1) |
+                                               (RRST));
                                udelay(10);
                                dev_err(mcbsp->dev, "Could not read from"
                                        " McBSP%d Register\n", mcbsp->id);
                spcr2 = MCBSP_READ(mcbsp, SPCR2);
                if (attempts++ > 1000) {
                        /* We must reset the transmitter */
-                       MCBSP_WRITE(mcbsp, SPCR2, spcr2 & (~XRST));
+                       MCBSP_WRITE(mcbsp, SPCR2,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR2) & (~XRST));
                        udelay(10);
-                       MCBSP_WRITE(mcbsp, SPCR2, spcr2 | XRST);
+                       MCBSP_WRITE(mcbsp, SPCR2,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR2) | XRST);
                        udelay(10);
                        dev_err(mcbsp->dev, "McBSP%d transmitter not "
                                "ready\n", mcbsp->id);
                spcr1 = MCBSP_READ(mcbsp, SPCR1);
                if (attempts++ > 1000) {
                        /* We must reset the receiver */
-                       MCBSP_WRITE(mcbsp, SPCR1, spcr1 & (~RRST));
+                       MCBSP_WRITE(mcbsp, SPCR1,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR1) & (~RRST));
                        udelay(10);
-                       MCBSP_WRITE(mcbsp, SPCR1, spcr1 | RRST);
+                       MCBSP_WRITE(mcbsp, SPCR1,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR1) | RRST);
                        udelay(10);
                        dev_err(mcbsp->dev, "McBSP%d receiver not "
                                "ready\n", mcbsp->id);
                spcr2 = MCBSP_READ(mcbsp, SPCR2);
                if (attempts++ > 1000) {
                        /* We must reset the transmitter */
-                       MCBSP_WRITE(mcbsp, SPCR2, spcr2 & (~XRST));
+                       MCBSP_WRITE(mcbsp, SPCR2,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR2) & (~XRST));
                        udelay(10);
-                       MCBSP_WRITE(mcbsp, SPCR2, spcr2 | XRST);
+                       MCBSP_WRITE(mcbsp, SPCR2,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR2) | XRST);
                        udelay(10);
                        dev_err(mcbsp->dev, "McBSP%d transmitter not "
                                "ready\n", mcbsp->id);
                spcr1 = MCBSP_READ(mcbsp, SPCR1);
                if (attempts++ > 1000) {
                        /* We must reset the receiver */
-                       MCBSP_WRITE(mcbsp, SPCR1, spcr1 & (~RRST));
+                       MCBSP_WRITE(mcbsp, SPCR1,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR1) & (~RRST));
                        udelay(10);
-                       MCBSP_WRITE(mcbsp, SPCR1, spcr1 | RRST);
+                       MCBSP_WRITE(mcbsp, SPCR1,
+                                   MCBSP_READ_CACHE(mcbsp, SPCR1) | RRST);
                        udelay(10);
                        dev_err(mcbsp->dev, "McBSP%d receiver not "
                                "ready\n", mcbsp->id);