* [PATCH v6 0/1] i2c: Restore power status of device if probe fails
@ 2022-11-14 12:20 Ricardo Ribalda
2022-11-14 12:20 ` [PATCH v6 1/1] i2c: Restore initial power state " Ricardo Ribalda
0 siblings, 1 reply; 4+ messages in thread
From: Ricardo Ribalda @ 2022-11-14 12:20 UTC (permalink / raw)
To: Rafael J. Wysocki, Tomasz Figa, Mika Westerberg, Wolfram Sang
Cc: Hidenori Kobayashi, stable, Sergey Senozhatsky, linux-kernel,
Hidenori Kobayashi, Sakari Ailus, Ricardo Ribalda, linux-i2c
We have discovered that some power lines were always on even if the devices
on that power line was not used.
This happens because we failed to probe a device on the i2c bus, and the
ACPI Power Resource were never turned off.
This patch tries to fix this issue.
To: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Wolfram Sang <wsa@kernel.org>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
To: Tomasz Figa <tfiga@chromium.org>
To: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: Hidenori Kobayashi <hidenorik@google.com>
Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: linux-i2c@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
---
Changes in v6:
- Add Reviewed-by: Hidenori (Thanks!).
- Set device always off at remove.
- Link to v5: https://lore.kernel.org/r/20221109-i2c-waive-v5-0-2839667f8f6a@chromium.org
Changes in v5:
- Add Cc: stable
- Add Reviewed-by Sakary (Thanks!).
- Renamed turn-off as power-off, in the name of consistency (Thanks Sergey!)
- Link to v4: https://lore.kernel.org/r/20221109-i2c-waive-v4-0-e4496462833b@chromium.org
Changes in v4:
- Rename full_power to do_power_on.
- Link to v3: https://lore.kernel.org/r/20221109-i2c-waive-v3-0-d8651cb4b88d@chromium.org
Changes in v3:
- Introduce full_power variable to make more clear what we are doing.
- Link to v2: https://lore.kernel.org/r/20221109-i2c-waive-v2-0-07550bf2dacc@chromium.org
Changes in v2:
- Cover also device remove
- Link to v1: https://lore.kernel.org/r/20221109-i2c-waive-v1-0-ed70a99b990d@chromium.org
---
Ricardo Ribalda (1):
i2c: Restore initial power state if probe fails
drivers/i2c/i2c-core-base.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
---
base-commit: f141df371335645ce29a87d9683a3f79fba7fd67
change-id: 20221109-i2c-waive-ae97fea1f1b5
Best regards,
--
Ricardo Ribalda <ribalda@chromium.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v6 1/1] i2c: Restore initial power state if probe fails
2022-11-14 12:20 [PATCH v6 0/1] i2c: Restore power status of device if probe fails Ricardo Ribalda
@ 2022-11-14 12:20 ` Ricardo Ribalda
2022-11-14 12:42 ` Mika Westerberg
2022-11-14 19:47 ` Wolfram Sang
0 siblings, 2 replies; 4+ messages in thread
From: Ricardo Ribalda @ 2022-11-14 12:20 UTC (permalink / raw)
To: Rafael J. Wysocki, Tomasz Figa, Mika Westerberg, Wolfram Sang
Cc: Hidenori Kobayashi, stable, Sergey Senozhatsky, linux-kernel,
Hidenori Kobayashi, Sakari Ailus, Ricardo Ribalda, linux-i2c
A driver that supports I2C_DRV_ACPI_WAIVE_D0_PROBE is not expected to
power off a device that it has not powered on previously.
For devices operating in "full_power" mode, the first call to
`i2c_acpi_waive_d0_probe` will return 0, which means that the device
will be turned on with `dev_pm_domain_attach`.
If probe fails the second call to `i2c_acpi_waive_d0_probe` will
return 1, which means that the device will not be turned off.
This is, it will be left in a different power state. Lets fix it.
Reviewed-by: Hidenori Kobayashi <hidenorik@chromium.org>
Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: stable@vger.kernel.org
Fixes: b18c1ad685d9 ("i2c: Allow an ACPI driver to manage the device's power state during probe")
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index b4edf10e8fd0..7539b0740351 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -467,6 +467,7 @@ static int i2c_device_probe(struct device *dev)
{
struct i2c_client *client = i2c_verify_client(dev);
struct i2c_driver *driver;
+ bool do_power_on;
int status;
if (!client)
@@ -545,8 +546,8 @@ static int i2c_device_probe(struct device *dev)
if (status < 0)
goto err_clear_wakeup_irq;
- status = dev_pm_domain_attach(&client->dev,
- !i2c_acpi_waive_d0_probe(dev));
+ do_power_on = !i2c_acpi_waive_d0_probe(dev);
+ status = dev_pm_domain_attach(&client->dev, do_power_on);
if (status)
goto err_clear_wakeup_irq;
@@ -585,7 +586,7 @@ static int i2c_device_probe(struct device *dev)
err_release_driver_resources:
devres_release_group(&client->dev, client->devres_group_id);
err_detach_pm_domain:
- dev_pm_domain_detach(&client->dev, !i2c_acpi_waive_d0_probe(dev));
+ dev_pm_domain_detach(&client->dev, do_power_on);
err_clear_wakeup_irq:
dev_pm_clear_wake_irq(&client->dev);
device_init_wakeup(&client->dev, false);
@@ -610,7 +611,7 @@ static void i2c_device_remove(struct device *dev)
devres_release_group(&client->dev, client->devres_group_id);
- dev_pm_domain_detach(&client->dev, !i2c_acpi_waive_d0_probe(dev));
+ dev_pm_domain_detach(&client->dev, true);
dev_pm_clear_wake_irq(&client->dev);
device_init_wakeup(&client->dev, false);
--
b4 0.11.0-dev-d93f8
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v6 1/1] i2c: Restore initial power state if probe fails
2022-11-14 12:20 ` [PATCH v6 1/1] i2c: Restore initial power state " Ricardo Ribalda
@ 2022-11-14 12:42 ` Mika Westerberg
2022-11-14 19:47 ` Wolfram Sang
1 sibling, 0 replies; 4+ messages in thread
From: Mika Westerberg @ 2022-11-14 12:42 UTC (permalink / raw)
To: Ricardo Ribalda
Cc: Rafael J. Wysocki, Tomasz Figa, Wolfram Sang, Hidenori Kobayashi,
stable, Sergey Senozhatsky, linux-kernel, Hidenori Kobayashi,
Sakari Ailus, linux-i2c
On Mon, Nov 14, 2022 at 01:20:34PM +0100, Ricardo Ribalda wrote:
> A driver that supports I2C_DRV_ACPI_WAIVE_D0_PROBE is not expected to
> power off a device that it has not powered on previously.
>
> For devices operating in "full_power" mode, the first call to
> `i2c_acpi_waive_d0_probe` will return 0, which means that the device
> will be turned on with `dev_pm_domain_attach`.
>
> If probe fails the second call to `i2c_acpi_waive_d0_probe` will
> return 1, which means that the device will not be turned off.
> This is, it will be left in a different power state. Lets fix it.
>
> Reviewed-by: Hidenori Kobayashi <hidenorik@chromium.org>
> Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
> Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v6 1/1] i2c: Restore initial power state if probe fails
2022-11-14 12:20 ` [PATCH v6 1/1] i2c: Restore initial power state " Ricardo Ribalda
2022-11-14 12:42 ` Mika Westerberg
@ 2022-11-14 19:47 ` Wolfram Sang
1 sibling, 0 replies; 4+ messages in thread
From: Wolfram Sang @ 2022-11-14 19:47 UTC (permalink / raw)
To: Ricardo Ribalda
Cc: Rafael J. Wysocki, Tomasz Figa, Mika Westerberg,
Hidenori Kobayashi, stable, Sergey Senozhatsky, linux-kernel,
Hidenori Kobayashi, Sakari Ailus, linux-i2c
[-- Attachment #1: Type: text/plain, Size: 1009 bytes --]
wOn Mon, Nov 14, 2022 at 01:20:34PM +0100, Ricardo Ribalda wrote:
> A driver that supports I2C_DRV_ACPI_WAIVE_D0_PROBE is not expected to
> power off a device that it has not powered on previously.
>
> For devices operating in "full_power" mode, the first call to
> `i2c_acpi_waive_d0_probe` will return 0, which means that the device
> will be turned on with `dev_pm_domain_attach`.
>
> If probe fails the second call to `i2c_acpi_waive_d0_probe` will
> return 1, which means that the device will not be turned off.
> This is, it will be left in a different power state. Lets fix it.
>
> Reviewed-by: Hidenori Kobayashi <hidenorik@chromium.org>
> Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
> Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> Cc: stable@vger.kernel.org
> Fixes: b18c1ad685d9 ("i2c: Allow an ACPI driver to manage the device's power state during probe")
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Applied to for-current, thanks!
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-11-14 19:48 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-14 12:20 [PATCH v6 0/1] i2c: Restore power status of device if probe fails Ricardo Ribalda
2022-11-14 12:20 ` [PATCH v6 1/1] i2c: Restore initial power state " Ricardo Ribalda
2022-11-14 12:42 ` Mika Westerberg
2022-11-14 19:47 ` Wolfram Sang
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).