From: Linus Walleij <linus.walleij@linaro.org>
To: Sven Van Asbroeck <thesven73@gmail.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>,
Mark Brown <broonie@kernel.org>,
Jonathan Cameron <jonathan.cameron@huawei.com>,
Simon Han <z.han@kunbus.com>, Lukas Wunner <lukas@wunner.de>,
linux-spi <linux-spi@vger.kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v1] spi: fix client driver breakages when using GPIO descriptors
Date: Wed, 11 Nov 2020 02:05:19 +0100 [thread overview]
Message-ID: <CACRpkdagAK1X6FT=sug5FGA1iipXnOT_ujtMBh9cVnep_DpWyA@mail.gmail.com> (raw)
In-Reply-To: <CAGngYiVu3cXtzb5PaoDOoyqjuuohLQ+em6Keg-qgDFFn2tdp=Q@mail.gmail.com>
On Mon, Nov 9, 2020 at 3:41 PM Sven Van Asbroeck <thesven73@gmail.com> wrote:
> On Mon, Nov 9, 2020 at 9:24 AM Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
> >
> > Sounds like "many SPI drivers have to be fixed".
>
> I don't disagree. Fact is that after the imx cspi bus driver was converted
> to gpio descriptors, most spi client drivers broke. It would be great if this
> could be fixed. Any method that the community can find a consensus on,
> would be great :)
I think your patch is the quick fix.
I would say that anything that has:
spi->mode = ...
is essentially broken.
The core sets up vital things in .mode from e.g. device tree in
of_spi_parse_dt():
/* Mode (clock phase/polarity/etc.) */
if (of_property_read_bool(nc, "spi-cpha"))
spi->mode |= SPI_CPHA;
if (of_property_read_bool(nc, "spi-cpol"))
spi->mode |= SPI_CPOL;
if (of_property_read_bool(nc, "spi-3wire"))
spi->mode |= SPI_3WIRE;
if (of_property_read_bool(nc, "spi-lsb-first"))
spi->mode |= SPI_LSB_FIRST;
if (of_property_read_bool(nc, "spi-cs-high"))
spi->mode |= SPI_CS_HIGH;
All this gets overwritten and ignored when a client just assigns mode
like that. Not just SPI_CS_HIGH. I doubt things are different
with ACPI.
> One the one hand: the fact that many spi client drivers just overwrite
> flags and values in their parent bus structure, doesn't sound idiomatic.
> I guess those spi->... values should really be opaque, and we should
> be using accessor functions, eg.:
>
> static int acme_probe(struct spi_device *spi)
> {
> ...
> // won't touch SPI_CS_HIGH flag
> spi_set_mode_clock(spi, SPI_MODE_0);
> ...
> }
I would just make sure to affect the flags that matters to my driver,
it's just bits.
spi->mode &= ~FOO;
spi->mode |= BAR;
> On the other hand, it sounds very confusing to set SPI_CS_HIGH on
> all spi buses that use gpio descriptors: especially because gpiolib
> already handles absolutely everything related to polarity.
As long as gpiolib gets a 1 for asserted and a 0 for deasserted
it will be happy.
I'm not against your patch, it makes the codepath cleaner
so in a way it is good.
Yours,
Linus Walleij
next prev parent reply other threads:[~2020-11-11 1:05 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-06 15:07 [PATCH v1] spi: fix client driver breakages when using GPIO descriptors Sven Van Asbroeck
2020-11-09 14:25 ` Andy Shevchenko
2020-11-09 14:41 ` Sven Van Asbroeck
2020-11-11 1:05 ` Linus Walleij [this message]
2020-11-11 12:33 ` Mark Brown
2020-11-11 13:36 ` Linus Walleij
2020-11-16 21:06 ` Mark Brown
2020-11-18 1:03 ` Linus Walleij
2020-11-18 11:40 ` Mark Brown
2020-11-24 15:21 ` Linus Walleij
2020-11-24 16:40 ` Mark Brown
2020-11-25 9:19 ` Grant Likely
2020-11-25 9:17 ` Grant Likely
2020-11-11 1:08 ` Linus Walleij
2020-11-11 15:48 ` Mark Brown
2020-11-11 16:24 ` Sven Van Asbroeck
2020-11-11 16:32 ` Mark Brown
2020-11-12 11:41 ` Charles Keepax
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='CACRpkdagAK1X6FT=sug5FGA1iipXnOT_ujtMBh9cVnep_DpWyA@mail.gmail.com' \
--to=linus.walleij@linaro.org \
--cc=andy.shevchenko@gmail.com \
--cc=broonie@kernel.org \
--cc=jonathan.cameron@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=thesven73@gmail.com \
--cc=z.han@kunbus.com \
/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).