struct spi_device *spi,
                                int bits_per_word)
 {
-       /* QE uses Little Endian for words > 8
-        * so transform all words > 8 into 8 bits
+       /* CPM/QE uses Little Endian for words > 8
+        * so transform 16 and 32 bits words into 8 bits
         * Unfortnatly that doesn't work for LSB so
         * reject these for now */
        /* Note: 32 bits word, LSB works iff
        if (spi->mode & SPI_LSB_FIRST &&
            bits_per_word > 8)
                return -EINVAL;
-       if (bits_per_word > 8)
+       if (bits_per_word <= 8)
+               return bits_per_word;
+       if (bits_per_word == 16 || bits_per_word == 32)
                return 8; /* pretend its 8 bits */
-       return bits_per_word;
+       return -EINVAL;
 }
 
 static int fsl_spi_setup_transfer(struct spi_device *spi,
                bits_per_word = mspi_apply_cpu_mode_quirks(cs, spi,
                                                           mpc8xxx_spi,
                                                           bits_per_word);
-       else if (mpc8xxx_spi->flags & SPI_QE)
+       else
                bits_per_word = mspi_apply_qe_mode_quirks(cs, spi,
                                                          bits_per_word);