aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Westerberg <mika.westerberg@linux.intel.com>2013-03-05 05:05:17 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2013-03-12 14:30:56 -0400
commit0054e28dc9d2d7c43b569ed5d491bc8bc2f903a9 (patch)
tree90e0c1c28f991899c9a3adbebacb6da3c36165fc
parentc134634077942404a285f6b64bc1ce5932ac22fe (diff)
spi/pxa2xx: enable multiblock DMA transfers for LPSS devices
Intel LPSS SPI controllers need to have bit 0 (disable_ssp_dma_finish) set in SSP_REG in order to properly perform DMA transfers spanning over multiple blocks. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--drivers/spi/spi-pxa2xx.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
index 90b27a3508a6..c6d5b97c7240 100644
--- a/drivers/spi/spi-pxa2xx.c
+++ b/drivers/spi/spi-pxa2xx.c
@@ -68,6 +68,7 @@ MODULE_ALIAS("platform:pxa2xx-spi");
68#define LPSS_TX_HITHRESH_DFLT 224 68#define LPSS_TX_HITHRESH_DFLT 224
69 69
70/* Offset from drv_data->lpss_base */ 70/* Offset from drv_data->lpss_base */
71#define SSP_REG 0x0c
71#define SPI_CS_CONTROL 0x18 72#define SPI_CS_CONTROL 0x18
72#define SPI_CS_CONTROL_SW_MODE BIT(0) 73#define SPI_CS_CONTROL_SW_MODE BIT(0)
73#define SPI_CS_CONTROL_CS_HIGH BIT(1) 74#define SPI_CS_CONTROL_CS_HIGH BIT(1)
@@ -138,6 +139,10 @@ detection_done:
138 /* Enable software chip select control */ 139 /* Enable software chip select control */
139 value = SPI_CS_CONTROL_SW_MODE | SPI_CS_CONTROL_CS_HIGH; 140 value = SPI_CS_CONTROL_SW_MODE | SPI_CS_CONTROL_CS_HIGH;
140 __lpss_ssp_write_priv(drv_data, SPI_CS_CONTROL, value); 141 __lpss_ssp_write_priv(drv_data, SPI_CS_CONTROL, value);
142
143 /* Enable multiblock DMA transfers */
144 if (drv_data->master_info->enable_dma)
145 __lpss_ssp_write_priv(drv_data, SSP_REG, 1);
141} 146}
142 147
143static void lpss_ssp_cs_control(struct driver_data *drv_data, bool enable) 148static void lpss_ssp_cs_control(struct driver_data *drv_data, bool enable)