Commit 0d8fb599 authored by Wolfram Sang's avatar Wolfram Sang

i2c: ocores: rework clk code to handle NULL cookie

For, !HAVE_CLK the clk API returns a NULL cookie. Rework the
initialization code to handle that. If clk_get_rate() delivers 0, we use
the fallback mechanisms. The patch is pretty easy when ignoring white
space issues (git diff -b).
Suggested-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
Tested-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent b4ad0510
...@@ -354,20 +354,24 @@ static int ocores_i2c_of_probe(struct platform_device *pdev, ...@@ -354,20 +354,24 @@ static int ocores_i2c_of_probe(struct platform_device *pdev,
i2c->ip_clock_khz = clk_get_rate(i2c->clk) / 1000; i2c->ip_clock_khz = clk_get_rate(i2c->clk) / 1000;
if (clock_frequency_present) if (clock_frequency_present)
i2c->bus_clock_khz = clock_frequency / 1000; i2c->bus_clock_khz = clock_frequency / 1000;
} else if (of_property_read_u32(np, "opencores,ip-clock-frequency", }
&val)) {
if (!clock_frequency_present) { if (i2c->ip_clock_khz == 0) {
dev_err(&pdev->dev, if (of_property_read_u32(np, "opencores,ip-clock-frequency",
"Missing required parameter 'opencores,ip-clock-frequency'\n"); &val)) {
return -ENODEV; if (!clock_frequency_present) {
dev_err(&pdev->dev,
"Missing required parameter 'opencores,ip-clock-frequency'\n");
return -ENODEV;
}
i2c->ip_clock_khz = clock_frequency / 1000;
dev_warn(&pdev->dev,
"Deprecated usage of the 'clock-frequency' property, please update to 'opencores,ip-clock-frequency'\n");
} else {
i2c->ip_clock_khz = val / 1000;
if (clock_frequency_present)
i2c->bus_clock_khz = clock_frequency / 1000;
} }
i2c->ip_clock_khz = clock_frequency / 1000;
dev_warn(&pdev->dev,
"Deprecated usage of the 'clock-frequency' property, please update to 'opencores,ip-clock-frequency'\n");
} else {
i2c->ip_clock_khz = val / 1000;
if (clock_frequency_present)
i2c->bus_clock_khz = clock_frequency / 1000;
} }
of_property_read_u32(pdev->dev.of_node, "reg-io-width", of_property_read_u32(pdev->dev.of_node, "reg-io-width",
...@@ -518,6 +522,7 @@ static int ocores_i2c_resume(struct device *dev) ...@@ -518,6 +522,7 @@ static int ocores_i2c_resume(struct device *dev)
struct ocores_i2c *i2c = dev_get_drvdata(dev); struct ocores_i2c *i2c = dev_get_drvdata(dev);
if (!IS_ERR(i2c->clk)) { if (!IS_ERR(i2c->clk)) {
unsigned long rate;
int ret = clk_prepare_enable(i2c->clk); int ret = clk_prepare_enable(i2c->clk);
if (ret) { if (ret) {
...@@ -525,7 +530,9 @@ static int ocores_i2c_resume(struct device *dev) ...@@ -525,7 +530,9 @@ static int ocores_i2c_resume(struct device *dev)
"clk_prepare_enable failed: %d\n", ret); "clk_prepare_enable failed: %d\n", ret);
return ret; return ret;
} }
i2c->ip_clock_khz = clk_get_rate(i2c->clk) / 1000; rate = clk_get_rate(i2c->clk) / 1000;
if (rate)
i2c->ip_clock_khz = rate;
} }
return ocores_init(dev, i2c); return ocores_init(dev, i2c);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment