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

Commit 7c159aa8 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Mark Brown
Browse files

spi: fsl-espi: factor out filling the local buffer



Better structure the code by factoring out filling the local buffer.

In addition don't initialize the complete local buffer at the
beginning of fsl_espi_do_one_msg. Instead move initialization of
those parts of the local buffer to be used for transfers w/o tx_buf
to fsl_espi_copy_to_buf.

Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 1423877b
Loading
Loading
Loading
Loading
+24 −22
Original line number Diff line number Diff line
@@ -85,6 +85,27 @@ struct fsl_espi_transfer {

#define AUTOSUSPEND_TIMEOUT 2000

static unsigned int fsl_espi_copy_to_buf(struct spi_message *m,
					 struct mpc8xxx_spi *mspi)
{
	unsigned int tx_only = 0;
	struct spi_transfer *t;
	u8 *buf = mspi->local_buf;

	list_for_each_entry(t, &m->transfers, transfer_list) {
		if (t->tx_buf) {
			memcpy(buf, t->tx_buf, t->len);
			if (!t->rx_buf)
				tx_only += t->len;
		} else {
			memset(buf, 0, t->len);
		}
		buf += t->len;
	}

	return tx_only;
}

static void fsl_espi_change_mode(struct spi_device *spi)
{
	struct mpc8xxx_spi *mspi = spi_master_get_devdata(spi->master);
@@ -298,16 +319,9 @@ static void fsl_espi_cmd_trans(struct spi_message *m,
				struct fsl_espi_transfer *trans, u8 *rx_buff)
{
	struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
	struct spi_transfer *t;
	int i = 0;
	struct fsl_espi_transfer *espi_trans = trans;

	list_for_each_entry(t, &m->transfers, transfer_list) {
		if (t->tx_buf) {
			memcpy(mspi->local_buf + i, t->tx_buf, t->len);
			i += t->len;
		}
	}
	fsl_espi_copy_to_buf(m, mspi);

	espi_trans->tx_buf = mspi->local_buf;
	espi_trans->rx_buf = mspi->local_buf;
@@ -320,18 +334,9 @@ static void fsl_espi_rw_trans(struct spi_message *m,
				struct fsl_espi_transfer *trans, u8 *rx_buff)
{
	struct mpc8xxx_spi *mspi = spi_master_get_devdata(m->spi->master);
	struct spi_transfer *t;
	unsigned int tx_only = 0;
	int i = 0;
	unsigned int tx_only;

	list_for_each_entry(t, &m->transfers, transfer_list) {
		if (t->tx_buf) {
			memcpy(mspi->local_buf + i, t->tx_buf, t->len);
			i += t->len;
			if (!t->rx_buf)
				tx_only += t->len;
		}
	}
	tx_only = fsl_espi_copy_to_buf(m, mspi);

	trans->tx_buf = mspi->local_buf;
	trans->rx_buf = mspi->local_buf;
@@ -349,14 +354,11 @@ static void fsl_espi_rw_trans(struct spi_message *m,
static int fsl_espi_do_one_msg(struct spi_master *master,
			       struct spi_message *m)
{
	struct mpc8xxx_spi *mspi = spi_master_get_devdata(master);
	struct spi_transfer *t;
	u8 *rx_buf = NULL;
	unsigned int xfer_len = 0;
	struct fsl_espi_transfer espi_trans;

	memset(mspi->local_buf, 0, SPCOM_TRANLEN_MAX);

	list_for_each_entry(t, &m->transfers, transfer_list) {
		if (t->rx_buf)
			rx_buf = t->rx_buf;