diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-03-07 09:25:56 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-03-07 09:25:56 +0100 |
commit | 3d551bce2b90268c7285d55aaaf43a8240ff18d4 (patch) | |
tree | 8f8da15b4576326930e62368d5c1df1688dd8a81 /drivers/spi | |
parent | 23a8d93c5211da76e6acf4bbf5ba500f30b9ddf5 (diff) | |
parent | 0ad1e8d8df6f22c5a0d1e2a6c0b0769f92d52130 (diff) | |
download | barebox-3d551bce2b90268c7285d55aaaf43a8240ff18d4.tar.gz barebox-3d551bce2b90268c7285d55aaaf43a8240ff18d4.tar.xz |
Merge branch 'for-next/spi'
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/imx_spi.c | 132 |
1 files changed, 64 insertions, 68 deletions
diff --git a/drivers/spi/imx_spi.c b/drivers/spi/imx_spi.c index c0c2ed7c49..6675729314 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; @@ -157,7 +136,6 @@ static int imx_spi_setup(struct spi_device *spi) return 0; } -#ifdef CONFIG_DRIVER_SPI_IMX_0_0 static unsigned int cspi_0_0_xchg_single(struct imx_spi *imx, unsigned int data) { void __iomem *base = imx->regs; @@ -227,9 +205,7 @@ static void cspi_0_0_init(struct imx_spi *imx) readl(base + CSPI_0_0_RXDATA); writel(0, base + CSPI_0_0_INT); } -#endif -#ifdef CONFIG_DRIVER_SPI_IMX_0_7 static unsigned int cspi_0_7_xchg_single(struct imx_spi *imx, unsigned int data) { void __iomem *base = imx->regs; @@ -310,9 +286,7 @@ static void cspi_0_7_init(struct imx_spi *imx) while (readl(base + CSPI_0_7_STAT) & CSPI_0_7_STAT_RR) readl(base + CSPI_0_7_RXDATA); } -#endif -#ifdef CONFIG_DRIVER_SPI_IMX_2_3 static unsigned int cspi_2_3_xchg_single(struct imx_spi *imx, unsigned int data) { void __iomem *base = imx->regs; @@ -414,7 +388,6 @@ static void cspi_2_3_chipselect(struct spi_device *spi, int is_active) static void cspi_2_3_init(struct imx_spi *imx) { } -#endif static void imx_spi_do_transfer(struct spi_device *spi, struct spi_transfer *t) { @@ -473,28 +446,22 @@ 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, - }, -#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, - }, -#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 __maybe_unused 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, +}; + +static __maybe_unused 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, +}; + +static __maybe_unused 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, }; static int imx_spi_dt_probe(struct imx_spi *imx) @@ -526,9 +493,13 @@ 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 = NULL; int ret; + ret = dev_get_drvdata(dev, (unsigned long *)&devdata); + if (ret) + return -ENODEV; + imx = xzalloc(sizeof(*imx)); master = &imx->master; @@ -552,21 +523,9 @@ static int imx_spi_probe(struct device_d *dev) goto err_free; } -#ifdef CONFIG_DRIVER_SPI_IMX_0_0 - if (cpu_is_mx27()) - version = SPI_IMX_VER_0_0; -#endif -#ifdef CONFIG_DRIVER_SPI_IMX_0_7 - if (cpu_is_mx25() || cpu_is_mx35()) - version = SPI_IMX_VER_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; -#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); @@ -582,13 +541,49 @@ err_free: } static __maybe_unused struct of_device_id imx_spi_dt_ids[] = { +#if IS_ENABLED(CONFIG_DRIVER_SPI_IMX_0_0) { .compatible = "fsl,imx27-cspi", - }, { + .data = (unsigned long)&spi_imx_devtype_data_0_0, + }, +#endif +#if IS_ENABLED(CONFIG_DRIVER_SPI_IMX_0_7) + { .compatible = "fsl,imx35-cspi", - }, { + .data = (unsigned long)&spi_imx_devtype_data_0_7, + }, +#endif +#if IS_ENABLED(CONFIG_DRIVER_SPI_IMX_2_3) + { .compatible = "fsl,imx51-ecspi", - }, { + .data = (unsigned long)&spi_imx_devtype_data_2_3, + }, +#endif + { + /* sentinel */ + } +}; + +static struct platform_device_id imx_spi_ids[] = { +#if IS_ENABLED(CONFIG_DRIVER_SPI_IMX_0_0) + { + .name = "imx27-spi", + .driver_data = (unsigned long)&spi_imx_devtype_data_0_0, + }, +#endif +#if IS_ENABLED(CONFIG_DRIVER_SPI_IMX_0_7) + { + .name = "imx35-spi", + .driver_data = (unsigned long)&spi_imx_devtype_data_0_7, + }, +#endif +#if IS_ENABLED(CONFIG_DRIVER_SPI_IMX_2_3) + { + .name = "imx51-spi", + .driver_data = (unsigned long)&spi_imx_devtype_data_2_3, + }, +#endif + { /* sentinel */ } }; @@ -597,5 +592,6 @@ static struct driver_d imx_spi_driver = { .name = "imx_spi", .probe = imx_spi_probe, .of_compatible = DRV_OF_COMPAT(imx_spi_dt_ids), + .id_table = imx_spi_ids, }; device_platform_driver(imx_spi_driver); |