diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-06-17 00:20:12 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2013-06-17 00:29:25 +0200 |
commit | b74a459189d06ea453199b79e4602c9490404682 (patch) | |
tree | c35d52732a2fbd1e2dc797b97a3d62f2452b4555 /firmware/target/arm/imx233/ssp-imx233.h | |
parent | 86ff093267171ca91cb4d10f6ff1b27bb1349dac (diff) | |
download | rockbox-b74a459189d06ea453199b79e4602c9490404682.tar.gz rockbox-b74a459189d06ea453199b79e4602c9490404682.zip |
imx233: fix ssp for stmp3600 and stmp3700
Using the ssp macros, we can easily handle the stmp3600 which
has a single ssp block. Take care of all the nasty differences
between targets like bus width
Change-Id: If98a091cc262e9e6834f6fb9826f7c5515bfe621
Diffstat (limited to 'firmware/target/arm/imx233/ssp-imx233.h')
-rw-r--r-- | firmware/target/arm/imx233/ssp-imx233.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/firmware/target/arm/imx233/ssp-imx233.h b/firmware/target/arm/imx233/ssp-imx233.h index 4387fc6370..e58c9e1c09 100644 --- a/firmware/target/arm/imx233/ssp-imx233.h +++ b/firmware/target/arm/imx233/ssp-imx233.h | |||
@@ -29,21 +29,38 @@ | |||
29 | 29 | ||
30 | #include "regs/regs-ssp.h" | 30 | #include "regs/regs-ssp.h" |
31 | 31 | ||
32 | #if IMX233_SUBTARGET < 3700 | ||
33 | #define IMX233_NR_SSP 1 | ||
34 | #else | ||
32 | #define IMX233_NR_SSP 2 | 35 | #define IMX233_NR_SSP 2 |
36 | #endif | ||
33 | 37 | ||
34 | /* ssp can value 1 or 2 */ | 38 | /* ssp can value 1 or 2 */ |
39 | #if IMX233_NR_SSP >= 2 | ||
35 | #define __SSP_SELECT(ssp, ssp1, ssp2) ((ssp) == 1 ? (ssp1) : (ssp2)) | 40 | #define __SSP_SELECT(ssp, ssp1, ssp2) ((ssp) == 1 ? (ssp1) : (ssp2)) |
41 | #else | ||
42 | #define __SSP_SELECT(ssp, ssp1, ssp2) (ssp1) | ||
43 | #endif | ||
36 | 44 | ||
37 | #define INT_SRC_SSP_DMA(ssp) __SSP_SELECT(ssp, INT_SRC_SSP1_DMA, INT_SRC_SSP2_DMA) | 45 | #define INT_SRC_SSP_DMA(ssp) __SSP_SELECT(ssp, INT_SRC_SSP1_DMA, INT_SRC_SSP2_DMA) |
38 | #define INT_SRC_SSP_ERROR(ssp) __SSP_SELECT(ssp, INT_SRC_SSP1_ERROR, INT_SRC_SSP2_ERROR) | 46 | #define INT_SRC_SSP_ERROR(ssp) __SSP_SELECT(ssp, INT_SRC_SSP1_ERROR, INT_SRC_SSP2_ERROR) |
39 | 47 | ||
40 | #define BP_SSP_CTRL1_ALL_IRQ 0 | 48 | #define BP_SSP_CTRL1_ALL_IRQ 0 |
49 | #if IMX233_SUBTARGET < 3700 | ||
50 | #define BM_SSP_CTRL1_ALL_IRQ \ | ||
51 | BM_OR7(SSP_CTRL1, SDIO_IRQ, RESP_ERR_IRQ, RESP_TIMEOUT_IRQ, DATA_TIMEOUT_IRQ, \ | ||
52 | DATA_CRC_IRQ, RECV_TIMEOUT_IRQ, RECV_OVRFLW_IRQ) | ||
53 | #define BM_SSP_CTRL1_ALL_IRQ_EN \ | ||
54 | BM_OR7(SSP_CTRL1, SDIO_IRQ_EN, RESP_ERR_IRQ_EN, RESP_TIMEOUT_IRQ_EN, DATA_TIMEOUT_IRQ_EN, \ | ||
55 | DATA_CRC_IRQ_EN, RECV_TIMEOUT_IRQ_EN, RECV_OVRFLW_IRQ_EN) | ||
56 | #else | ||
41 | #define BM_SSP_CTRL1_ALL_IRQ \ | 57 | #define BM_SSP_CTRL1_ALL_IRQ \ |
42 | BM_OR8(SSP_CTRL1, SDIO_IRQ, RESP_ERR_IRQ, RESP_TIMEOUT_IRQ, DATA_TIMEOUT_IRQ, \ | 58 | BM_OR8(SSP_CTRL1, SDIO_IRQ, RESP_ERR_IRQ, RESP_TIMEOUT_IRQ, DATA_TIMEOUT_IRQ, \ |
43 | DATA_CRC_IRQ, FIFO_UNDERRUN_IRQ, RECV_TIMEOUT_IRQ, FIFO_OVERRUN_IRQ) | 59 | DATA_CRC_IRQ, FIFO_UNDERRUN_IRQ, RECV_TIMEOUT_IRQ, FIFO_OVERRUN_IRQ) |
44 | #define BM_SSP_CTRL1_ALL_IRQ_EN \ | 60 | #define BM_SSP_CTRL1_ALL_IRQ_EN \ |
45 | BM_OR8(SSP_CTRL1, SDIO_IRQ_EN, RESP_ERR_IRQ_EN, RESP_TIMEOUT_IRQ_EN, DATA_TIMEOUT_IRQ_EN, \ | 61 | BM_OR8(SSP_CTRL1, SDIO_IRQ_EN, RESP_ERR_IRQ_EN, RESP_TIMEOUT_IRQ_EN, DATA_TIMEOUT_IRQ_EN, \ |
46 | DATA_CRC_IRQ_EN, FIFO_UNDERRUN_EN, RECV_TIMEOUT_IRQ_EN, FIFO_OVERRUN_IRQ_EN) | 62 | DATA_CRC_IRQ_EN, FIFO_UNDERRUN_EN, RECV_TIMEOUT_IRQ_EN, FIFO_OVERRUN_IRQ_EN) |
63 | #endif | ||
47 | 64 | ||
48 | #define BM_SSP_CTRL1_TIMEOUT_IRQ \ | 65 | #define BM_SSP_CTRL1_TIMEOUT_IRQ \ |
49 | BM_OR3(SSP_CTRL1, RESP_TIMEOUT_IRQ, DATA_TIMEOUT_IRQ, RECV_TIMEOUT_IRQ) | 66 | BM_OR3(SSP_CTRL1, RESP_TIMEOUT_IRQ, DATA_TIMEOUT_IRQ, RECV_TIMEOUT_IRQ) |
@@ -80,6 +97,7 @@ void imx233_ssp_set_block_size(int ssp, unsigned log_block_size); | |||
80 | enum imx233_ssp_error_t imx233_ssp_sd_mmc_transfer(int ssp, uint8_t cmd, | 97 | enum imx233_ssp_error_t imx233_ssp_sd_mmc_transfer(int ssp, uint8_t cmd, |
81 | uint32_t cmd_arg, enum imx233_ssp_resp_t resp, void *buffer, unsigned block_count, | 98 | uint32_t cmd_arg, enum imx233_ssp_resp_t resp, void *buffer, unsigned block_count, |
82 | bool wait4irq, bool read, uint32_t *resp_ptr); | 99 | bool wait4irq, bool read, uint32_t *resp_ptr); |
100 | /* pullups/alternative are ignored on targets which don't support it */ | ||
83 | void imx233_ssp_setup_ssp1_sd_mmc_pins(bool enable_pullups, unsigned bus_width, | 101 | void imx233_ssp_setup_ssp1_sd_mmc_pins(bool enable_pullups, unsigned bus_width, |
84 | unsigned drive_strength, bool use_alt); | 102 | unsigned drive_strength, bool use_alt); |
85 | void imx233_ssp_setup_ssp2_sd_mmc_pins(bool enable_pullups, unsigned bus_width, | 103 | void imx233_ssp_setup_ssp2_sd_mmc_pins(bool enable_pullups, unsigned bus_width, |