From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sylwester Nawrocki Subject: Re: [PATCH 2/2] i2c-s3c2410: Add stub runtime power management Date: Sat, 21 Jan 2012 16:52:58 +0100 Message-ID: <4F1ADF5A.6000806@gmail.com> References: <1327152527-11364-1-git-send-email-broonie@opensource.wolfsonmicro.com> <1327152527-11364-2-git-send-email-broonie@opensource.wolfsonmicro.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1327152527-11364-2-git-send-email-broonie@opensource.wolfsonmicro.com> Sender: linux-samsung-soc-owner@vger.kernel.org To: Mark Brown , linux-i2c@vger.kernel.org Cc: Jean Delvare , Wolfram Sang , Ben Dooks , linux-samsung-soc List-Id: linux-i2c@vger.kernel.org On 01/21/2012 02:28 PM, Mark Brown wrote: > Add stub runtime_pm calls which go through the flow of enabling and > disabling but don't actually do anything with the device itself as > there's nothing useful we can do. This provides the core PM framework > with information about when the device is idle, enabling chip wide > power savings. > > Signed-off-by: Mark Brown > Acked-by: Heiko Stuebner > --- > drivers/i2c/busses/i2c-s3c2410.c | 10 ++++++++++ > 1 files changed, 10 insertions(+), 0 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c > index e6f982b..737f721 100644 > --- a/drivers/i2c/busses/i2c-s3c2410.c > +++ b/drivers/i2c/busses/i2c-s3c2410.c > @@ -31,6 +31,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -564,6 +565,7 @@ static int s3c24xx_i2c_xfer(struct i2c_adapter *adap, > int retry; > int ret; > > + pm_runtime_get_sync(&adap->dev); > clk_enable(i2c->clk); It looks a bit strange to have pm_runtime* and manual clock control side by side. How about implementing proper runtime_suspend/resume calls and moving clk_enable/disable to these handlers ? It might also make sense to check return value of pm_runtime_get_sync(). > for (retry = 0; retry< adap->retries; retry++) { > @@ -572,6 +574,7 @@ static int s3c24xx_i2c_xfer(struct i2c_adapter *adap, > > if (ret != -EAGAIN) { > clk_disable(i2c->clk); > + pm_runtime_put_sync(&adap->dev); I would go for just pm_runtime_put() here... > return ret; > } > > @@ -581,6 +584,7 @@ static int s3c24xx_i2c_xfer(struct i2c_adapter *adap, > } > > clk_disable(i2c->clk); > + pm_runtime_put_sync(&adap->dev); .. and here as well. > return -EREMOTEIO; > } > > @@ -1013,6 +1017,9 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev) > of_i2c_register_devices(&i2c->adap); > platform_set_drvdata(pdev, i2c); > > + pm_runtime_enable(&pdev->dev); > + pm_runtime_enable(&i2c->adap.dev); Why do we need pm_runtime_enable() on i2c->adap.dev ? AFAIK enabling runtime PM on the platform device only should do. > + > dev_info(&pdev->dev, "%s: S3C I2C adapter\n", dev_name(&i2c->adap.dev)); > clk_disable(i2c->clk); > return 0; > @@ -1047,6 +1054,9 @@ static int s3c24xx_i2c_remove(struct platform_device *pdev) > { > struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev); > > + pm_runtime_disable(&i2c->adap.dev); > + pm_runtime_disable(&pdev->dev); Ditto. > + > s3c24xx_i2c_deregister_cpufreq(i2c); > > i2c_del_adapter(&i2c->adap); -- Thanks, Sylwester