rx_reg          = base + OMAP2_MCSPI_RX0;
        chstat_reg      = base + OMAP2_MCSPI_CHSTAT0;
 
+       if (c < (word_len>>3))
+               return 0;
+
        if (word_len <= 8) {
                u8              *rx;
                const u8        *tx;
                                dev_vdbg(&spi->dev, "read-%d %02x\n",
                                                word_len, *(rx - 1));
                        }
-               } while (c);
+               } while (c > (word_len>>3));
        } else if (word_len <= 16) {
                u16             *rx;
                const u16       *tx;
                                dev_vdbg(&spi->dev, "read-%d %04x\n",
                                                word_len, *(rx - 1));
                        }
-               } while (c);
+               } while (c > (word_len>>3));
        } else if (word_len <= 32) {
                u32             *rx;
                const u32       *tx;
                                dev_vdbg(&spi->dev, "read-%d %08x\n",
                                                word_len, *(rx - 1));
                        }
-               } while (c);
+               } while (c > (word_len>>3));
        }
 
        /* for TX_ONLY mode, be sure all words have shifted out */