From: Chen-Yu Tsai <wenst@chromium.org>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Rob Herring <robh@kernel.org>,
Saravana Kannan <saravanak@google.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
AngeloGioacchino Del Regno
<angelogioacchino.delregno@collabora.com>,
Wolfram Sang <wsa@kernel.org>,
Benson Leung <bleung@chromium.org>,
Tzung-Bi Shih <tzungbi@kernel.org>,
chrome-platform@lists.linux.dev, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
linux-kernel@vger.kernel.org,
Douglas Anderson <dianders@chromium.org>,
Johan Hovold <johan@kernel.org>, Jiri Kosina <jikos@kernel.org>,
linux-i2c@vger.kernel.org
Subject: Re: [PATCH v8 6/8] i2c: of-prober: Add GPIO support to simple helpers
Date: Tue, 15 Oct 2024 13:31:40 +0800 [thread overview]
Message-ID: <CAGXv+5EwSZFoE-Uzb5x1QfknkVfd64Z_uzR0YcvZ_pR9ktGUBA@mail.gmail.com> (raw)
In-Reply-To: <Zwz-benEP4PHbRb2@smile.fi.intel.com>
On Mon, Oct 14, 2024 at 7:20 PM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>
> On Mon, Oct 14, 2024 at 12:06:16PM +0800, Chen-Yu Tsai wrote:
> > On Thu, Oct 10, 2024 at 11:20 PM Andy Shevchenko
> > <andriy.shevchenko@linux.intel.com> wrote:
> > > On Tue, Oct 08, 2024 at 03:34:25PM +0800, Chen-Yu Tsai wrote:
> > > > Add GPIO support to the simple helpers for the I2C OF component prober.
> > > > Components that the prober intends to probe likely require their
> > > > regulator supplies be enabled, and GPIOs be toggled to enable them or
> > > > bring them out of reset before they will respond to probe attempts.
> > > > Regulator supplies were handled in the previous patch.
> > > >
> > > > The assumption is that the same class of components to be probed are
> > > > always connected in the same fashion with the same regulator supply
> > > > and GPIO. The names may vary due to binding differences, but the
> > > > physical layout does not change.
> > > >
> > > > This supports at most one GPIO pin. The user must specify the GPIO name,
> > > > the polarity, and the amount of time to wait after the GPIO is toggled.
> > > > Devices with more than one GPIO pin likely require specific power
> > > > sequencing beyond what generic code can easily support.
>
> ...
>
> > > > + /* An empty string signals an unnamed GPIO */
> > > > + if (!ctx->opts->gpio_name[0])
> > > > + con_id = NULL;
> > > > + else
> > > > + con_id = ctx->opts->gpio_name;
> > >
> > > Can it use positive conditional?
> > >
> > > if (ctx->opts->gpio_name[0])
> > > con_id = ctx->opts->gpio_name;
> > > else
> > > con_id = NULL;
> >
> > You suggested writing it this way in your reply to v7. Please pick one.
>
> Oh, whatever you will finish with then, sorry for the noise.
Thank you.
> ...
>
> > > > +static void i2c_of_probe_simple_disable_gpio(struct device *dev, struct i2c_of_probe_simple_ctx *ctx)
> > > > +{
> > > > + if (!ctx->gpiod)
> > > > + return;
> > >
> > > Do you need this check for the future patches?
> >
> > Not sure I follow. The check is needed because this function is called
> > in i2c_of_probe_simple_cleanup(), but the GPIO could have been released
> > earlier in i2c_of_probe_simple_cleanup_early(), and that makes this
> > function a no-op.
>
> Do you have a known race condition then? This is bad. You shouldn't rely on
> the sequence of events here, or the serialisation has to be added.
No there isn't. Explanation below.
> > The helpers for the release side are quite short, but the ones on the
> > request side wrap some conditional and error handling. I think it's
> > better to keep it symmetric?
>
> Yes, but why do you need the above check, I didn't still get...
> I.o.w. you think that there is a gap in time that (if no check) the GPIO
> descriptor might be changed? But then how does it affect anyway the possibility
> that it becomes not NULL even with the current code.
There are two codes paths, either
a) successfully finding a device and enabling it, or
b) exhausting all options and not finding a device, because it was
optional or it is malfunctioning.
After either code path, this cleanup function is called.
In path (a), the GPIO descriptor is released prior to enabling the device,
because the descriptor is an exclusive resource, and as soon as the device
is enabled, its corresponding driver may probe and request the same GPIO,
and would fail if it was not released.
In path (b), nothing was enabled, and the GPIO descriptor was not released
early.
The cleanup function here accounts for both cases, hence the check.
A step-by-step description might be clearer:
1. i2c_of_probe_simple_enable()
...
1a. i2c_of_probe_simple_get_supply()
1b. i2c_of_probe_simple_get_gpiod()
1c. i2c_of_probe_simple_enable_regulator()
1d. i2c_of_probe_simple_set_gpio()
2. Loop through potential component options and probe; if one is found:
2a. i2c_of_probe_simple_cleanup_early()
2a-i. i2c_of_probe_simple_put_gpiod
2b. Enable device and driver's probe() gets called
3. i2c_of_probe_simple_cleanup()
3a. i2c_of_probe_simple_disable_gpio()
3b. i2c_of_probe_simple_put_gpiod()
3c. i2c_of_probe_simple_disable_regulator()
3d. i2c_of_probe_simple_put_supply()
ChenYu
> > > > + /* Ignore error if GPIO is not in output direction */
> > > > + gpiod_set_value(ctx->gpiod, !ctx->opts->gpio_assert_to_enable);
> > > > +}
>
> --
> With Best Regards,
> Andy Shevchenko
>
>
next prev parent reply other threads:[~2024-10-15 5:31 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-08 7:34 [PATCH v8 0/8] platform/chrome: Introduce DT hardware prober Chen-Yu Tsai
2024-10-08 7:34 ` [PATCH v8 1/8] of: dynamic: Add of_changeset_update_prop_string Chen-Yu Tsai
2024-10-08 7:34 ` [PATCH v8 2/8] of: base: Add for_each_child_of_node_with_prefix() Chen-Yu Tsai
2024-10-08 7:34 ` [PATCH v8 3/8] i2c: core: Remove extra space in Makefile Chen-Yu Tsai
2024-10-08 8:34 ` Wolfram Sang
2024-10-08 7:34 ` [PATCH v8 4/8] i2c: Introduce OF component probe function Chen-Yu Tsai
2024-10-10 15:16 ` Andy Shevchenko
2024-10-14 3:53 ` Chen-Yu Tsai
2024-10-14 11:16 ` Andy Shevchenko
2024-10-15 5:22 ` Chen-Yu Tsai
2024-10-15 17:58 ` Doug Anderson
2024-10-15 18:03 ` Andy Shevchenko
2024-10-16 7:01 ` Chen-Yu Tsai
2024-10-16 9:28 ` Chen-Yu Tsai
2024-10-16 10:29 ` Andy Shevchenko
2024-10-08 7:34 ` [PATCH v8 5/8] i2c: of-prober: Add simple helpers for regulator support Chen-Yu Tsai
2024-10-15 17:58 ` Doug Anderson
2024-10-15 18:04 ` Andy Shevchenko
2024-10-16 7:39 ` Chen-Yu Tsai
2024-10-08 7:34 ` [PATCH v8 6/8] i2c: of-prober: Add GPIO support to simple helpers Chen-Yu Tsai
2024-10-10 15:20 ` Andy Shevchenko
2024-10-14 4:06 ` Chen-Yu Tsai
2024-10-14 11:20 ` Andy Shevchenko
2024-10-15 5:31 ` Chen-Yu Tsai [this message]
2024-10-15 11:19 ` Andy Shevchenko
2024-10-15 12:05 ` Chen-Yu Tsai
2024-10-15 5:34 ` Chen-Yu Tsai
2024-10-15 11:21 ` Andy Shevchenko
2024-10-15 17:58 ` Doug Anderson
2024-10-16 7:49 ` Chen-Yu Tsai
2024-10-16 15:34 ` Doug Anderson
2024-10-08 7:34 ` [PATCH v8 7/8] platform/chrome: Introduce device tree hardware prober Chen-Yu Tsai
2024-10-10 15:29 ` Andy Shevchenko
2024-10-10 15:32 ` Andy Shevchenko
2024-10-14 4:56 ` Chen-Yu Tsai
2024-10-14 11:23 ` Andy Shevchenko
2024-10-15 6:32 ` Chen-Yu Tsai
2024-10-15 11:23 ` Andy Shevchenko
2024-10-15 12:18 ` Chen-Yu Tsai
2024-10-15 12:54 ` Andy Shevchenko
2024-10-14 7:04 ` Chen-Yu Tsai
2024-10-14 11:25 ` Andy Shevchenko
2024-10-15 7:51 ` Chen-Yu Tsai
2024-10-15 17:59 ` Doug Anderson
2024-10-08 7:34 ` [PATCH v8 8/8] arm64: dts: mediatek: mt8173-elm-hana: Mark touchscreens and trackpads as fail Chen-Yu Tsai
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=CAGXv+5EwSZFoE-Uzb5x1QfknkVfd64Z_uzR0YcvZ_pR9ktGUBA@mail.gmail.com \
--to=wenst@chromium.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=bleung@chromium.org \
--cc=chrome-platform@lists.linux.dev \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=jikos@kernel.org \
--cc=johan@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=matthias.bgg@gmail.com \
--cc=robh@kernel.org \
--cc=saravanak@google.com \
--cc=tzungbi@kernel.org \
--cc=wsa@kernel.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).