[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240803164428.50fdd15c@jic23-huawei>
Date: Sat, 3 Aug 2024 16:44:28 +0100
From: Jonathan Cameron <jic23@...nel.org>
To: Denis Benato <benato.denis96@...il.com>
Cc: Lars-Peter Clausen <lars@...afoo.de>, Jagath Jog J
<jagathjog1996@...il.com>, linux-iio@...r.kernel.org,
linux-kernel@...r.kernel.org, "Luke D . Jones" <luke@...nes.dev>, Jonathan
LoBue <jlobue10@...il.com>
Subject: Re: [PATCH v2 2/2] iio: bmi323: suspend and resume triggering on
relevant pm operations
On Sat, 27 Jul 2024 14:30:34 +0200
Denis Benato <benato.denis96@...il.com> wrote:
> Prevent triggers from stop working after the device has entered sleep:
> use iio_device_suspend_triggering and iio_device_resume_triggering helpers.
Hi Denis,
I'd got it into my head this was about main suspend / resume, but
it's runtime PM. I assume the s2idle uses only that level which is
interesting.
Anyhow, solution seems safe. We might be able to do something nicer
in the long run as potentially we could have the trigger driver
notified when all consumers have entered this state at which point it
could stop generating triggers at all.
Anyhow, that's a job for when we actually care about it.
Applied to the togreg branch of iio.git and pushed out as testing
for 0-day to poke at it.
For now I'm not keen to see this pushed into drivers where we don't
know if anyone is running into this particular situation. We can
reevaluate that if we start getting lots of reports of this.
I'm also not going to rush this in as a fix. We can consider backporting
it once it's been in mainline for a bit and no side effects have
shown up.
Thanks,
Jonathan
>
> Signed-off-by: Denis Benato <benato.denis96@...il.com>
> ---
> drivers/iio/imu/bmi323/bmi323.h | 1 +
> drivers/iio/imu/bmi323/bmi323_core.c | 23 +++++++++++++++++++++++
> drivers/iio/imu/bmi323/bmi323_i2c.c | 1 +
> drivers/iio/imu/bmi323/bmi323_spi.c | 1 +
> 4 files changed, 26 insertions(+)
>
> diff --git a/drivers/iio/imu/bmi323/bmi323.h b/drivers/iio/imu/bmi323/bmi323.h
> index dff126d41658..209bccb1f335 100644
> --- a/drivers/iio/imu/bmi323/bmi323.h
> +++ b/drivers/iio/imu/bmi323/bmi323.h
> @@ -205,5 +205,6 @@
> struct device;
> int bmi323_core_probe(struct device *dev);
> extern const struct regmap_config bmi323_regmap_config;
> +extern const struct dev_pm_ops bmi323_core_pm_ops;
>
> #endif
> diff --git a/drivers/iio/imu/bmi323/bmi323_core.c b/drivers/iio/imu/bmi323/bmi323_core.c
> index d708d1fe3e42..4b2b211a3e88 100644
> --- a/drivers/iio/imu/bmi323/bmi323_core.c
> +++ b/drivers/iio/imu/bmi323/bmi323_core.c
> @@ -2121,6 +2121,29 @@ int bmi323_core_probe(struct device *dev)
> }
> EXPORT_SYMBOL_NS_GPL(bmi323_core_probe, IIO_BMI323);
>
> +#if defined(CONFIG_PM)
> +static int bmi323_core_runtime_suspend(struct device *dev)
> +{
> + struct iio_dev *indio_dev = dev_get_drvdata(dev);
> +
> + return iio_device_suspend_triggering(indio_dev);
> +}
> +
> +static int bmi323_core_runtime_resume(struct device *dev)
> +{
> + struct iio_dev *indio_dev = dev_get_drvdata(dev);
> +
> + return iio_device_resume_triggering(indio_dev);
> +}
> +
> +#endif
> +
> +const struct dev_pm_ops bmi323_core_pm_ops = {
> + SET_RUNTIME_PM_OPS(bmi323_core_runtime_suspend,
> + bmi323_core_runtime_resume, NULL)
> +};
> +EXPORT_SYMBOL_NS_GPL(bmi323_core_pm_ops, IIO_BMI323);
> +
> MODULE_DESCRIPTION("Bosch BMI323 IMU driver");
> MODULE_AUTHOR("Jagath Jog J <jagathjog1996@...il.com>");
> MODULE_LICENSE("GPL");
> diff --git a/drivers/iio/imu/bmi323/bmi323_i2c.c b/drivers/iio/imu/bmi323/bmi323_i2c.c
> index 52140bf05765..057342f4f816 100644
> --- a/drivers/iio/imu/bmi323/bmi323_i2c.c
> +++ b/drivers/iio/imu/bmi323/bmi323_i2c.c
> @@ -128,6 +128,7 @@ MODULE_DEVICE_TABLE(of, bmi323_of_i2c_match);
> static struct i2c_driver bmi323_i2c_driver = {
> .driver = {
> .name = "bmi323",
> + .pm = pm_ptr(&bmi323_core_pm_ops),
> .of_match_table = bmi323_of_i2c_match,
> .acpi_match_table = bmi323_acpi_match,
> },
> diff --git a/drivers/iio/imu/bmi323/bmi323_spi.c b/drivers/iio/imu/bmi323/bmi323_spi.c
> index 7b1e8127d0dd..487d4ee05246 100644
> --- a/drivers/iio/imu/bmi323/bmi323_spi.c
> +++ b/drivers/iio/imu/bmi323/bmi323_spi.c
> @@ -79,6 +79,7 @@ MODULE_DEVICE_TABLE(of, bmi323_of_spi_match);
> static struct spi_driver bmi323_spi_driver = {
> .driver = {
> .name = "bmi323",
> + .pm = pm_ptr(&bmi323_core_pm_ops),
> .of_match_table = bmi323_of_spi_match,
> },
> .probe = bmi323_spi_probe,
Powered by blists - more mailing lists