|
@@ -45,9 +45,6 @@
|
|
#define MXC_CSPIINT 0x0c
|
|
#define MXC_CSPIINT 0x0c
|
|
#define MXC_RESET 0x1c
|
|
#define MXC_RESET 0x1c
|
|
|
|
|
|
-#define MX3_CSPISTAT 0x14
|
|
|
|
-#define MX3_CSPISTAT_RR (1 << 3)
|
|
|
|
-
|
|
|
|
/* generic defines to abstract from the different register layouts */
|
|
/* generic defines to abstract from the different register layouts */
|
|
#define MXC_INT_RR (1 << 0) /* Receive data ready interrupt */
|
|
#define MXC_INT_RR (1 << 0) /* Receive data ready interrupt */
|
|
#define MXC_INT_TE (1 << 1) /* Transmit FIFO empty interrupt */
|
|
#define MXC_INT_TE (1 << 1) /* Transmit FIFO empty interrupt */
|
|
@@ -63,8 +60,6 @@ enum spi_imx_devtype {
|
|
SPI_IMX_VER_IMX1,
|
|
SPI_IMX_VER_IMX1,
|
|
SPI_IMX_VER_0_0,
|
|
SPI_IMX_VER_0_0,
|
|
SPI_IMX_VER_0_4,
|
|
SPI_IMX_VER_0_4,
|
|
- SPI_IMX_VER_0_5,
|
|
|
|
- SPI_IMX_VER_0_7,
|
|
|
|
SPI_IMX_VER_2_3,
|
|
SPI_IMX_VER_2_3,
|
|
};
|
|
};
|
|
|
|
|
|
@@ -343,32 +338,7 @@ static void __maybe_unused mx31_trigger(struct spi_imx_data *spi_imx)
|
|
writel(reg, spi_imx->base + MXC_CSPICTRL);
|
|
writel(reg, spi_imx->base + MXC_CSPICTRL);
|
|
}
|
|
}
|
|
|
|
|
|
-static int __maybe_unused spi_imx0_4_config(struct spi_imx_data *spi_imx,
|
|
|
|
- struct spi_imx_config *config)
|
|
|
|
-{
|
|
|
|
- unsigned int reg = MX31_CSPICTRL_ENABLE | MX31_CSPICTRL_MASTER;
|
|
|
|
- int cs = spi_imx->chipselect[config->cs];
|
|
|
|
-
|
|
|
|
- reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, config->speed_hz) <<
|
|
|
|
- MX31_CSPICTRL_DR_SHIFT;
|
|
|
|
-
|
|
|
|
- reg |= (config->bpw - 1) << MX31_CSPICTRL_BC_SHIFT;
|
|
|
|
-
|
|
|
|
- if (config->mode & SPI_CPHA)
|
|
|
|
- reg |= MX31_CSPICTRL_PHA;
|
|
|
|
- if (config->mode & SPI_CPOL)
|
|
|
|
- reg |= MX31_CSPICTRL_POL;
|
|
|
|
- if (config->mode & SPI_CS_HIGH)
|
|
|
|
- reg |= MX31_CSPICTRL_SSPOL;
|
|
|
|
- if (cs < 0)
|
|
|
|
- reg |= (cs + 32) << MX31_CSPICTRL_CS_SHIFT;
|
|
|
|
-
|
|
|
|
- writel(reg, spi_imx->base + MXC_CSPICTRL);
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-static int __maybe_unused spi_imx0_7_config(struct spi_imx_data *spi_imx,
|
|
|
|
|
|
+static int __maybe_unused mx31_config(struct spi_imx_data *spi_imx,
|
|
struct spi_imx_config *config)
|
|
struct spi_imx_config *config)
|
|
{
|
|
{
|
|
unsigned int reg = MX31_CSPICTRL_ENABLE | MX31_CSPICTRL_MASTER;
|
|
unsigned int reg = MX31_CSPICTRL_ENABLE | MX31_CSPICTRL_MASTER;
|
|
@@ -377,8 +347,12 @@ static int __maybe_unused spi_imx0_7_config(struct spi_imx_data *spi_imx,
|
|
reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, config->speed_hz) <<
|
|
reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, config->speed_hz) <<
|
|
MX31_CSPICTRL_DR_SHIFT;
|
|
MX31_CSPICTRL_DR_SHIFT;
|
|
|
|
|
|
- reg |= (config->bpw - 1) << MX35_CSPICTRL_BL_SHIFT;
|
|
|
|
- reg |= MX31_CSPICTRL_SSCTL;
|
|
|
|
|
|
+ if (cpu_is_mx35()) {
|
|
|
|
+ reg |= (config->bpw - 1) << MX35_CSPICTRL_BL_SHIFT;
|
|
|
|
+ reg |= MX31_CSPICTRL_SSCTL;
|
|
|
|
+ } else {
|
|
|
|
+ reg |= (config->bpw - 1) << MX31_CSPICTRL_BC_SHIFT;
|
|
|
|
+ }
|
|
|
|
|
|
if (config->mode & SPI_CPHA)
|
|
if (config->mode & SPI_CPHA)
|
|
reg |= MX31_CSPICTRL_PHA;
|
|
reg |= MX31_CSPICTRL_PHA;
|
|
@@ -387,7 +361,9 @@ static int __maybe_unused spi_imx0_7_config(struct spi_imx_data *spi_imx,
|
|
if (config->mode & SPI_CS_HIGH)
|
|
if (config->mode & SPI_CS_HIGH)
|
|
reg |= MX31_CSPICTRL_SSPOL;
|
|
reg |= MX31_CSPICTRL_SSPOL;
|
|
if (cs < 0)
|
|
if (cs < 0)
|
|
- reg |= (cs + 32) << MX35_CSPICTRL_CS_SHIFT;
|
|
|
|
|
|
+ reg |= (cs + 32) <<
|
|
|
|
+ (cpu_is_mx35() ? MX35_CSPICTRL_CS_SHIFT :
|
|
|
|
+ MX31_CSPICTRL_CS_SHIFT);
|
|
|
|
|
|
writel(reg, spi_imx->base + MXC_CSPICTRL);
|
|
writel(reg, spi_imx->base + MXC_CSPICTRL);
|
|
|
|
|
|
@@ -399,10 +375,10 @@ static int __maybe_unused mx31_rx_available(struct spi_imx_data *spi_imx)
|
|
return readl(spi_imx->base + MX31_CSPISTATUS) & MX31_STATUS_RR;
|
|
return readl(spi_imx->base + MX31_CSPISTATUS) & MX31_STATUS_RR;
|
|
}
|
|
}
|
|
|
|
|
|
-static void __maybe_unused spi_imx0_4_reset(struct spi_imx_data *spi_imx)
|
|
|
|
|
|
+static void __maybe_unused mx31_reset(struct spi_imx_data *spi_imx)
|
|
{
|
|
{
|
|
/* drain receive buffer */
|
|
/* drain receive buffer */
|
|
- while (readl(spi_imx->base + MX3_CSPISTAT) & MX3_CSPISTAT_RR)
|
|
|
|
|
|
+ while (readl(spi_imx->base + MX31_CSPISTATUS) & MX31_STATUS_RR)
|
|
readl(spi_imx->base + MXC_CSPIRXDATA);
|
|
readl(spi_imx->base + MXC_CSPIRXDATA);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -563,20 +539,10 @@ static struct spi_imx_devtype_data spi_imx_devtype_data[] = {
|
|
#ifdef CONFIG_SPI_IMX_VER_0_4
|
|
#ifdef CONFIG_SPI_IMX_VER_0_4
|
|
[SPI_IMX_VER_0_4] = {
|
|
[SPI_IMX_VER_0_4] = {
|
|
.intctrl = mx31_intctrl,
|
|
.intctrl = mx31_intctrl,
|
|
- .config = spi_imx0_4_config,
|
|
|
|
|
|
+ .config = mx31_config,
|
|
.trigger = mx31_trigger,
|
|
.trigger = mx31_trigger,
|
|
.rx_available = mx31_rx_available,
|
|
.rx_available = mx31_rx_available,
|
|
- .reset = spi_imx0_4_reset,
|
|
|
|
- .fifosize = 8,
|
|
|
|
- },
|
|
|
|
-#endif
|
|
|
|
-#ifdef CONFIG_SPI_IMX_VER_0_7
|
|
|
|
- [SPI_IMX_VER_0_7] = {
|
|
|
|
- .intctrl = mx31_intctrl,
|
|
|
|
- .config = spi_imx0_7_config,
|
|
|
|
- .trigger = mx31_trigger,
|
|
|
|
- .rx_available = mx31_rx_available,
|
|
|
|
- .reset = spi_imx0_4_reset,
|
|
|
|
|
|
+ .reset = mx31_reset,
|
|
.fifosize = 8,
|
|
.fifosize = 8,
|
|
},
|
|
},
|
|
#endif
|
|
#endif
|
|
@@ -732,7 +698,7 @@ static struct platform_device_id spi_imx_devtype[] = {
|
|
.driver_data = SPI_IMX_VER_0_0,
|
|
.driver_data = SPI_IMX_VER_0_0,
|
|
}, {
|
|
}, {
|
|
.name = "imx25-cspi",
|
|
.name = "imx25-cspi",
|
|
- .driver_data = SPI_IMX_VER_0_7,
|
|
|
|
|
|
+ .driver_data = SPI_IMX_VER_0_4,
|
|
}, {
|
|
}, {
|
|
.name = "imx27-cspi",
|
|
.name = "imx27-cspi",
|
|
.driver_data = SPI_IMX_VER_0_0,
|
|
.driver_data = SPI_IMX_VER_0_0,
|
|
@@ -741,16 +707,16 @@ static struct platform_device_id spi_imx_devtype[] = {
|
|
.driver_data = SPI_IMX_VER_0_4,
|
|
.driver_data = SPI_IMX_VER_0_4,
|
|
}, {
|
|
}, {
|
|
.name = "imx35-cspi",
|
|
.name = "imx35-cspi",
|
|
- .driver_data = SPI_IMX_VER_0_7,
|
|
|
|
|
|
+ .driver_data = SPI_IMX_VER_0_4,
|
|
}, {
|
|
}, {
|
|
.name = "imx51-cspi",
|
|
.name = "imx51-cspi",
|
|
- .driver_data = SPI_IMX_VER_0_7,
|
|
|
|
|
|
+ .driver_data = SPI_IMX_VER_0_4,
|
|
}, {
|
|
}, {
|
|
.name = "imx51-ecspi",
|
|
.name = "imx51-ecspi",
|
|
.driver_data = SPI_IMX_VER_2_3,
|
|
.driver_data = SPI_IMX_VER_2_3,
|
|
}, {
|
|
}, {
|
|
.name = "imx53-cspi",
|
|
.name = "imx53-cspi",
|
|
- .driver_data = SPI_IMX_VER_0_7,
|
|
|
|
|
|
+ .driver_data = SPI_IMX_VER_0_4,
|
|
}, {
|
|
}, {
|
|
.name = "imx53-ecspi",
|
|
.name = "imx53-ecspi",
|
|
.driver_data = SPI_IMX_VER_2_3,
|
|
.driver_data = SPI_IMX_VER_2_3,
|