summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2014-02-09 09:58:31 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2014-02-09 10:05:41 +0100
commit8559a7a85f46a83c5a28eeb82e9a4e392c82d825 (patch)
tree3cd4d6b4936d6c90d4c96a98897af53d011aee83
parent4f2f9150b748f278a02c7874e9fc3fd026082581 (diff)
downloadbarebox-8559a7a85f46a83c5a28eeb82e9a4e392c82d825.tar.gz
barebox-8559a7a85f46a83c5a28eeb82e9a4e392c82d825.tar.xz
spi: imx: drop use of enum
enum imx_spi_devtype is used as index into an array of controller types. This makes the controller type handling unnecessarily complicated. Just drop the enum and instead of an array use different statically initialized structs and referene them by name. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--drivers/spi/imx_spi.c69
1 files changed, 24 insertions, 45 deletions
diff --git a/drivers/spi/imx_spi.c b/drivers/spi/imx_spi.c
index c0c2ed7c49..80655a72c1 100644
--- a/drivers/spi/imx_spi.c
+++ b/drivers/spi/imx_spi.c
@@ -107,27 +107,6 @@
#define CSPI_2_3_STAT 0x18
#define CSPI_2_3_STAT_RR (1 << 3)
-enum imx_spi_devtype {
-#ifdef CONFIG_DRIVER_SPI_IMX1
- SPI_IMX_VER_IMX1,
-#endif
-#ifdef CONFIG_DRIVER_SPI_IMX_0_0
- SPI_IMX_VER_0_0,
-#endif
-#ifdef CONFIG_DRIVER_SPI_IMX_0_4
- SPI_IMX_VER_0_4,
-#endif
-#ifdef CONFIG_DRIVER_SPI_IMX_0_5
- SPI_IMX_VER_0_5,
-#endif
-#ifdef CONFIG_DRIVER_SPI_IMX_0_7
- SPI_IMX_VER_0_7,
-#endif
-#ifdef CONFIG_DRIVER_SPI_IMX_2_3
- SPI_IMX_VER_2_3,
-#endif
-};
-
struct imx_spi {
struct spi_master master;
int *cs_array;
@@ -473,29 +452,29 @@ static int imx_spi_transfer(struct spi_device *spi, struct spi_message *mesg)
return 0;
}
-static struct spi_imx_devtype_data spi_imx_devtype_data[] = {
#ifdef CONFIG_DRIVER_SPI_IMX_0_0
- [SPI_IMX_VER_0_0] = {
- .chipselect = cspi_0_0_chipselect,
- .xchg_single = cspi_0_0_xchg_single,
- .init = cspi_0_0_init,
- },
+static struct spi_imx_devtype_data spi_imx_devtype_data_0_0 = {
+ .chipselect = cspi_0_0_chipselect,
+ .xchg_single = cspi_0_0_xchg_single,
+ .init = cspi_0_0_init,
+};
#endif
+
#ifdef CONFIG_DRIVER_SPI_IMX_0_7
- [SPI_IMX_VER_0_7] = {
- .chipselect = cspi_0_7_chipselect,
- .xchg_single = cspi_0_7_xchg_single,
- .init = cspi_0_7_init,
- },
+static struct spi_imx_devtype_data spi_imx_devtype_data_0_7 = {
+ .chipselect = cspi_0_7_chipselect,
+ .xchg_single = cspi_0_7_xchg_single,
+ .init = cspi_0_7_init,
+};
#endif
+
#ifdef CONFIG_DRIVER_SPI_IMX_2_3
- [SPI_IMX_VER_2_3] = {
- .chipselect = cspi_2_3_chipselect,
- .xchg_single = cspi_2_3_xchg_single,
- .init = cspi_2_3_init,
- },
-#endif
+static struct spi_imx_devtype_data spi_imx_devtype_data_2_3 = {
+ .chipselect = cspi_2_3_chipselect,
+ .xchg_single = cspi_2_3_xchg_single,
+ .init = cspi_2_3_init,
};
+#endif
static int imx_spi_dt_probe(struct imx_spi *imx)
{
@@ -526,7 +505,7 @@ static int imx_spi_probe(struct device_d *dev)
struct spi_master *master;
struct imx_spi *imx;
struct spi_imx_master *pdata = dev->platform_data;
- enum imx_spi_devtype version;
+ struct spi_imx_devtype_data *devdata;
int ret;
imx = xzalloc(sizeof(*imx));
@@ -554,19 +533,19 @@ static int imx_spi_probe(struct device_d *dev)
#ifdef CONFIG_DRIVER_SPI_IMX_0_0
if (cpu_is_mx27())
- version = SPI_IMX_VER_0_0;
+ devdata = &spi_imx_devtype_data_0_0;
#endif
#ifdef CONFIG_DRIVER_SPI_IMX_0_7
if (cpu_is_mx25() || cpu_is_mx35())
- version = SPI_IMX_VER_0_7;
+ devdata = &spi_imx_devtype_data_0_7;
#endif
#ifdef CONFIG_DRIVER_SPI_IMX_2_3
if (cpu_is_mx51() || cpu_is_mx53() || cpu_is_mx6())
- version = SPI_IMX_VER_2_3;
+ devdata = &spi_imx_devtype_data_2_3;
#endif
- imx->chipselect = spi_imx_devtype_data[version].chipselect;
- imx->xchg_single = spi_imx_devtype_data[version].xchg_single;
- imx->init = spi_imx_devtype_data[version].init;
+ imx->chipselect = devdata->chipselect;
+ imx->xchg_single = devdata->xchg_single;
+ imx->init = devdata->init;
imx->regs = dev_request_mem_region(dev, 0);
imx->init(imx);