linux-acpi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tomasz Figa <tfiga@chromium.org>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: linux-i2c <linux-i2c@vger.kernel.org>,
	Wolfram Sang <wsa@the-dreams.de>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	ACPI Devel Maling List <linux-acpi@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Mani, Rajmohan" <rajmohan.mani@intel.com>,
	Bartosz Golaszewski <bgolaszewski@baylibre.com>,
	Bingbu Cao <bingbu.cao@intel.com>,
	Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>,
	Hyungwoo Yang <hyungwoo.yang@intel.com>,
	Linux Media Mailing List <linux-media@vger.kernel.org>,
	Sergey Senozhatsky <senozhatsky@chromium.org>
Subject: Re: [PATCH v8 6/6] at24: Support probing while off
Date: Tue, 6 Oct 2020 13:20:37 +0200	[thread overview]
Message-ID: <CAAFQd5DqYHckYA4LSkt5UN35HuOLC=rJhPFHbGu8p-B2vSTrqg@mail.gmail.com> (raw)
In-Reply-To: <20200903081550.6012-7-sakari.ailus@linux.intel.com>

Hi Sakari,

On Thu, Sep 3, 2020 at 10:15 AM Sakari Ailus
<sakari.ailus@linux.intel.com> wrote:
>
> In certain use cases (where the chip is part of a camera module, and the
> camera module is wired together with a camera privacy LED), powering on
> the device during probe is undesirable. Add support for the at24 to
> execute probe while being powered off. For this to happen, a hint in form
> of a device property is required from the firmware.
>
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
>  drivers/misc/eeprom/at24.c | 43 +++++++++++++++++++++++---------------
>  1 file changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
> index 8f5de5f10bbea..2d24e33788d7d 100644
> --- a/drivers/misc/eeprom/at24.c
> +++ b/drivers/misc/eeprom/at24.c
> @@ -595,6 +595,7 @@ static int at24_probe(struct i2c_client *client)
>         bool i2c_fn_i2c, i2c_fn_block;
>         unsigned int i, num_addresses;
>         struct at24_data *at24;
> +       bool low_power;
>         struct regmap *regmap;
>         bool writable;
>         u8 test_byte;
> @@ -733,25 +734,30 @@ static int at24_probe(struct i2c_client *client)
>
>         i2c_set_clientdata(client, at24);
>
> -       err = regulator_enable(at24->vcc_reg);
> -       if (err) {
> -               dev_err(dev, "Failed to enable vcc regulator\n");
> -               return err;
> -       }
> +       low_power = acpi_dev_state_low_power(&client->dev);
> +       if (!low_power) {
> +               err = regulator_enable(at24->vcc_reg);
> +               if (err) {
> +                       dev_err(dev, "Failed to enable vcc regulator\n");
> +                       return err;
> +               }
>
> -       /* enable runtime pm */
> -       pm_runtime_set_active(dev);
> +               pm_runtime_set_active(dev);
> +       }
>         pm_runtime_enable(dev);
>

What's the guarantee that at this point the runtime PM wouldn't
suspend the device? Notice that the nvmem device is already exposed to
the userspace, which could trigger pm runtime gets and puts (and thus
idles as well).

Best regards,
Tomasz

>         /*
> -        * Perform a one-byte test read to verify that the
> -        * chip is functional.
> +        * Perform a one-byte test read to verify that the chip is functional,
> +        * unless powering on the device is to be avoided during probe (i.e.
> +        * it's powered off right now).
>          */
> -       err = at24_read(at24, 0, &test_byte, 1);
> -       if (err) {
> -               pm_runtime_disable(dev);
> -               regulator_disable(at24->vcc_reg);
> -               return -ENODEV;
> +       if (!low_power) {
> +               err = at24_read(at24, 0, &test_byte, 1);
> +               if (err) {
> +                       pm_runtime_disable(dev);
> +                       regulator_disable(at24->vcc_reg);
> +                       return -ENODEV;
> +               }
>         }
>
>         pm_runtime_idle(dev);
> @@ -771,9 +777,11 @@ static int at24_remove(struct i2c_client *client)
>         struct at24_data *at24 = i2c_get_clientdata(client);
>
>         pm_runtime_disable(&client->dev);
> -       if (!pm_runtime_status_suspended(&client->dev))
> -               regulator_disable(at24->vcc_reg);
> -       pm_runtime_set_suspended(&client->dev);
> +       if (!acpi_dev_state_low_power(&client->dev)) {
> +               if (!pm_runtime_status_suspended(&client->dev))
> +                       regulator_disable(at24->vcc_reg);
> +               pm_runtime_set_suspended(&client->dev);
> +       }
>
>         return 0;
>  }
> @@ -810,6 +818,7 @@ static struct i2c_driver at24_driver = {
>         .probe_new = at24_probe,
>         .remove = at24_remove,
>         .id_table = at24_ids,
> +       .flags = I2C_DRV_FL_ALLOW_LOW_POWER_PROBE,
>  };
>
>  static int __init at24_init(void)
> --
> 2.20.1
>

  parent reply	other threads:[~2020-10-06 11:20 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-03  8:15 [PATCH v8 0/6] Support running driver's probe for a device powered off Sakari Ailus
2020-09-03  8:15 ` [PATCH v8 1/6] i2c: Allow an ACPI driver to manage the device's power state during probe Sakari Ailus
2020-09-03  8:15 ` [PATCH v8 2/6] Documentation: ACPI: Document i2c-allow-low-power-probe _DSD property Sakari Ailus
2020-09-03  8:15 ` [PATCH v8 3/6] ACPI: Add a convenience function to tell a device is in low power state Sakari Ailus
     [not found]   ` <0c2d4728-6e32-ef93-8961-381fe36cfdaa@linux.intel.com>
2020-09-11 13:01     ` Sakari Ailus
2020-09-03  8:15 ` [PATCH v8 4/6] ov5670: Support probe whilst the device is in a " Sakari Ailus
2020-09-03  8:15 ` [PATCH v8 5/6] media: i2c: imx319: Support probe while the device is off Sakari Ailus
2020-09-03  8:15 ` [PATCH v8 6/6] at24: Support probing while off Sakari Ailus
2020-09-09  9:35   ` Bartosz Golaszewski
2020-09-09 11:11     ` Wolfram Sang
2020-09-09 11:56       ` Bartosz Golaszewski
2020-09-09 12:16         ` Sakari Ailus
2020-09-11 12:11         ` Sakari Ailus
2020-10-06 11:20   ` Tomasz Figa [this message]
2020-10-06 11:23     ` Tomasz Figa
2020-09-11 12:49 ` [PATCH v8 0/6] Support running driver's probe for a device powered off Luca Ceresoli
2020-09-11 13:01   ` Sakari Ailus
2020-09-14  7:58     ` Luca Ceresoli
     [not found]       ` <20200914094727.GM26842@paasikivi.fi.intel.com>
2020-09-14 16:49         ` Luca Ceresoli
2020-09-23 11:08           ` Sakari Ailus
2020-09-23 15:37             ` Luca Ceresoli
2020-09-26 12:38         ` Tomasz Figa
2020-09-27 19:39           ` Wolfram Sang
2020-09-27 19:44             ` Tomasz Figa
2020-09-28 14:17               ` Rafael J. Wysocki
2020-09-28 16:49                 ` Tomasz Figa
2020-09-28 20:49                   ` Sakari Ailus
2020-09-26 12:46 ` Tomasz Figa
2021-01-28 23:27 ` [PATCH v9 1/7] ACPI: scan: Obtain device's desired enumeration power state Sakari Ailus
     [not found]   ` <CAJZ5v0hdG1W0D5E6GbrTDiAjMyC0mSgb3Z2WEBy3hhb4iJhDNw@mail.gmail.com>
2021-01-29 16:45     ` Sakari Ailus
2021-01-29 16:57       ` Rafael J. Wysocki
2021-01-29 21:22         ` Sakari Ailus
2021-02-01 11:44           ` Rafael J. Wysocki
2021-01-28 23:27 ` [PATCH v9 2/7] i2c: Allow an ACPI driver to manage the device's power state during probe Sakari Ailus
2021-01-28 23:27 ` [PATCH v9 3/7] Documentation: ACPI: Document _PRE object usage for enum power state Sakari Ailus
2021-01-28 23:27 ` [PATCH v9 4/7] ACPI: Add a convenience function to tell a device is in low " Sakari Ailus
2021-01-28 23:27 ` [PATCH v9 5/7] ov5670: Support probe whilst the device is in a " Sakari Ailus
2021-01-28 23:27 ` [PATCH v9 6/7] media: i2c: imx319: Support probe while the device is off Sakari Ailus
2021-01-29  2:58   ` Bingbu Cao
2021-01-28 23:27 ` [PATCH v9 7/7] at24: Support probing while off Sakari Ailus
     [not found]   ` <CAMpxmJVTPgvxOVdTkmt4VjUnGabNBKauKF_DKtnnkV6O0QYTWA@mail.gmail.com>
     [not found]     ` <20210129121955.GH32460@paasikivi.fi.intel.com>
2021-02-01  8:57       ` Bartosz Golaszewski

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='CAAFQd5DqYHckYA4LSkt5UN35HuOLC=rJhPFHbGu8p-B2vSTrqg@mail.gmail.com' \
    --to=tfiga@chromium.org \
    --cc=bgolaszewski@baylibre.com \
    --cc=bingbu.cao@intel.com \
    --cc=chiranjeevi.rapolu@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hyungwoo.yang@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=rajmohan.mani@intel.com \
    --cc=sakari.ailus@linux.intel.com \
    --cc=senozhatsky@chromium.org \
    --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 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).