diff mbox

[v2] i2c: Mark adapter devices with pm_runtime_no_callbacks

Message ID 1429185919-26098-1-git-send-email-ckeepax@opensource.wolfsonmicro.com
State Accepted
Headers show

Commit Message

Charles Keepax April 16, 2015, 12:05 p.m. UTC
Commit 523c5b89640e ("i2c: Remove support for legacy PM") removed the PM
ops from the bus type, which causes the pm operations on the s3c2410
adapter device to fail (-ENOSUPP in rpm_callback). The adapter device
doesn't get bound to a driver and as such can't have its own pm_runtime
callbacks. Previously this was fine as the bus callbacks would have been
used, but now this can cause devices which use PM runtime and are
attached over I2C to fail to resume.

This commit fixes this issue by marking all adapter devices with
pm_runtime_no_callbacks, since they can't have any.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
---

Changes since v1:
 - Simple mark all adapter devices with pm_runtime_no_callbacks in the i2c
   core

Thanks,
Charles

 drivers/i2c/i2c-core.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

Comments

Beata Michalska April 16, 2015, 12:28 p.m. UTC | #1
On 04/16/2015 02:05 PM, Charles Keepax wrote:
> Commit 523c5b89640e ("i2c: Remove support for legacy PM") removed the PM
> ops from the bus type, which causes the pm operations on the s3c2410
> adapter device to fail (-ENOSUPP in rpm_callback). The adapter device
> doesn't get bound to a driver and as such can't have its own pm_runtime
> callbacks. Previously this was fine as the bus callbacks would have been
> used, but now this can cause devices which use PM runtime and are
> attached over I2C to fail to resume.
>
> This commit fixes this issue by marking all adapter devices with
> pm_runtime_no_callbacks, since they can't have any.
>
> Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
> ---
>
> Changes since v1:
>  - Simple mark all adapter devices with pm_runtime_no_callbacks in the i2c
>    core
>
> Thanks,
> Charles
>
>  drivers/i2c/i2c-core.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
> index 1672e6b..eac3331 100644
> --- a/drivers/i2c/i2c-core.c
> +++ b/drivers/i2c/i2c-core.c
> @@ -1410,6 +1410,8 @@ static int i2c_register_adapter(struct i2c_adapter *adap)
>  
>  	dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
>  
> +	pm_runtime_no_callbacks(&adap->dev);
> +
>  #ifdef CONFIG_I2C_COMPAT
>  	res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
>  				       adap->dev.parent);

Thereis at least one more casewhen an I2C device fails to resume due
to bus callbacks being dropped(like fimc-is-i2c driver for exynos4-is,
the same scenario),  so I'm glad to see  it's being handled in on place
-it saves the trouble.

BR
Beata

--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Wolfram Sang April 22, 2015, 7:54 a.m. UTC | #2
On Thu, Apr 16, 2015 at 01:05:19PM +0100, Charles Keepax wrote:
> Commit 523c5b89640e ("i2c: Remove support for legacy PM") removed the PM
> ops from the bus type, which causes the pm operations on the s3c2410
> adapter device to fail (-ENOSUPP in rpm_callback). The adapter device
> doesn't get bound to a driver and as such can't have its own pm_runtime
> callbacks. Previously this was fine as the bus callbacks would have been
> used, but now this can cause devices which use PM runtime and are
> attached over I2C to fail to resume.
> 
> This commit fixes this issue by marking all adapter devices with
> pm_runtime_no_callbacks, since they can't have any.
> 
> Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>

Applied to for-current, thanks!

Will push out somewhat later today. Lars-Peter, if you'd like to donate
some ack/review tag until then, this would be much appreciated.
Wolfram Sang April 22, 2015, 7:55 a.m. UTC | #3
On Thu, Apr 16, 2015 at 02:28:02PM +0200, Beata Michalska wrote:
> On 04/16/2015 02:05 PM, Charles Keepax wrote:
> > Commit 523c5b89640e ("i2c: Remove support for legacy PM") removed the PM
> > ops from the bus type, which causes the pm operations on the s3c2410
> > adapter device to fail (-ENOSUPP in rpm_callback). The adapter device
> > doesn't get bound to a driver and as such can't have its own pm_runtime
> > callbacks. Previously this was fine as the bus callbacks would have been
> > used, but now this can cause devices which use PM runtime and are
> > attached over I2C to fail to resume.
> >
> > This commit fixes this issue by marking all adapter devices with
> > pm_runtime_no_callbacks, since they can't have any.
> >
> > Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
> 
> Thereis at least one more casewhen an I2C device fails to resume due
> to bus callbacks being dropped(like fimc-is-i2c driver for exynos4-is,
> the same scenario),  so I'm glad to see  it's being handled in on place
> -it saves the trouble.

Thanks for the confirmation! If you could also add a formal 'Acked-by'
next time, this would help me because patchwork collects them for me
automatically.
diff mbox

Patch

diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 1672e6b..eac3331 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1410,6 +1410,8 @@  static int i2c_register_adapter(struct i2c_adapter *adap)
 
 	dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
 
+	pm_runtime_no_callbacks(&adap->dev);
+
 #ifdef CONFIG_I2C_COMPAT
 	res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
 				       adap->dev.parent);