Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0dd2c96f authored by Mingkai Hu's avatar Mingkai Hu Committed by Grant Likely
Browse files

spi/fsl_espi: fix wrong setting of the address in the command buffer



Or else we can't operate on the right address when the trans length
is greater than 65535.

Signed-off-by: default avatarMingkai Hu <Mingkai.hu@freescale.com>
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
parent e6289d63
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -258,18 +258,18 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)
	return mpc8xxx_spi->count;
}

static void fsl_espi_addr2cmd(unsigned int addr, u8 *cmd)
static inline void fsl_espi_addr2cmd(unsigned int addr, u8 *cmd)
{
	if (cmd[1] && cmd[2] && cmd[3]) {
	if (cmd) {
		cmd[1] = (u8)(addr >> 16);
		cmd[2] = (u8)(addr >> 8);
		cmd[3] = (u8)(addr >> 0);
	}
}

static unsigned int fsl_espi_cmd2addr(u8 *cmd)
static inline unsigned int fsl_espi_cmd2addr(u8 *cmd)
{
	if (cmd[1] && cmd[2] && cmd[3])
	if (cmd)
		return cmd[1] << 16 | cmd[2] << 8 | cmd[3] << 0;

	return 0;
@@ -395,9 +395,11 @@ static void fsl_espi_rw_trans(struct spi_message *m,
			}
		}

		if (pos > 0) {
			addr = fsl_espi_cmd2addr(local_buf);
			addr += pos;
			fsl_espi_addr2cmd(addr, local_buf);
		}

		espi_trans->n_tx = n_tx;
		espi_trans->n_rx = trans_len;