public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: Crt Mori <cmo@melexis.com>
Cc: Jonathan Cameron <jic23@kernel.org>, <linux-iio@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>,
	Andy Shevchenko <andy.shevchenko@gmail.com>
Subject: Re: [PATCH v3 1/3] iio: temperature: mlx90632 Add runtime powermanagement modes
Date: Fri, 16 Sep 2022 16:22:14 +0100	[thread overview]
Message-ID: <20220916162214.00002fd0@huawei.com> (raw)
In-Reply-To: <CAKv63utO6_vPtuCZKSa5MFFKbSYPQbrAGytiiqT+CZ402rO9fA@mail.gmail.com>

On Thu, 15 Sep 2022 16:35:33 +0200
Crt Mori <cmo@melexis.com> wrote:

> > > +     pm_runtime_get_sync(dev);  
> > So, this isn't quite enough.
> >
> > Take a look at what devm_pm_runtime_enable()
> > does as the documentation for
> > pm_runtime_use_autosuspend()
> >
> > I'd suggest using devm_pm_runtime_enable() and
> > an additional callback to turn the device on that
> > is registered after devm_pm_runtime_enable()
> > (so will maintain the ordering you have here).
> >
> >
 Oops. I should have looked for a reply before responding to your v4.

> >  
> I copied this from pressure/bmp280-core driver. I had devm_pm
> originally, but was asked to replace it.

It is a little odd to mix and match, but I think it makes sense in
this case.  Can see why people might disagree (maybe it was me!)

> 
> > > +     pm_runtime_put_noidle(dev);
> > > +     pm_runtime_disable(dev);
> > > +}
> > > +
> > >  static int mlx90632_probe(struct i2c_client *client,
> > >                         const struct i2c_device_id *id)
> > >  {
> > > @@ -902,6 +1132,7 @@ static int mlx90632_probe(struct i2c_client *client,
> > >       mlx90632->client = client;
> > >       mlx90632->regmap = regmap;
> > >       mlx90632->mtyp = MLX90632_MTYP_MEDICAL;
> > > +     mlx90632->powerstatus = MLX90632_PWR_STATUS_HALT;
> > >
> > >       mutex_init(&mlx90632->lock);
> > >       indio_dev->name = id->name;
> > > @@ -961,16 +1192,25 @@ static int mlx90632_probe(struct i2c_client *client,
> > >
> > >       mlx90632->emissivity = 1000;
> > >       mlx90632->object_ambient_temperature = 25000; /* 25 degrees milliCelsius */
> > > +     mlx90632->interaction_ts = jiffies; /* Set initial value */
> > >
> > > -     pm_runtime_disable(&client->dev);
> > > +     pm_runtime_get_noresume(&client->dev);
> > >       ret = pm_runtime_set_active(&client->dev);
> > >       if (ret < 0) {
> > >               mlx90632_sleep(mlx90632);
> > >               return ret;
> > >       }
> > > +
> > >       pm_runtime_enable(&client->dev);
> > >       pm_runtime_set_autosuspend_delay(&client->dev, MLX90632_SLEEP_DELAY_MS);
> > >       pm_runtime_use_autosuspend(&client->dev);
> > > +     pm_runtime_put_autosuspend(&client->dev);
> > > +
> > > +     ret = devm_add_action_or_reset(&client->dev, mlx90632_pm_disable, &client->dev);  
> >
> > Having moved those over to devm you need to also have dropped the calls in remove()
> > (I only noticed this whilst trying to fix the autosuspend issue above.)  
> 
> So in remove, there should be no pm calls, because mlx90632_pm_disable
> function handle all of it? I still keep the sleep call, so that it
> also puts the sensor in lowest state, or I rather keep it only in
> regulator_disable (which should also be called at removal)?

No, you still need some calls, because the devm_pm_runtime_enable()
registers a callback that only does part of what you have - it leaves
the device in an unknown state. If you want to power it up again so
that you can in turn switch it off cleanly (and hence handle the
non runtime pm case nicely) then you still need to do that.

The sleep is still useful because we may not have a controllable regulator.
In that case we want to go to a low power state anyway.

If we do have a controllable regulator, then sleeping followed by hitting
the power button does no harm.


Jonathan


> 
> > > +     if (ret) {
> > > +             mlx90632_sleep(mlx90632);
> > > +             return ret;
> > > +     }
> > >
> > >       return iio_device_register(indio_dev);
> > >  }  
> >  


  reply	other threads:[~2022-09-16 15:22 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-06  9:06 [PATCH v3 0/3] iio: temperature: mlx90632: Add powermanagement cmo
2022-09-06  9:04 ` [PATCH v3 1/3] iio: temperature: mlx90632 Add runtime powermanagement modes cmo
2022-09-06 10:20   ` Andy Shevchenko
2022-09-06 10:51     ` Crt Mori
2022-09-06 12:36       ` Andy Shevchenko
2022-09-06 13:04         ` Crt Mori
2022-09-06 13:16           ` Andy Shevchenko
2022-09-08 12:43             ` Jonathan Cameron
2022-09-15 14:07   ` Jonathan Cameron
2022-09-15 14:35     ` Crt Mori
2022-09-16 15:22       ` Jonathan Cameron [this message]
2022-09-06  9:04 ` [PATCH v3 2/3] iio: temperature: mlx90632 Read sampling frequency cmo
2022-09-06 10:21   ` Andy Shevchenko
2022-09-15 14:09     ` Jonathan Cameron
2022-09-06  9:04 ` [PATCH v3 3/3] iio: temperature: mlx90632 Change return value of sensor measurement channel cmo
2022-09-06 10:23   ` Andy Shevchenko

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=20220916162214.00002fd0@huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=cmo@melexis.com \
    --cc=jic23@kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.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