From: gerg@linux-m68k.org (Greg Ungerer)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/2] spi: imx: fix use of native chip-selects with devicetree
Date: Fri, 17 Mar 2017 15:03:03 +1000 [thread overview]
Message-ID: <1489726983-17706-3-git-send-email-gerg@linux-m68k.org> (raw)
In-Reply-To: <1489726983-17706-1-git-send-email-gerg@linux-m68k.org>
The commonly used mechanism of specifying the hardware or native
chip-select on an SPI device in devicetree (that is "cs-gpios = <0>")
does not result in the native chip-select being configured for use.
So external SPI devices that require use of the native chip-select
will not work.
You can successfully specify native chip-selects if using a platform
setup by specifying the cs-gpio as negative offset by 32. And that
works correctly. You cannot use the same method in devicetree.
The logic in the spi-imx.c driver during probe uses core spi function
of_spi_register_master() in spi.c to parse the "cs-gpios" devicetree tag.
For valid GPIO values that will be recorded for use, all other entries in
the cs_gpios list will be set to -ENOENT. So entries like "<0>" will be
set to -ENOENT in the cs_gpios list.
When the SPI device registers are setup the code will use the GPIO
listed in the cs_gpios list for the desired chip-select. If the cs_gpio
is less then 0 then it is intended to be for a native chip-select, and
its cs_gpio value is added to 32 to get the chipselect number to use.
Problem is that with devicetree this can only ever be -ENOENT (which
is -2), and that alone results in an invalid chip-select number. But also
doesn't allow selection of the native chip-select at all.
To fix, if the cs_gpio specified for this spi device is not a
valid GPIO then use the "chip_select" (that is the native chip-select
number) for hardware setup.
Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
---
drivers/spi/spi-imx.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index 9a7c62f..dbb482c 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -516,8 +516,8 @@ static int mx31_config(struct spi_device *spi, struct spi_imx_config *config)
reg |= MX31_CSPICTRL_POL;
if (spi->mode & SPI_CS_HIGH)
reg |= MX31_CSPICTRL_SSPOL;
- if (spi->cs_gpio < 0)
- reg |= (spi->cs_gpio + 32) <<
+ if (!gpio_is_valid(spi->cs_gpio))
+ reg |= (spi->chip_select) <<
(is_imx35_cspi(spi_imx) ? MX35_CSPICTRL_CS_SHIFT :
MX31_CSPICTRL_CS_SHIFT);
@@ -608,8 +608,8 @@ static int mx21_config(struct spi_device *spi, struct spi_imx_config *config)
reg |= MX21_CSPICTRL_POL;
if (spi->mode & SPI_CS_HIGH)
reg |= MX21_CSPICTRL_SSPOL;
- if (spi->cs_gpio < 0)
- reg |= (spi->cs_gpio + 32) << MX21_CSPICTRL_CS_SHIFT;
+ if (!gpio_is_valid(spi->cs_gpio))
+ reg |= spi->chip_select << MX21_CSPICTRL_CS_SHIFT;
writel(reg, spi_imx->base + MXC_CSPICTRL);
--
1.9.1
next prev parent reply other threads:[~2017-03-17 5:03 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-17 5:03 [PATCH 0/2] spi: imx: native chip selects and devicetree Greg Ungerer
2017-03-17 5:03 ` [PATCH 1/2] spi: imx: set correct chip_select in platform setup Greg Ungerer
2017-03-20 7:38 ` Shawn Guo
2017-03-20 11:52 ` Greg Ungerer
2017-03-17 5:03 ` Greg Ungerer [this message]
2017-03-20 7:39 ` [PATCH 2/2] spi: imx: fix use of native chip-selects with devicetree Shawn Guo
2017-03-20 13:22 ` Vladimir Zapolskiy
2017-03-21 2:05 ` Greg Ungerer
2017-03-21 8:05 ` Uwe Kleine-König
2017-03-21 11:53 ` Greg Ungerer
2017-03-21 12:11 ` Uwe Kleine-König
2017-03-21 13:22 ` Greg Ungerer
2017-03-21 19:23 ` Uwe Kleine-König
2017-03-21 20:15 ` Geert Uytterhoeven
2017-03-22 0:50 ` Greg Ungerer
2017-03-22 7:09 ` Geert Uytterhoeven
2017-09-04 12:47 ` Applied "spi: imx: fix use of native chip-selects with devicetree" to the spi tree Mark Brown
2017-10-10 20:38 ` [2/2] spi: imx: fix use of native chip-selects with devicetree Trent Piepho
2017-10-12 6:26 ` Greg Ungerer
2017-10-12 20:41 ` Trent Piepho
2017-03-20 7:35 ` [PATCH 0/2] spi: imx: native chip selects and devicetree Shawn Guo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1489726983-17706-3-git-send-email-gerg@linux-m68k.org \
--to=gerg@linux-m68k.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).