diff options
| author | Trent Piepho <tpiepho@impinj.com> | 2018-04-02 16:06:05 -0400 |
|---|---|---|
| committer | Shawn Guo <shawnguo@kernel.org> | 2018-04-17 23:11:23 -0400 |
| commit | fe1bd78bf18a7cb3eb76fceea9193534fb6619e3 (patch) | |
| tree | 88e278a1359629f3335365e06def45399cc89e53 /include/linux/platform_data | |
| parent | 60cc43fc888428bb2f18f08997432d426a243338 (diff) | |
ARM: imx: Update spi_imx platform data to reflect current state
The docs for the spi_imx platform data still refer to a -32 offset used to
specify a native chip select. This was removed in commit 602c8f4485cd
("spi: imx: fix use of native chip-selects with devicetree") and no
longer works as documented. Update documentation.
The macro MXC_SPI_CS() is no longer is needed.
If a board uses all native chip selects, then it's not necessary to
specify a chip select array at all, as all native is the default (this is
how device-tree configured SPI masters work too). Most of the spi-imx
platform data users have their chip select arrays removed by this patch.
This patch also fixes a bug in mx31moboard introduced in the '602 commit.
When that board was updated in commit 901f26bce64a ("ARM: imx: set
correct chip_select in platform setup") to reflect the SPI change, only
SPI bus 2 was updated and SPI bus 1 was left with non-sequential chip
selects. The mc13783 spi device on bus 1 had its chip select updated as
if it were on bus 2.
CC: Sascha Hauer <kernel@pengutronix.de>
CC: Fabio Estevam <fabio.estevam@nxp.com>
Acked-by: Greg Ungerer <gerg@linux-m68k.org>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Trent Piepho <tpiepho@impinj.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
Diffstat (limited to 'include/linux/platform_data')
| -rw-r--r-- | include/linux/platform_data/spi-imx.h | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/include/linux/platform_data/spi-imx.h b/include/linux/platform_data/spi-imx.h index 6f012fefa1a2..328f670d10bd 100644 --- a/include/linux/platform_data/spi-imx.h +++ b/include/linux/platform_data/spi-imx.h | |||
| @@ -5,24 +5,29 @@ | |||
| 5 | 5 | ||
| 6 | /* | 6 | /* |
| 7 | * struct spi_imx_master - device.platform_data for SPI controller devices. | 7 | * struct spi_imx_master - device.platform_data for SPI controller devices. |
| 8 | * @chipselect: Array of chipselects for this master. Numbers >= 0 mean gpio | 8 | * @chipselect: Array of chipselects for this master or NULL. Numbers >= 0 |
| 9 | * pins, numbers < 0 mean internal CSPI chipselects according | 9 | * mean GPIO pins, -ENOENT means internal CSPI chipselect |
| 10 | * to MXC_SPI_CS(). Normally you want to use gpio based chip | 10 | * matching the position in the array. E.g., if chipselect[1] = |
| 11 | * selects as the CSPI module tries to be intelligent about | 11 | * -ENOENT then a SPI slave using chip select 1 will use the |
| 12 | * when to assert the chipselect: The CSPI module deasserts the | 12 | * native SS1 line of the CSPI. Omitting the array will use |
| 13 | * chipselect once it runs out of input data. The other problem | 13 | * all native chip selects. |
| 14 | * is that it is not possible to mix between high active and low | 14 | |
| 15 | * active chipselects on one single bus using the internal | 15 | * Normally you want to use gpio based chip selects as the CSPI |
| 16 | * chipselects. Unfortunately Freescale decided to put some | 16 | * module tries to be intelligent about when to assert the |
| 17 | * chipselect: The CSPI module deasserts the chipselect once it | ||
| 18 | * runs out of input data. The other problem is that it is not | ||
| 19 | * possible to mix between high active and low active chipselects | ||
| 20 | * on one single bus using the internal chipselects. | ||
| 21 | * Unfortunately, on some SoCs, Freescale decided to put some | ||
| 17 | * chipselects on dedicated pins which are not usable as gpios, | 22 | * chipselects on dedicated pins which are not usable as gpios, |
| 18 | * so we have to support the internal chipselects. | 23 | * so we have to support the internal chipselects. |
| 19 | * @num_chipselect: ARRAY_SIZE(chipselect) | 24 | * |
| 25 | * @num_chipselect: If @chipselect is specified, ARRAY_SIZE(chipselect), | ||
| 26 | * otherwise the number of native chip selects. | ||
| 20 | */ | 27 | */ |
| 21 | struct spi_imx_master { | 28 | struct spi_imx_master { |
| 22 | int *chipselect; | 29 | int *chipselect; |
| 23 | int num_chipselect; | 30 | int num_chipselect; |
| 24 | }; | 31 | }; |
| 25 | 32 | ||
| 26 | #define MXC_SPI_CS(no) ((no) - 32) | ||
| 27 | |||
| 28 | #endif /* __MACH_SPI_H_*/ | 33 | #endif /* __MACH_SPI_H_*/ |
