Commit 3a1ae63a authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Marc Kleine-Budde

can: hi311x: hi3110_can_probe(): try to get crystal clock rate from property

In some configurations, mainly ACPI-based, the clock frequency of the
device is supplied by very well established 'clock-frequency'
property. Hence, try to get it from the property at last if no other
providers are available.

Link: https://lore.kernel.org/all/20211206165542.69887-2-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 369cf4e6
...@@ -830,17 +830,26 @@ static int hi3110_can_probe(struct spi_device *spi) ...@@ -830,17 +830,26 @@ static int hi3110_can_probe(struct spi_device *spi)
{ {
const struct of_device_id *of_id = of_match_device(hi3110_of_match, const struct of_device_id *of_id = of_match_device(hi3110_of_match,
&spi->dev); &spi->dev);
struct device *dev = &spi->dev;
struct net_device *net; struct net_device *net;
struct hi3110_priv *priv; struct hi3110_priv *priv;
struct clk *clk; struct clk *clk;
int freq, ret; u32 freq;
int ret;
clk = devm_clk_get_optional(&spi->dev, NULL); clk = devm_clk_get_optional(&spi->dev, NULL);
if (IS_ERR(clk)) { if (IS_ERR(clk)) {
dev_err(&spi->dev, "no CAN clock source defined\n"); dev_err(&spi->dev, "no CAN clock source defined\n");
return PTR_ERR(clk); return PTR_ERR(clk);
} }
freq = clk_get_rate(clk);
if (clk) {
freq = clk_get_rate(clk);
} else {
ret = device_property_read_u32(dev, "clock-frequency", &freq);
if (ret)
return dev_err_probe(dev, ret, "Failed to get clock-frequency!\n");
}
/* Sanity check */ /* Sanity check */
if (freq > 40000000) if (freq > 40000000)
......
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