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

Commit 97cd2243 authored by Dan Sneddon's avatar Dan Sneddon Committed by Sagar Dharia
Browse files

spi: spi_qsd: Prevent transfer grouping



Prevent spi transfers from being grouped together.
Grouping multiple transfers together causes invalid
write then read transactions. This patch prevents
the transactions from being grouped and ensures the
chipselect toggles appropriately.

CRs-Fixed: 661007
Change-Id: I1962cc95fde196295f37c64ecd54e490a7285bc4
Signed-off-by: default avatarDan Sneddon <dsneddon@codeaurora.org>
parent ca30ec37
Loading
Loading
Loading
Loading
+4 −27
Original line number Diff line number Diff line
@@ -1647,8 +1647,6 @@ static inline void write_force_cs(struct msm_spi *dd, bool set_flag)

static inline int combine_transfers(struct msm_spi *dd)
{
	struct spi_transfer *t = dd->cur_transfer;
	struct spi_transfer *nxt;
	int xfrs_grped = 1;
	dd->xfrs_delay_usec = 0;

@@ -1661,29 +1659,6 @@ static inline int combine_transfers(struct msm_spi *dd)
	if (dd->cur_transfer->rx_buf)
		dd->bam.bam_rx_len += dd->cur_transfer->len;

	while (t->transfer_list.next != &dd->cur_msg->transfers) {
		nxt = list_entry(t->transfer_list.next,
				 struct spi_transfer,
				 transfer_list);
		if (t->cs_change != nxt->cs_change)
			return xfrs_grped;
		if (t->delay_usecs) {
			dd->xfrs_delay_usec = t->delay_usecs;
			dev_dbg(dd->dev, "SPI slave requests delay per txn :%d usecs",
					t->delay_usecs);
			return xfrs_grped;
		}
		if (nxt->tx_buf)
			dd->bam.bam_tx_len += nxt->len;
		if (nxt->rx_buf)
			dd->bam.bam_rx_len += nxt->len;

		dd->cur_msg_len += nxt->len;
		xfrs_grped++;
		t = nxt;
	}

	if (1 == xfrs_grped)
	dd->xfrs_delay_usec = dd->cur_transfer->delay_usecs;

	return xfrs_grped;
@@ -1734,7 +1709,7 @@ static void msm_spi_process_message(struct msm_spi *dd)
			dd->cur_tx_transfer = dd->cur_transfer;
			dd->cur_rx_transfer = dd->cur_transfer;
			msm_spi_process_transfer(dd);
			if (dd->qup_ver && !dd->xfrs_delay_usec)
			if (dd->qup_ver && dd->cur_transfer->cs_change)
				write_force_cs(dd, 0);
			xfrs_grped--;
		}
@@ -1758,6 +1733,8 @@ static void msm_spi_process_message(struct msm_spi *dd)
		dd->num_xfrs_grped = 1;
		msm_spi_process_transfer(dd);
	}
	if (dd->qup_ver)
		write_force_cs(dd, 0);
	return;
error:
	msm_spi_free_cs_gpio(dd);