Skip to content

Commit

Permalink
i2c-s3c2410: Enable i2c clock only when doing some transfert
Browse files Browse the repository at this point in the history
This patch modify the s3c2410 i2c driver behaviour to enable the
i2c clock only when needed. I'm not sure if this has a big impact
on power usage but at least it's fixing a bug with the uda1380
codec which needs to be hard reset'ed if the i2c clock is enabled
before it's powered on (at least on h1940).

Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
  • Loading branch information
Arnaud Patard (Rtp) authored and Ben Dooks committed Oct 21, 2010
1 parent f6f94e2 commit d2360b8
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/i2c/busses/i2c-s3c2410.c
Original file line number Diff line number Diff line change
Expand Up @@ -555,18 +555,23 @@ static int s3c24xx_i2c_xfer(struct i2c_adapter *adap,
int retry;
int ret;

clk_enable(i2c->clk);

for (retry = 0; retry < adap->retries; retry++) {

ret = s3c24xx_i2c_doxfer(i2c, msgs, num);

if (ret != -EAGAIN)
if (ret != -EAGAIN) {
clk_disable(i2c->clk);
return ret;
}

dev_dbg(i2c->dev, "Retrying transmission (%d)\n", retry);

udelay(100);
}

clk_disable(i2c->clk);
return -EREMOTEIO;
}

Expand Down Expand Up @@ -911,6 +916,7 @@ static int s3c24xx_i2c_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, i2c);

dev_info(&pdev->dev, "%s: S3C I2C adapter\n", dev_name(&i2c->adap.dev));
clk_disable(i2c->clk);
return 0;

err_cpufreq:
Expand Down Expand Up @@ -978,7 +984,9 @@ static int s3c24xx_i2c_resume(struct device *dev)
struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);

i2c->suspended = 0;
clk_enable(i2c->clk);
s3c24xx_i2c_init(i2c);
clk_disable(i2c->clk);

return 0;
}
Expand Down

0 comments on commit d2360b8

Please sign in to comment.