u32 txdata = 0;
 
        if (dspi->tx) {
-               if (dspi->bytes_per_word == 1)
-                       txdata = *(u8 *)dspi->tx;
-               else if (dspi->bytes_per_word == 2)
-                       txdata = *(u16 *)dspi->tx;
-               else  /* dspi->bytes_per_word == 4 */
-                       txdata = *(u32 *)dspi->tx;
+               memcpy(&txdata, dspi->tx, dspi->bytes_per_word);
                dspi->tx += dspi->bytes_per_word;
        }
        dspi->len -= dspi->bytes_per_word;
        /* Mask off undefined bits */
        rxdata &= (1 << dspi->bits_per_word) - 1;
 
-       if (dspi->bytes_per_word == 1)
-               *(u8 *)dspi->rx = rxdata;
-       else if (dspi->bytes_per_word == 2)
-               *(u16 *)dspi->rx = rxdata;
-       else /* dspi->bytes_per_word == 4 */
-               *(u32 *)dspi->rx = rxdata;
+       memcpy(dspi->rx, &rxdata, dspi->bytes_per_word);
        dspi->rx += dspi->bytes_per_word;
 }
 
                dspi->progress = 0;
                /* Validated transfer specific frame size (defaults applied) */
                dspi->bits_per_word = transfer->bits_per_word;
-               if (transfer->bits_per_word <= 8)
-                       dspi->bytes_per_word = 1;
-               else if (transfer->bits_per_word <= 16)
-                       dspi->bytes_per_word = 2;
-               else
-                       dspi->bytes_per_word = 4;
+               dspi->bytes_per_word = DIV_ROUND_UP(dspi->bits_per_word, 8);
 
                regmap_update_bits(dspi->regmap, SPI_MCR,
                                   SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF,