diff options
author | Mika Westerberg <mika.westerberg@linux.intel.com> | 2013-03-05 05:05:17 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-03-12 14:30:56 -0400 |
commit | 0054e28dc9d2d7c43b569ed5d491bc8bc2f903a9 (patch) | |
tree | 90e0c1c28f991899c9a3adbebacb6da3c36165fc | |
parent | c134634077942404a285f6b64bc1ce5932ac22fe (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.c | 5 |
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 | ||
143 | static void lpss_ssp_cs_control(struct driver_data *drv_data, bool enable) | 148 | static void lpss_ssp_cs_control(struct driver_data *drv_data, bool enable) |