From: Jonathan Cameron <jic23@kernel.org>
To: Aren Moynihan <aren@peacevolution.org>
Cc: "Lars-Peter Clausen" <lars@metafoo.de>,
"Andy Shevchenko" <andriy.shevchenko@linux.intel.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Chen-Yu Tsai" <wens@csie.org>,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
"Samuel Holland" <samuel@sholland.org>,
"Kaustabh Chakraborty" <kauschluss@disroot.org>,
"Barnabás Czémán" <trabarni@gmail.com>,
"Ondrej Jirman" <megi@xff.cz>,
"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-sunxi@lists.linux.dev, "Dragan Simic" <dsimic@manjaro.org>,
phone-devel@vger.kernel.org
Subject: Re: [PATCH v4 3/6] iio: light: stk3310: Implement vdd and leda supplies
Date: Sun, 3 Nov 2024 11:31:03 +0000 [thread overview]
Message-ID: <20241103112933.60f96f97@jic23-huawei> (raw)
In-Reply-To: <20241102195037.3013934-9-aren@peacevolution.org>
On Sat, 2 Nov 2024 15:50:39 -0400
Aren Moynihan <aren@peacevolution.org> wrote:
> The vdd and leda supplies must be powered on for the chip to function
> and can be powered off during system suspend.
>
> This was originally based on a patch by Ondrej Jirman[1], but has been
> rewritten since.
>
> 1: https://codeberg.org/megi/linux/commit/a933aff8b7a0e6e3c9cf1d832dcba07022bbfa82
>
> Signed-off-by: Aren Moynihan <aren@peacevolution.org>
> ---
>
> Notes:
> Changes in v4:
> - fix variable declaration order in stk3310_resume to match the rest of
> the driver
For this Andy was asking for consistency. Generally we don't insist on a
particular ordering in IIO drivers, but we do prefer them to be the same.
Your new ordering is inconsistent between resume and suspend. Whilst
existing code may be inconsistent, you can still pick most common ordering
and use that for your new code.
If the existing driver is inconsistent then feel free to tidy that up but
do it in a precursor patch so there is a consistent style for you to then
carry on.
>
> Changes in v3:
> - use bulk regulators instead of two individual ones
> - handle cleanup using devm callbacks instead of the remove function
>
> Changes in v2:
> - always enable / disable regulators and rely on a dummy regulator if
> one isn't specified
> - replace usleep_range with fsleep
> - reorder includes so iio headers are last
> - add missing error handling to resume
>
> drivers/iio/light/stk3310.c | 76 ++++++++++++++++++++++++++++++++++++-
> 1 file changed, 74 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iio/light/stk3310.c b/drivers/iio/light/stk3310.c
> index 181b7acb3f96..f93689c61f44 100644
> --- a/drivers/iio/light/stk3310.c
> +++ b/drivers/iio/light/stk3310.c
> @@ -13,6 +13,8 @@
> #include <linux/module.h>
> #include <linux/mod_devicetable.h>
> #include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
> +
> #include <linux/iio/events.h>
> #include <linux/iio/iio.h>
> #include <linux/iio/sysfs.h>
> @@ -130,6 +132,7 @@ struct stk3310_data {
> struct regmap_field *reg_int_ps;
> struct regmap_field *reg_flag_psint;
> struct regmap_field *reg_flag_nf;
> + struct regulator_bulk_data supplies[2];
> };
>
> static const struct iio_event_spec stk3310_events[] = {
> @@ -621,6 +624,31 @@ static irqreturn_t stk3310_irq_event_handler(int irq, void *private)
> return IRQ_HANDLED;
> }
>
> +static int stk3310_regulators_enable(struct stk3310_data *data)
> +{
> + int ret;
> +
> + ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies), data->supplies);
> + if (ret)
> + return ret;
> +
> + /* we need a short delay to allow the chip time to power on */
> + fsleep(1000);
> +
> + return 0;
> +}
> +
> +static void stk3310_regulators_disable(void *private)
> +{
> + int ret;
> + struct stk3310_data *data = private;
> + struct device *dev = &data->client->dev;
> +
> + ret = regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies);
> + if (ret)
> + dev_err(dev, "failed to disable regulators: %d\n", ret);
> +}
> +
> static int stk3310_probe(struct i2c_client *client)
> {
> int ret;
> @@ -642,6 +670,13 @@ static int stk3310_probe(struct i2c_client *client)
>
> devm_mutex_init(&client->dev, &data->lock);
>
> + data->supplies[0].supply = "vdd";
> + data->supplies[1].supply = "leda";
> + ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(data->supplies),
> + data->supplies);
> + if (ret)
> + return dev_err_probe(&client->dev, ret, "get regulators failed\n");
> +
> ret = stk3310_regmap_init(data);
> if (ret < 0)
> return ret;
> @@ -652,6 +687,16 @@ static int stk3310_probe(struct i2c_client *client)
> indio_dev->channels = stk3310_channels;
> indio_dev->num_channels = ARRAY_SIZE(stk3310_channels);
>
> + ret = stk3310_regulators_enable(data);
> + if (ret)
> + return dev_err_probe(&client->dev, ret,
> + "regulator enable failed\n");
> +
> + ret = devm_add_action_or_reset(&client->dev, stk3310_regulators_disable, data);
> + if (ret)
> + return dev_err_probe(&client->dev, ret,
> + "failed to register regulator cleanup\n");
> +
> ret = stk3310_init(indio_dev);
> if (ret < 0)
> return ret;
> @@ -682,18 +727,45 @@ static int stk3310_probe(struct i2c_client *client)
> static int stk3310_suspend(struct device *dev)
> {
> struct stk3310_data *data;
> + int ret;
>
> data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
>
> - return stk3310_set_state(data, STK3310_STATE_STANDBY);
> + ret = stk3310_set_state(data, STK3310_STATE_STANDBY);
> + if (ret)
> + return ret;
> +
> + regcache_mark_dirty(data->regmap);
> +
> + ret = regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies);
> + if (ret) {
> + dev_err(dev, "failed to disable regulators: %d\n", ret);
> + return ret;
> + }
> +
> + return 0;
> }
>
> static int stk3310_resume(struct device *dev)
> {
> - u8 state = 0;
> + int ret;
> struct stk3310_data *data;
> + u8 state = 0;
>
> data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
> +
> + ret = stk3310_regulators_enable(data);
> + if (ret) {
> + dev_err(dev, "Failed to re-enable regulators: %d", ret);
> + return ret;
> + }
> +
> + ret = regcache_sync(data->regmap);
> + if (ret) {
> + dev_err(dev, "Failed to restore registers: %d\n", ret);
> + return ret;
> + }
> +
> if (data->ps_enabled)
> state |= STK3310_STATE_EN_PS;
> if (data->als_enabled)
next prev parent reply other threads:[~2024-11-03 11:34 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-02 19:50 [PATCH v4 0/6] iio: light: stk3310: support powering off during suspend Aren Moynihan
2024-11-02 19:50 ` [PATCH v4 1/6] dt-bindings: iio: light: stk33xx: add vdd and leda regulators Aren Moynihan
2024-11-02 19:50 ` [PATCH v4 2/6] iio: light: stk3310: handle all remove logic with devm callbacks Aren Moynihan
2024-11-03 11:22 ` Jonathan Cameron
2024-11-03 16:23 ` Aren
2024-11-04 8:32 ` Andy Shevchenko
2024-11-10 18:38 ` Aren
2024-11-10 19:51 ` Andy Shevchenko
2024-11-10 22:37 ` Aren
2024-11-11 9:38 ` Andy Shevchenko
2024-11-02 19:50 ` [PATCH v4 3/6] iio: light: stk3310: Implement vdd and leda supplies Aren Moynihan
2024-11-03 11:31 ` Jonathan Cameron [this message]
2024-11-03 16:11 ` Aren
2024-11-04 8:37 ` Andy Shevchenko
2024-11-04 8:35 ` Andy Shevchenko
2024-11-10 18:54 ` Aren
2024-11-02 19:50 ` [PATCH v4 4/6] iio: light: stk3310: use dev_err_probe where possible Aren Moynihan
2024-11-04 8:40 ` Andy Shevchenko
2024-11-10 19:14 ` Aren
2024-11-10 19:52 ` Andy Shevchenko
2024-11-10 21:34 ` Aren
2024-11-11 9:44 ` Andy Shevchenko
2024-11-12 10:15 ` Uwe Kleine-König
2024-11-12 12:31 ` Andy Shevchenko
2024-11-12 13:28 ` Nuno Sá
2024-11-12 23:11 ` Aren
2024-11-23 14:40 ` Jonathan Cameron
2024-11-02 19:50 ` [PATCH v4 5/6] iio: light: stk3310: log error if reading the chip id fails Aren Moynihan
2024-11-04 8:41 ` Andy Shevchenko
2024-11-10 19:16 ` Aren
2024-11-02 19:50 ` [PATCH v4 6/6] arm64: dts: allwinner: pinephone: Add power supplies to stk3311 Aren Moynihan
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=20241103112933.60f96f97@jic23-huawei \
--to=jic23@kernel.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=aren@peacevolution.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dsimic@manjaro.org \
--cc=jernej.skrabec@gmail.com \
--cc=kauschluss@disroot.org \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=megi@xff.cz \
--cc=phone-devel@vger.kernel.org \
--cc=robh@kernel.org \
--cc=samuel@sholland.org \
--cc=trabarni@gmail.com \
--cc=u.kleine-koenig@pengutronix.de \
--cc=wens@csie.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