* RT5677_SPI_READ/WRITE_32:   Transfer 4 bytes
  * RT5677_SPI_READ/WRITE_BURST:        Transfer any multiples of 8 bytes
  *
- * For example, reading 260 bytes at 0x60030002 uses the following commands:
- * 0x60030002 RT5677_SPI_READ_16       2 bytes
+ * Note:
+ * 16 Bit writes and reads are restricted to the address range
+ * 0x18020000 ~ 0x18021000
+ *
+ * For example, reading 256 bytes at 0x60030004 uses the following commands:
  * 0x60030004 RT5677_SPI_READ_32       4 bytes
  * 0x60030008 RT5677_SPI_READ_BURST    240 bytes
  * 0x600300F8 RT5677_SPI_READ_BURST    8 bytes
  * 0x60030100 RT5677_SPI_READ_32       4 bytes
- * 0x60030104 RT5677_SPI_READ_16       2 bytes
  *
  * Input:
  * @read: true for read commands; false for write commands
 {
        u8 cmd;
 
-       if (align == 2 || align == 6 || remain == 2) {
-               cmd = RT5677_SPI_READ_16;
-               *len = 2;
-       } else if (align == 4 || remain <= 6) {
+       if (align == 4 || remain <= 4) {
                cmd = RT5677_SPI_READ_32;
                *len = 4;
        } else {
                cmd = RT5677_SPI_READ_BURST;
-               *len = min_t(u32, remain & ~7, RT5677_SPI_BURST_LEN);
+               *len = (((remain - 1) >> 3) + 1) << 3;
+               *len = min_t(u32, *len, RT5677_SPI_BURST_LEN);
        }
        return read ? cmd : cmd + 1;
 }
        }
 }
 
-/* Read DSP address space using SPI. addr and len have to be 2-byte aligned. */
+/* Read DSP address space using SPI. addr and len have to be 4-byte aligned. */
 int rt5677_spi_read(u32 addr, void *rxbuf, size_t len)
 {
        u32 offset;
        if (!g_spi)
                return -ENODEV;
 
-       if ((addr & 1) || (len & 1)) {
+       if ((addr & 3) || (len & 3)) {
                dev_err(&g_spi->dev, "Bad read align 0x%x(%zu)\n", addr, len);
                return -EACCES;
        }
 }
 EXPORT_SYMBOL_GPL(rt5677_spi_read);
 
-/* Write DSP address space using SPI. addr has to be 2-byte aligned.
- * If len is not 2-byte aligned, an extra byte of zero is written at the end
+/* Write DSP address space using SPI. addr has to be 4-byte aligned.
+ * If len is not 4-byte aligned, then extra zeros are written at the end
  * as padding.
  */
 int rt5677_spi_write(u32 addr, const void *txbuf, size_t len)
 {
-       u32 offset, len_with_pad = len;
+       u32 offset;
        int status = 0;
        struct spi_transfer t;
        struct spi_message m;
        if (!g_spi)
                return -ENODEV;
 
-       if (addr & 1) {
+       if (addr & 3) {
                dev_err(&g_spi->dev, "Bad write align 0x%x(%zu)\n", addr, len);
                return -EACCES;
        }
 
-       if (len & 1)
-               len_with_pad = len + 1;
-
        memset(&t, 0, sizeof(t));
        t.tx_buf = buf;
        t.speed_hz = RT5677_SPI_FREQ;
        spi_message_init_with_transfers(&m, &t, 1);
 
-       for (offset = 0; offset < len_with_pad;) {
+       for (offset = 0; offset < len;) {
                spi_cmd = rt5677_spi_select_cmd(false, (addr + offset) & 7,
-                               len_with_pad - offset, &t.len);
+                               len - offset, &t.len);
 
                /* Construct SPI message header */
                buf[0] = spi_cmd;