diff options
author | Enrico Joerns <ejo@pengutronix.de> | 2017-03-01 15:31:33 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-03-02 09:11:24 +0100 |
commit | 6b4f5b64486b58316ad4cf15f9907ead711f7bc9 (patch) | |
tree | 9b84282220e3407e832e93d90ee0d29ac7c28e73 /drivers/clocksource | |
parent | 26bf82803646717e8ef2852f6635a463e4d31ffd (diff) | |
download | barebox-6b4f5b64486b58316ad4cf15f9907ead711f7bc9.tar.gz barebox-6b4f5b64486b58316ad4cf15f9907ead711f7bc9.tar.xz |
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>
Diffstat (limited to 'drivers/clocksource')
-rw-r--r-- | drivers/clocksource/bcm2835.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/drivers/clocksource/bcm2835.c b/drivers/clocksource/bcm2835.c index b5831d5f10..9130a4b14f 100644 --- a/drivers/clocksource/bcm2835.c +++ b/drivers/clocksource/bcm2835.c @@ -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; + } - 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); } - rate = clk_get_rate(stc_clk); iores = dev_request_mem_resource(dev, 0); if (IS_ERR(iores)) return PTR_ERR(iores); |