Loading drivers/spi/spi_qsd.c +22 −6 Original line number Diff line number Diff line Loading @@ -780,9 +780,13 @@ static int msm_spi_bam_pipe_connect(struct msm_spi *dd, struct sps_register_event event = { .mode = SPS_TRIGGER_WAIT, .options = SPS_O_EOT, .xfer_done = &dd->transfer_complete, }; if (pipe == &dd->bam.prod) event.xfer_done = &dd->rx_transfer_complete; else if (pipe == &dd->bam.cons) event.xfer_done = &dd->tx_transfer_complete; ret = sps_connect(pipe->handle, config); if (ret) { dev_err(dd->dev, "%s: sps_connect(%s:0x%p):%d", Loading Loading @@ -983,7 +987,6 @@ msm_spi_bam_next_transfer(struct msm_spi *dd) return 0; if (dd->tx_bytes_remaining > 0) { init_completion(&dd->transfer_complete); if (msm_spi_set_state(dd, SPI_OP_STATE_RESET)) return 0; if ((msm_spi_bam_begin_transfer(dd)) < 0) { Loading Loading @@ -1053,7 +1056,8 @@ static inline irqreturn_t msm_spi_qup_irq(int irq, void *dev_id) } if (dd->done) { complete(&dd->transfer_complete); complete(&dd->rx_transfer_complete); complete(&dd->tx_transfer_complete); dd->done = 0; } return ret; Loading Loading @@ -1416,7 +1420,8 @@ static int msm_spi_process_transfer(struct msm_spi *dd) dd->rx_bytes_remaining = dd->cur_msg_len; dd->read_buf = dd->cur_transfer->rx_buf; dd->write_buf = dd->cur_transfer->tx_buf; init_completion(&dd->transfer_complete); init_completion(&dd->tx_transfer_complete); init_completion(&dd->rx_transfer_complete); if (dd->cur_transfer->bits_per_word) bpw = dd->cur_transfer->bits_per_word; else Loading Loading @@ -1492,10 +1497,21 @@ static int msm_spi_process_transfer(struct msm_spi *dd) /* Assume success, this might change later upon transaction result */ do { if (!wait_for_completion_timeout(&dd->transfer_complete, if (dd->write_buf && !wait_for_completion_timeout(&dd->tx_transfer_complete, timeout)) { dev_err(dd->dev, "%s: SPI Tx transaction timeout\n", __func__); status = -EIO; break; } if (dd->read_buf && !wait_for_completion_timeout(&dd->rx_transfer_complete, timeout)) { dev_err(dd->dev, "%s: SPI transaction timeout\n", "%s: SPI Rx transaction timeout\n", __func__); status = -EIO; break; Loading drivers/spi/spi_qsd.h +2 −1 Original line number Diff line number Diff line Loading @@ -308,7 +308,8 @@ struct msm_spi { struct mutex core_lock; struct spi_device *spi; struct spi_transfer *cur_transfer; struct completion transfer_complete; struct completion tx_transfer_complete; struct completion rx_transfer_complete; struct clk *clk; /* core clock */ struct clk *pclk; /* interface clock */ struct qup_i2c_clk_path_vote clk_path_vote; Loading Loading
drivers/spi/spi_qsd.c +22 −6 Original line number Diff line number Diff line Loading @@ -780,9 +780,13 @@ static int msm_spi_bam_pipe_connect(struct msm_spi *dd, struct sps_register_event event = { .mode = SPS_TRIGGER_WAIT, .options = SPS_O_EOT, .xfer_done = &dd->transfer_complete, }; if (pipe == &dd->bam.prod) event.xfer_done = &dd->rx_transfer_complete; else if (pipe == &dd->bam.cons) event.xfer_done = &dd->tx_transfer_complete; ret = sps_connect(pipe->handle, config); if (ret) { dev_err(dd->dev, "%s: sps_connect(%s:0x%p):%d", Loading Loading @@ -983,7 +987,6 @@ msm_spi_bam_next_transfer(struct msm_spi *dd) return 0; if (dd->tx_bytes_remaining > 0) { init_completion(&dd->transfer_complete); if (msm_spi_set_state(dd, SPI_OP_STATE_RESET)) return 0; if ((msm_spi_bam_begin_transfer(dd)) < 0) { Loading Loading @@ -1053,7 +1056,8 @@ static inline irqreturn_t msm_spi_qup_irq(int irq, void *dev_id) } if (dd->done) { complete(&dd->transfer_complete); complete(&dd->rx_transfer_complete); complete(&dd->tx_transfer_complete); dd->done = 0; } return ret; Loading Loading @@ -1416,7 +1420,8 @@ static int msm_spi_process_transfer(struct msm_spi *dd) dd->rx_bytes_remaining = dd->cur_msg_len; dd->read_buf = dd->cur_transfer->rx_buf; dd->write_buf = dd->cur_transfer->tx_buf; init_completion(&dd->transfer_complete); init_completion(&dd->tx_transfer_complete); init_completion(&dd->rx_transfer_complete); if (dd->cur_transfer->bits_per_word) bpw = dd->cur_transfer->bits_per_word; else Loading Loading @@ -1492,10 +1497,21 @@ static int msm_spi_process_transfer(struct msm_spi *dd) /* Assume success, this might change later upon transaction result */ do { if (!wait_for_completion_timeout(&dd->transfer_complete, if (dd->write_buf && !wait_for_completion_timeout(&dd->tx_transfer_complete, timeout)) { dev_err(dd->dev, "%s: SPI Tx transaction timeout\n", __func__); status = -EIO; break; } if (dd->read_buf && !wait_for_completion_timeout(&dd->rx_transfer_complete, timeout)) { dev_err(dd->dev, "%s: SPI transaction timeout\n", "%s: SPI Rx transaction timeout\n", __func__); status = -EIO; break; Loading
drivers/spi/spi_qsd.h +2 −1 Original line number Diff line number Diff line Loading @@ -308,7 +308,8 @@ struct msm_spi { struct mutex core_lock; struct spi_device *spi; struct spi_transfer *cur_transfer; struct completion transfer_complete; struct completion tx_transfer_complete; struct completion rx_transfer_complete; struct clk *clk; /* core clock */ struct clk *pclk; /* interface clock */ struct qup_i2c_clk_path_vote clk_path_vote; Loading