#define SPI_RX_REG_OFF 0x0
#define SPI_TX_REG_OFF 0x4
#define SPI_CTRL_REG_OFF 0x8
-#define SPI_INT_CTRL_REG_OFF 0xC
#if defined(MXC_SPI_VER_0_4)
+#define SPI_INT_CTRL_REG_OFF 0xC
#define SPI_DMA_REG_OFF 0x10
#define SPI_INT_STAT_REG_OFF 0x14
#define SPI_PERIOD_REG_OFF 0x18
#define SPI_CTRL_REG_RATE_WD 3 // 3-bit width
#define SPI_CTRL_REG_BIT_COUNT32 (0x1F << 8) // 32-bit xfer
+#define SPI_CTRL_REG_BIT_COUNT23 (0x16 << 8) // 23-bit xfer
#define SPI_CTRL_CS0 (0 << 24)
#define SPI_CTRL_CS1 (1 << 24)
#define SPI_CTRL_CS2 (2 << 24)
#define SPI_CTRL_CS3 (3 << 24)
+#define SPI_CTRL_CS_MASK (3 << 24)
#define SPI_CTRL_SSPOL_HIGH (1 << 7)
#define SPI_CTRL_SSCTL_SET (1 << 6)
#define SPI_CTRL_SCLK_POL_LOW (1 << 4)
#define SPI_CTRL_MODE_MASTER (1 << 1)
#define SPI_CTRL_EN (1 << 0)
+#define SPI_TEST_REG_RXCNT_OFFSET 4
+#define SPI_TEST_REG_RXCNT_MASK (0xF << 4)
#elif defined(MXC_SPI_VER_0_7)
+#define SPI_INT_CTRL_REG_OFF 0xC
#define SPI_DMA_REG_OFF 0x10
#define SPI_INT_STAT_REG_OFF 0x14
#define SPI_PERIOD_REG_OFF 0x18
#define SPI_CTRL_REG_RATE_SH 16 // start from bit 16
#define SPI_CTRL_REG_RATE_WD 3 // 3-bit width
+#define SPI_CTRL_REG_BIT_COUNT46 (0x2D << 20) // 48-bit xfer
#define SPI_CTRL_REG_BIT_COUNT32 (0x1F << 20) // 32-bit xfer
+#define SPI_CTRL_REG_BIT_COUNT23 (0x16 << 20) // 23-bit xfer
#define SPI_CTRL_CS0 (0 << 12)
#define SPI_CTRL_CS1 (1 << 12)
#define SPI_CTRL_CS2 (2 << 12)
#define SPI_CTRL_CS3 (3 << 12)
+#define SPI_CTRL_CS_MASK (3 << 12)
#define SPI_CTRL_SSPOL_HIGH (1 << 7)
#define SPI_CTRL_SSCTL_SET (1 << 6)
#define SPI_CTRL_SCLK_POL_LOW (1 << 4)
#define SPI_CTRL_MODE_MASTER (1 << 1)
#define SPI_CTRL_EN (1 << 0)
+#define SPI_TEST_REG_RXCNT_OFFSET 4
+#define SPI_TEST_REG_RXCNT_MASK (0xF << 4)
+
+
+#elif defined(MXC_SPI_VER_2_3)
+#define SPI_CONFIG_REG_OFF 0xC
+#define SPI_INT_CTRL_REG_OFF 0x10
+#define SPI_DMA_REG_OFF 0x14
+#define SPI_INT_STAT_REG_OFF 0x18
+#define SPI_PERIOD_REG_OFF 0x1C
+#define SPI_TEST_REG_OFF 0x20
+#define SPI_INT_STAT_RR (1 << 3)
+
+#define SPI_CTRL_REG_XCH_BIT (1 << 2)
+#define SPI_CTRL_REG_RATE_SH 12 // start from bit 12
+#define SPI_CTRL_REG_RATE_WD 4 // 3-bit width
+#define SPI_CTRL_REG_BIT_COUNT32 (0x1F << 20) // 32-bit xfer
+#define SPI_CTRL_REG_BIT_COUNT23 (0x16 << 20) // 23-bit xfer
+#define SPI_CTRL_REG_BIT_COUNT46 (0x2D << 20) // 46-bit xfer
+#define SPI_CTRL_CS0 (0 << 18)
+#define SPI_CTRL_CS1 (1 << 18)
+#define SPI_CTRL_CS2 (2 << 18)
+#define SPI_CTRL_CS3 (3 << 18)
+#define SPI_CTRL_CS_MASK (3 << 18)
+#define SPI_CTRL_MODE_MASTER_0 (1 << 4)
+#define SPI_CTRL_MODE_MASTER_1 (1 << 5)
+#define SPI_CTRL_MODE_MASTER_2 (1 << 6)
+#define SPI_CTRL_MODE_MASTER_3 (1 << 7)
+#define SPI_CTRL_EN (1 << 0)
+
+#define SPI_CFG_SS0_POL_HIGH (1 << 12)
+#define SPI_CFG_SS1_POL_HIGH (1 << 13)
+#define SPI_CFG_SS2_POL_HIGH (1 << 14)
+#define SPI_CFG_SS3_POL_HIGH (1 << 15)
+#define SPI_CFG_SS0_POL_LOW (0 << 12)
+#define SPI_CFG_SS1_POL_LOW (0 << 13)
+#define SPI_CFG_SS2_POL_LOW (0 << 14)
+#define SPI_CFG_SS3_POL_LOW (0 << 15)
+
+#define SPI_TEST_REG_RXCNT_OFFSET 8
+#define SPI_TEST_REG_RXCNT_MASK (0x7F << 8)
#else
+// For MX27
+#define SPI_INT_CTRL_REG_OFF 0xC
#define SPI_INT_STAT_REG_OFF 0xC
#define SPI_TEST_REG_OFF 0x10
#define SPI_PERIOD_REG_OFF 0x14
#define SPI_CTRL_CS0 (0 << 19)
#define SPI_CTRL_CS1 (1 << 19)
#define SPI_CTRL_CS2 (2 << 19)
+#define SPI_CTRL_CS_MASK (3 << 19)
#define SPI_CTRL_SSPOL_HIGH (1 << 8)
#define SPI_CTRL_SSCTL_SET (1 << 7)
#define SPI_CTRL_SCLK_POL_LOW (1 << 5)
#define SPI_CTRL_REG_BIT_COUNT32 0x1F // 32-bit xfer
+#define SPI_CTRL_REG_BIT_COUNT23 0x16 // 23-bit xfer
#define SPI_CTRL_MODE_MASTER (1 << 11)
#define SPI_CTRL_EN (1 << 10)
+#define SPI_TEST_REG_RXCNT_OFFSET 4
+#define SPI_TEST_REG_RXCNT_MASK (0xF << 4)
#endif
unsigned int pmic_reg(unsigned int reg, unsigned int val, unsigned int write);
unsigned int spi_xchg_single(unsigned int data, unsigned int base);
+#ifdef CPLD_SPI_BASE
+unsigned int spi_cpld_xchg_single(unsigned int data, unsigned int data1, unsigned int base);
+unsigned int cpld_reg(unsigned int reg, unsigned int val, unsigned int read);
+unsigned int cpld_reg_xfer(unsigned int reg, unsigned int val, unsigned int read);
+#endif /* CPLD_SPI_BASE */
+
#endif /* __MXC_SPI_H__ */