[PATCH] spi: spi-ti-qspi: reinit of completion variable

2016-11-15 Thread Prahlad V
completion variable should be reinitialized before reusing.

Signed-off-by: Prahlad V 
---
 drivers/spi/spi-ti-qspi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
index caeac66..ec6fb09 100644
--- a/drivers/spi/spi-ti-qspi.c
+++ b/drivers/spi/spi-ti-qspi.c
@@ -411,6 +411,7 @@ static int ti_qspi_dma_xfer(struct ti_qspi *qspi, 
dma_addr_t dma_dst,
tx->callback = ti_qspi_dma_callback;
tx->callback_param = qspi;
cookie = tx->tx_submit(tx);
+   reinit_completion(&qspi->transfer_complete);
 
ret = dma_submit_error(cookie);
if (ret) {
-- 
2.9.2.729.ga42d7b6



[PATCH] spi: ti-qspi: revise ti_qspi_probe() failure flow

2017-02-16 Thread Prahlad V
call spi_master_put() in case of failures after spi_alloc_master().
call pm_runtime_disable() in case of failures after pm_runtime_enable().

Signed-off-by: Prahlad V 
---
 drivers/spi/spi-ti-qspi.c | 15 ++-
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
index ec6fb09..e784d0f 100644
--- a/drivers/spi/spi-ti-qspi.c
+++ b/drivers/spi/spi-ti-qspi.c
@@ -652,7 +652,8 @@ static int ti_qspi_probe(struct platform_device *pdev)
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (r == NULL) {
dev_err(&pdev->dev, "missing platform data\n");
-   return -ENODEV;
+   ret = -ENODEV;
+   goto free_master;
}
}
 
@@ -669,7 +670,8 @@ static int ti_qspi_probe(struct platform_device *pdev)
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_err(&pdev->dev, "no irq resource?\n");
-   return irq;
+   ret = irq;
+   goto free_master;
}
 
mutex_init(&qspi->list_lock);
@@ -685,15 +687,17 @@ static int ti_qspi_probe(struct platform_device *pdev)
qspi->ctrl_base =
syscon_regmap_lookup_by_phandle(np,
"syscon-chipselects");
-   if (IS_ERR(qspi->ctrl_base))
-   return PTR_ERR(qspi->ctrl_base);
+   if (IS_ERR(qspi->ctrl_base)) {
+   ret = PTR_ERR(qspi->ctrl_base);
+   goto free_master;
+   }
ret = of_property_read_u32_index(np,
 "syscon-chipselects",
 1, &qspi->ctrl_reg);
if (ret) {
dev_err(&pdev->dev,
"couldn't get ctrl_mod reg index\n");
-   return ret;
+   goto free_master;
}
}
 
@@ -742,6 +746,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
if (!ret)
return 0;
 
+   pm_runtime_disable(&pdev->dev);
 free_master:
spi_master_put(master);
return ret;
-- 
2.9.2.729.ga42d7b6



[PATCH] spi: spi-ti-qspi: clear wlen field while setting word length.

2016-07-09 Thread Prahlad V
When a word length of 1 byte is selected and writing data of length
more than QSPI_WLEN_MAX_BYTES, first MAX_BYTES will be transfered
and remaining will be transfered byte by byte. In that case wlen
field should be cleared before setting.

Signed-off-by: Prahlad V 
---
 drivers/spi/spi-ti-qspi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
index 29ea8d2..6c61f54 100644
--- a/drivers/spi/spi-ti-qspi.c
+++ b/drivers/spi/spi-ti-qspi.c
@@ -276,9 +276,9 @@ static int qspi_write_msg(struct ti_qspi *qspi, struct 
spi_transfer *t,
cmd |= QSPI_WLEN(QSPI_WLEN_MAX_BITS);
} else {
writeb(*txbuf, qspi->base + QSPI_SPI_DATA_REG);
-   cmd = qspi->cmd | QSPI_WR_SNGL;
xfer_len = wlen;
-   cmd |= QSPI_WLEN(wlen);
+   cmd = ((qspi->cmd & ~QSPI_WLEN_MASK) |
+QSPI_WLEN(wlen));
}
break;
case 2:
-- 
2.5.5