From: Lee Jones <lee.jones@linaro.org>
To: Helmut Grohne <helmut.grohne@intenta.de>
Cc: Support Opensource <support.opensource@diasemi.com>,
linux-kernel@vger.kernel.org,
Adam Thomson <Adam.Thomson.Opensource@diasemi.com>,
Mark Brown <broonie@kernel.org>, Wolfram Sang <wsa@the-dreams.de>
Subject: Re: [PATCH v2 1/2] mfd: da9062: enable being a system-power-controller
Date: Tue, 14 Jun 2022 21:58:24 +0100 [thread overview]
Message-ID: <Yqj2cHuhjRhSIbDt@google.com> (raw)
In-Reply-To: <ca76e2bb2f5d47ad189fa1a40bb6dd8a5dc225d2.1650606541.git.helmut.grohne@intenta.de>
On Fri, 22 Apr 2022, Helmut Grohne wrote:
> The DA9062 can be the device used to power the CPU. In that case, it can
> be used to power off the system. In the CONTROL_A register, the M_*_EN
> bits must be zero for the corresponding *_EN bits to have an effect. We
> zero them all to turn off the system.
>
> Signed-off-by: Helmut Grohne <helmut.grohne@intenta.de>
> ---
> drivers/mfd/da9062-core.c | 31 +++++++++++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
>
> This series effectively is a rebased resend. The earlier posting was
> https://lore.kernel.org/all/20200107120559.GA700@laureti-dev/. At that time,
> Adam Thomson critisized the use of regmap and i2c inside a pm_power_off hook
> since irqs are disabled. He reached out to Lee Jones, who asked Mark Brown and
> Wolfram Sang, but never got any reply. I noted that a fair number of other
> drivers do use regmap and i2c despite this issue. In the mean time, more
> instances were added:
> * drivers/mfd/acer-ec-a500.c uses i2c
> * drivers/mfd/ntxec.c uses i2c
> * drivers/mfd/rk808.c uses regmap and i2c
> Given that we proceeded with accepting the use of i2c and regmap inside
> pm_power_off hooks, I think we can proceed with this patch as well.
>
> Helmut
>
> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
> index 2774b2cbaea6..e7af5b5f16e0 100644
> --- a/drivers/mfd/da9062-core.c
> +++ b/drivers/mfd/da9062-core.c
> @@ -620,6 +620,23 @@ static const struct of_device_id da9062_dt_ids[] = {
> };
> MODULE_DEVICE_TABLE(of, da9062_dt_ids);
>
> +/* Hold client since pm_power_off is global. */
Please drop this comment.
> +static struct i2c_client *da9062_i2c_client;
> +
> +static void da9062_power_off(void)
> +{
> + struct da9062 *chip = i2c_get_clientdata(da9062_i2c_client);
> + const unsigned int mask = DA9062AA_SYSTEM_EN_MASK |
> + DA9062AA_POWER_EN_MASK | DA9062AA_POWER1_EN_MASK |
> + DA9062AA_M_SYSTEM_EN_MASK | DA9062AA_M_POWER_EN_MASK |
> + DA9062AA_M_POWER1_EN_MASK;
> + int ret = regmap_update_bits(chip->regmap, DA9062AA_CONTROL_A, mask, 0);
This is messy. Please separate declarations and assignments here.
The top one is passable.
> + if (ret < 0)
> + dev_err(&da9062_i2c_client->dev,
> + "DA9062AA_CONTROL_A update failed, %d\n", ret);
You're talking to the user here.
Please use language that is more user-friendly.
> +}
> +
> static int da9062_i2c_probe(struct i2c_client *i2c,
> const struct i2c_device_id *id)
> {
> @@ -720,6 +737,15 @@ static int da9062_i2c_probe(struct i2c_client *i2c,
> return ret;
> }
>
> + if (of_device_is_system_power_controller(i2c->dev.of_node)) {
> + if (!pm_power_off) {
> + da9062_i2c_client = i2c;
> + pm_power_off = da9062_power_off;
> + } else {
> + dev_warn(&i2c->dev, "Poweroff callback already assigned\n");
Do we really mind/care?
Is there anything we can do about it?
Thus, do we really need to warn() about it?
> + }
> + }
> +
> return ret;
> }
>
> @@ -727,6 +753,11 @@ static int da9062_i2c_remove(struct i2c_client *i2c)
> {
> struct da9062 *chip = i2c_get_clientdata(i2c);
>
> + if (pm_power_off == da9062_power_off)
> + pm_power_off = NULL;
> + if (da9062_i2c_client)
> + da9062_i2c_client = NULL;
> +
> mfd_remove_devices(chip->dev);
> regmap_del_irq_chip(i2c->irq, chip->regmap_irq);
>
--
Lee Jones [李琼斯]
Principal Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
prev parent reply other threads:[~2022-06-14 20:59 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-22 6:16 [PATCH v2 1/2] mfd: da9062: enable being a system-power-controller Helmut Grohne
2022-04-22 6:16 ` [PATCH v2 2/2] dt-bindings: mfd: da9062 can be a system power controller Helmut Grohne
2022-04-26 1:01 ` Rob Herring
2022-04-26 9:15 ` DLG Adam Thomson
2022-04-26 9:14 ` [PATCH v2 1/2] mfd: da9062: enable being a system-power-controller DLG Adam Thomson
2022-06-14 20:58 ` Lee Jones [this message]
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=Yqj2cHuhjRhSIbDt@google.com \
--to=lee.jones@linaro.org \
--cc=Adam.Thomson.Opensource@diasemi.com \
--cc=broonie@kernel.org \
--cc=helmut.grohne@intenta.de \
--cc=linux-kernel@vger.kernel.org \
--cc=support.opensource@diasemi.com \
--cc=wsa@the-dreams.de \
/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.