aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/platform_data
diff options
context:
space:
mode:
authorTrent Piepho <tpiepho@impinj.com>2018-04-02 16:06:05 -0400
committerShawn Guo <shawnguo@kernel.org>2018-04-17 23:11:23 -0400
commitfe1bd78bf18a7cb3eb76fceea9193534fb6619e3 (patch)
tree88e278a1359629f3335365e06def45399cc89e53 /include/linux/platform_data
parent60cc43fc888428bb2f18f08997432d426a243338 (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.h29
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 */
21struct spi_imx_master { 28struct 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_*/