diff options
-rw-r--r-- | drivers/i2c/busses/i2c-rcar.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c index fd4cd7f6b3ef..57169d23aa3b 100644 --- a/drivers/i2c/busses/i2c-rcar.c +++ b/drivers/i2c/busses/i2c-rcar.c | |||
@@ -110,6 +110,7 @@ struct rcar_i2c_priv { | |||
110 | void __iomem *io; | 110 | void __iomem *io; |
111 | struct i2c_adapter adap; | 111 | struct i2c_adapter adap; |
112 | struct i2c_msg *msg; | 112 | struct i2c_msg *msg; |
113 | struct clk *clk; | ||
113 | 114 | ||
114 | spinlock_t lock; | 115 | spinlock_t lock; |
115 | wait_queue_head_t wait; | 116 | wait_queue_head_t wait; |
@@ -226,18 +227,12 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, | |||
226 | u32 bus_speed, | 227 | u32 bus_speed, |
227 | struct device *dev) | 228 | struct device *dev) |
228 | { | 229 | { |
229 | struct clk *clkp = clk_get(dev, NULL); | ||
230 | u32 scgd, cdf; | 230 | u32 scgd, cdf; |
231 | u32 round, ick; | 231 | u32 round, ick; |
232 | u32 scl; | 232 | u32 scl; |
233 | u32 cdf_width; | 233 | u32 cdf_width; |
234 | unsigned long rate; | 234 | unsigned long rate; |
235 | 235 | ||
236 | if (IS_ERR(clkp)) { | ||
237 | dev_err(dev, "couldn't get clock\n"); | ||
238 | return PTR_ERR(clkp); | ||
239 | } | ||
240 | |||
241 | switch (priv->devtype) { | 236 | switch (priv->devtype) { |
242 | case I2C_RCAR_GEN1: | 237 | case I2C_RCAR_GEN1: |
243 | cdf_width = 2; | 238 | cdf_width = 2; |
@@ -265,7 +260,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, | |||
265 | * clkp : peripheral_clk | 260 | * clkp : peripheral_clk |
266 | * F[] : integer up-valuation | 261 | * F[] : integer up-valuation |
267 | */ | 262 | */ |
268 | rate = clk_get_rate(clkp); | 263 | rate = clk_get_rate(priv->clk); |
269 | cdf = rate / 20000000; | 264 | cdf = rate / 20000000; |
270 | if (cdf >= 1 << cdf_width) { | 265 | if (cdf >= 1 << cdf_width) { |
271 | dev_err(dev, "Input clock %lu too high\n", rate); | 266 | dev_err(dev, "Input clock %lu too high\n", rate); |
@@ -307,7 +302,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, | |||
307 | 302 | ||
308 | scgd_find: | 303 | scgd_find: |
309 | dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n", | 304 | dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n", |
310 | scl, bus_speed, clk_get_rate(clkp), round, cdf, scgd); | 305 | scl, bus_speed, clk_get_rate(priv->clk), round, cdf, scgd); |
311 | 306 | ||
312 | /* | 307 | /* |
313 | * keep icccr value | 308 | * keep icccr value |
@@ -663,6 +658,12 @@ static int rcar_i2c_probe(struct platform_device *pdev) | |||
663 | return -ENOMEM; | 658 | return -ENOMEM; |
664 | } | 659 | } |
665 | 660 | ||
661 | priv->clk = devm_clk_get(dev, NULL); | ||
662 | if (IS_ERR(priv->clk)) { | ||
663 | dev_err(dev, "cannot get clock\n"); | ||
664 | return PTR_ERR(priv->clk); | ||
665 | } | ||
666 | |||
666 | bus_speed = 100000; /* default 100 kHz */ | 667 | bus_speed = 100000; /* default 100 kHz */ |
667 | ret = of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed); | 668 | ret = of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed); |
668 | if (ret < 0 && pdata && pdata->bus_speed) | 669 | if (ret < 0 && pdata && pdata->bus_speed) |