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

Commit 35675879 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "spi_qsd: Fix DMA errors"

parents 991917c2 e04c6603
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -1220,7 +1220,7 @@ static int msm_spi_bam_map_buffers(struct msm_spi *dd)
	u32 tx_len, rx_len;
	int num_xfrs_grped = dd->num_xfrs_grped;

	dev = &dd->cur_msg->spi->dev;
	dev = dd->dev;
	first_xfr = dd->cur_transfer;

	do {
@@ -1230,7 +1230,7 @@ static int msm_spi_bam_map_buffers(struct msm_spi *dd)
		if (tx_buf != NULL) {
			first_xfr->tx_dma = dma_map_single(dev, tx_buf,
							tx_len, DMA_TO_DEVICE);
			if (dma_mapping_error(NULL, first_xfr->tx_dma)) {
			if (dma_mapping_error(dev, first_xfr->tx_dma)) {
				ret = -ENOMEM;
				goto error;
			}
@@ -1239,9 +1239,9 @@ static int msm_spi_bam_map_buffers(struct msm_spi *dd)
		if (rx_buf != NULL) {
			first_xfr->rx_dma = dma_map_single(dev, rx_buf,	rx_len,
							DMA_FROM_DEVICE);
			if (dma_mapping_error(NULL, first_xfr->rx_dma)) {
			if (dma_mapping_error(dev, first_xfr->rx_dma)) {
				if (tx_buf != NULL)
					dma_unmap_single(NULL,
					dma_unmap_single(dev,
							first_xfr->tx_dma,
							tx_len, DMA_TO_DEVICE);
				ret = -ENOMEM;
@@ -1466,6 +1466,7 @@ static void msm_spi_process_transfer(struct msm_spi *dd)
	u32 timeout;
	u32 spi_ioc;
	u32 int_loopback = 0;
	int ret;

	dd->tx_bytes_remaining = dd->cur_msg_len;
	dd->rx_bytes_remaining = dd->cur_msg_len;
@@ -1504,8 +1505,10 @@ static void msm_spi_process_transfer(struct msm_spi *dd)
	msm_spi_set_transfer_mode(dd, bpw, read_count);
	msm_spi_set_mx_counts(dd, read_count);
	if (dd->mode == SPI_BAM_MODE) {
		if (msm_spi_dma_map_buffers(dd) < 0) {
		ret = msm_spi_dma_map_buffers(dd);
		if (ret < 0) {
			pr_err("Mapping DMA buffers\n");
			dd->cur_msg->status = ret;
			return;
		}
	}
@@ -1884,9 +1887,9 @@ static int msm_spi_transfer_one_message(struct spi_master *master,
		msm_spi_bam_pipe_disconnect(dd, &dd->bam.prod);
		msm_spi_bam_pipe_disconnect(dd, &dd->bam.cons);
	}
	dd->cur_msg->status = status_error;
	status_error = dd->cur_msg->status;
	spi_finalize_current_message(master);
	return 0;
	return status_error;
}

static int msm_spi_prepare_transfer_hardware(struct spi_master *master)