aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>2019-08-26 13:26:21 -0400
committerMarc Kleine-Budde <mkl@pengutronix.de>2019-09-03 04:23:57 -0400
commitb4cb76961c953cde1c60f52d2b6d434672da82f8 (patch)
tree3e331713110dec05b3676d667cd52490620fd84d
parentf6cae800bfdb6711f0d45af98643a944998be6f2 (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.c30
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
1104out_clk: 1100out_clk:
1105 if (!IS_ERR(clk)) 1101 clk_disable_unprepare(clk);
1106 clk_disable_unprepare(clk);
1107 1102
1108out_free: 1103out_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