diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2019-08-26 13:26:21 -0400 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2019-09-03 04:23:57 -0400 |
commit | b4cb76961c953cde1c60f52d2b6d434672da82f8 (patch) | |
tree | 3e331713110dec05b3676d667cd52490620fd84d | |
parent | f6cae800bfdb6711f0d45af98643a944998be6f2 (diff) |
can: mcp251x: Use devm_clk_get_optional() to get the input clock
Simplify the code which fetches the input clock by using
devm_clk_get_optional(). This comes with a small functional change: previously
all errors were ignored when platform data is present. Now all errors are
treated as errors. If no input clock is present devm_clk_get_optional() will
return NULL instead of an error which matches the behavior of the old code.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
-rw-r--r-- | drivers/net/can/spi/mcp251x.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c index 6e5831308c70..b5d70826a186 100644 --- a/drivers/net/can/spi/mcp251x.c +++ b/drivers/net/can/spi/mcp251x.c | |||
@@ -994,15 +994,13 @@ static int mcp251x_can_probe(struct spi_device *spi) | |||
994 | struct clk *clk; | 994 | struct clk *clk; |
995 | int freq, ret; | 995 | int freq, ret; |
996 | 996 | ||
997 | clk = devm_clk_get(&spi->dev, NULL); | 997 | clk = devm_clk_get_optional(&spi->dev, NULL); |
998 | if (IS_ERR(clk)) { | 998 | if (IS_ERR(clk)) |
999 | if (pdata) | 999 | return PTR_ERR(clk); |
1000 | freq = pdata->oscillator_frequency; | 1000 | |
1001 | else | 1001 | freq = clk_get_rate(clk); |
1002 | return PTR_ERR(clk); | 1002 | if (freq == 0 && pdata) |
1003 | } else { | 1003 | freq = pdata->oscillator_frequency; |
1004 | freq = clk_get_rate(clk); | ||
1005 | } | ||
1006 | 1004 | ||
1007 | /* Sanity check */ | 1005 | /* Sanity check */ |
1008 | if (freq < 1000000 || freq > 25000000) | 1006 | if (freq < 1000000 || freq > 25000000) |
@@ -1013,11 +1011,9 @@ static int mcp251x_can_probe(struct spi_device *spi) | |||
1013 | if (!net) | 1011 | if (!net) |
1014 | return -ENOMEM; | 1012 | return -ENOMEM; |
1015 | 1013 | ||
1016 | if (!IS_ERR(clk)) { | 1014 | ret = clk_prepare_enable(clk); |
1017 | ret = clk_prepare_enable(clk); | 1015 | if (ret) |
1018 | if (ret) | 1016 | goto out_free; |
1019 | goto out_free; | ||
1020 | } | ||
1021 | 1017 | ||
1022 | net->netdev_ops = &mcp251x_netdev_ops; | 1018 | net->netdev_ops = &mcp251x_netdev_ops; |
1023 | net->flags |= IFF_ECHO; | 1019 | net->flags |= IFF_ECHO; |
@@ -1102,8 +1098,7 @@ error_probe: | |||
1102 | mcp251x_power_enable(priv->power, 0); | 1098 | mcp251x_power_enable(priv->power, 0); |
1103 | 1099 | ||
1104 | out_clk: | 1100 | out_clk: |
1105 | if (!IS_ERR(clk)) | 1101 | clk_disable_unprepare(clk); |
1106 | clk_disable_unprepare(clk); | ||
1107 | 1102 | ||
1108 | out_free: | 1103 | out_free: |
1109 | free_candev(net); | 1104 | free_candev(net); |
@@ -1121,8 +1116,7 @@ static int mcp251x_can_remove(struct spi_device *spi) | |||
1121 | 1116 | ||
1122 | mcp251x_power_enable(priv->power, 0); | 1117 | mcp251x_power_enable(priv->power, 0); |
1123 | 1118 | ||
1124 | if (!IS_ERR(priv->clk)) | 1119 | clk_disable_unprepare(priv->clk); |
1125 | clk_disable_unprepare(priv->clk); | ||
1126 | 1120 | ||
1127 | free_candev(net); | 1121 | free_candev(net); |
1128 | 1122 | ||