From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Chen-Yu Tsai <wenst@chromium.org>
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>,
Mark Brown <broonie@kernel.org>,
Liam Girdwood <lgirdwood@gmail.com>,
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 v5 08/10] i2c: of-prober: Add GPIO support
Date: Thu, 22 Aug 2024 17:20:41 +0300 [thread overview]
Message-ID: <ZsdJOUe44hiGur-s@smile.fi.intel.com> (raw)
In-Reply-To: <20240822092006.3134096-9-wenst@chromium.org>
On Thu, Aug 22, 2024 at 05:20:01PM +0800, Chen-Yu Tsai wrote:
> This adds GPIO management to 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 support was added in the previous patch.
>
> Without specific knowledge of each component's resource names or
> power sequencing requirements, the prober can only enable the
> regulator supplies all at once, and toggle the GPIOs all at once.
> Luckily, reset pins tend to be active low, while enable pins tend to
> be active high, so setting the raw status of all GPIO pins to high
> should work. The wait time before and after resources are enabled
> are collected from existing drivers and device trees.
>
> The prober collects resources from all possible components and enables
> them together, instead of enabling resources and probing each component
> one by one. The latter approach does not provide any boot time benefits
> over simply enabling each component and letting each driver probe
> sequentially.
>
> The prober will also deduplicate the resources, since on a component
> swap out or co-layout design, the resources are always the same.
> While duplicate regulator supplies won't cause much issue, shared
> GPIOs don't work reliably, especially with other drivers. For the
> same reason, the prober will release the GPIOs before the successfully
> probed component is actually enabled.
...
> + struct fwnode_handle *fwnode = of_fwnode_handle(node);
> + struct gpio_descs *gpiods;
> + struct gpio_desc *gpiod;
> + char con[32]; /* 32 is max size of property name */
Use 'propname' to be aligned with GPIO library usages.
> + char *con_id = NULL;
> + size_t new_size;
> + int len;
...
> + if (len >= sizeof(con) - 1) {
This can be transformed to check the returned value from strscpy().
> + pr_err("%pOF: length of GPIO name \"%s\" exceeds current limit\n",
> + node, prop->name);
> + return -EINVAL;
> + }
> +
> + if (len > 0) {
> + strscpy(con, prop->name, len + 1);
The correct (robust) call is with destination size. Which means here that you
may use 2-argument strscpy().
> + con_id = con;
> + }
...
> + if (!data->gpiods)
> + return 0;
If it comes a new code (something else besides GPIOs and regulators) this will be a (small) impediment. Better to have a helper for each case and do
ret = ..._gpiods();
if (ret)
...
Same for regulators and anything else in the future, if any.
> + /*
> + * reset GPIOs normally have opposite polarity compared to
"reset"
> + * enable GPIOs. Instead of parsing the flags again, simply
"enable"
> + * set the raw value to high.
This is quite a fragile assumption. Yes, it would work in 98% cases, but will
break if it's not true somewhere else.
> + */
...
> + /* largest post-reset-deassert delay seen in tree for Elan I2C HID */
> + msleep(300);
Same Q, how do you monitor _all_ the drivers?
...
> +disable_gpios:
> + for (gpio_i--; gpio_i >= 0; gpio_i--)
> + gpiod_set_raw_value_cansleep(data->gpiods->desc[gpio_i], 0);
Can't you call the _array() variant here?
...
> - dev_dbg(dev, "Resources: # of regulator supplies = %d\n", probe_data.regulators_num);
> + dev_dbg(dev, "Resources: # of GPIOs = %d, # of regulator supplies = %d\n",
> + probe_data.gpiods ? probe_data.gpiods->ndescs : 0,
> + probe_data.regulators_num);
I would issue one message per class of the devices (GPIOs, regulators, ...)
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2024-08-22 14:20 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 9:19 [PATCH v5 00/10] platform/chrome: Introduce DT hardware prober Chen-Yu Tsai
2024-08-22 9:19 ` [PATCH v5 01/10] of: dynamic: Add of_changeset_update_prop_string Chen-Yu Tsai
2024-08-22 12:32 ` Rob Herring
2024-08-22 9:19 ` [PATCH v5 02/10] regulator: Move OF-specific regulator lookup code to of_regulator.c Chen-Yu Tsai
2024-08-22 13:47 ` Andy Shevchenko
2024-08-23 6:49 ` Chen-Yu Tsai
2024-08-23 13:43 ` Andy Shevchenko
2024-08-26 6:46 ` Chen-Yu Tsai
2024-08-26 12:06 ` kernel test robot
2024-08-26 12:06 ` kernel test robot
2024-08-26 13:19 ` kernel test robot
2024-08-22 9:19 ` [PATCH v5 03/10] regulator: Split up _regulator_get() Chen-Yu Tsai
2024-08-22 13:49 ` Andy Shevchenko
2024-08-23 6:54 ` Chen-Yu Tsai
2024-08-22 9:19 ` [PATCH v5 04/10] regulator: Do pure DT regulator lookup in of_regulator_bulk_get_all() Chen-Yu Tsai
2024-08-22 13:53 ` Andy Shevchenko
2024-08-23 7:05 ` Chen-Yu Tsai
2024-08-22 9:19 ` [PATCH v5 05/10] gpiolib: Add gpio_property_name_length() Chen-Yu Tsai
2024-08-22 14:36 ` Andy Shevchenko
2024-08-23 7:50 ` Chen-Yu Tsai
2024-08-23 13:46 ` Andy Shevchenko
2024-08-22 9:19 ` [PATCH v5 06/10] i2c: Introduce OF component probe function Chen-Yu Tsai
2024-08-22 14:01 ` Andy Shevchenko
2024-08-23 8:40 ` Chen-Yu Tsai
2024-08-23 13:52 ` Andy Shevchenko
2024-08-22 9:20 ` [PATCH v5 07/10] i2c: of-prober: Add regulator support Chen-Yu Tsai
2024-08-22 14:09 ` Andy Shevchenko
2024-08-23 9:35 ` Chen-Yu Tsai
2024-08-23 13:56 ` Andy Shevchenko
2024-08-22 9:20 ` [PATCH v5 08/10] i2c: of-prober: Add GPIO support Chen-Yu Tsai
2024-08-22 14:20 ` Andy Shevchenko [this message]
2024-08-23 10:32 ` Chen-Yu Tsai
2024-08-23 14:00 ` Andy Shevchenko
2024-08-26 7:21 ` Chen-Yu Tsai
2024-08-22 9:20 ` [PATCH v5 09/10] platform/chrome: Introduce device tree hardware prober Chen-Yu Tsai
2024-08-22 9:20 ` [PATCH v5 10/10] 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=ZsdJOUe44hiGur-s@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=angelogioacchino.delregno@collabora.com \
--cc=bleung@chromium.org \
--cc=broonie@kernel.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=lgirdwood@gmail.com \
--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=wenst@chromium.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.