9
0
Fork 0

clocksource: bcm2835: use clock-frequency property when available

If the clock frequency is given by a DT property, use this and don't
try to use the clock handle.

Signed-off-by: Enrico Joerns <ejo@pengutronix.de>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Enrico Joerns 2017-03-01 15:31:33 +01:00 committed by Sascha Hauer
parent 26bf828036
commit 6b4f5b6448
1 changed files with 23 additions and 14 deletions

View File

@ -44,24 +44,33 @@ static int bcm2835_cs_probe(struct device_d *dev)
{
struct resource *iores;
static struct clk *stc_clk;
u32 rate;
u32 rate = 0;
int ret;
stc_clk = clk_get(dev, NULL);
if (IS_ERR(stc_clk)) {
ret = PTR_ERR(stc_clk);
dev_err(dev, "clock not found: %d\n", ret);
return ret;
/* try to read rate from DT property first */
if (IS_ENABLED(CONFIG_OFTREE))
of_property_read_u32(dev->device_node, "clock-frequency",
&rate);
/* if rate is still empty, try to get rate from clk */
if (!rate) {
stc_clk = clk_get(dev, NULL);
if (IS_ERR(stc_clk)) {
ret = PTR_ERR(stc_clk);
dev_err(dev, "clock not found: %d\n", ret);
return ret;
}
ret = clk_enable(stc_clk);
if (ret) {
dev_err(dev, "clock failed to enable: %d\n", ret);
clk_put(stc_clk);
return ret;
}
rate = clk_get_rate(stc_clk);
}
ret = clk_enable(stc_clk);
if (ret) {
dev_err(dev, "clock failed to enable: %d\n", ret);
clk_put(stc_clk);
return ret;
}
rate = clk_get_rate(stc_clk);
iores = dev_request_mem_resource(dev, 0);
if (IS_ERR(iores))
return PTR_ERR(iores);