aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegor Yefremov <yegorslists@googlemail.com>2017-01-18 05:35:57 -0500
committerMarc Kleine-Budde <mkl@pengutronix.de>2017-01-18 07:03:15 -0500
commitbefa60113ce7ea270cb51eada28443ca2756f480 (patch)
tree3d400732209054a870e2a82c385e5f4c59394402
parentc97c52be78b8463ac5407f1cf1f22f8f6cf93a37 (diff)
can: ti_hecc: add missing prepare and unprepare of the clock
In order to make the driver work with the common clock framework, this patch converts the clk_enable()/clk_disable() to clk_prepare_enable()/clk_disable_unprepare(). Also add error checking for clk_prepare_enable(). Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com> Cc: linux-stable <stable@vger.kernel.org> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
-rw-r--r--drivers/net/can/ti_hecc.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c
index 680d1ff07a55..6749b1829469 100644
--- a/drivers/net/can/ti_hecc.c
+++ b/drivers/net/can/ti_hecc.c
@@ -948,7 +948,12 @@ static int ti_hecc_probe(struct platform_device *pdev)
948 netif_napi_add(ndev, &priv->napi, ti_hecc_rx_poll, 948 netif_napi_add(ndev, &priv->napi, ti_hecc_rx_poll,
949 HECC_DEF_NAPI_WEIGHT); 949 HECC_DEF_NAPI_WEIGHT);
950 950
951 clk_enable(priv->clk); 951 err = clk_prepare_enable(priv->clk);
952 if (err) {
953 dev_err(&pdev->dev, "clk_prepare_enable() failed\n");
954 goto probe_exit_clk;
955 }
956
952 err = register_candev(ndev); 957 err = register_candev(ndev);
953 if (err) { 958 if (err) {
954 dev_err(&pdev->dev, "register_candev() failed\n"); 959 dev_err(&pdev->dev, "register_candev() failed\n");
@@ -981,7 +986,7 @@ static int ti_hecc_remove(struct platform_device *pdev)
981 struct ti_hecc_priv *priv = netdev_priv(ndev); 986 struct ti_hecc_priv *priv = netdev_priv(ndev);
982 987
983 unregister_candev(ndev); 988 unregister_candev(ndev);
984 clk_disable(priv->clk); 989 clk_disable_unprepare(priv->clk);
985 clk_put(priv->clk); 990 clk_put(priv->clk);
986 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 991 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
987 iounmap(priv->base); 992 iounmap(priv->base);
@@ -1006,7 +1011,7 @@ static int ti_hecc_suspend(struct platform_device *pdev, pm_message_t state)
1006 hecc_set_bit(priv, HECC_CANMC, HECC_CANMC_PDR); 1011 hecc_set_bit(priv, HECC_CANMC, HECC_CANMC_PDR);
1007 priv->can.state = CAN_STATE_SLEEPING; 1012 priv->can.state = CAN_STATE_SLEEPING;
1008 1013
1009 clk_disable(priv->clk); 1014 clk_disable_unprepare(priv->clk);
1010 1015
1011 return 0; 1016 return 0;
1012} 1017}
@@ -1015,8 +1020,11 @@ static int ti_hecc_resume(struct platform_device *pdev)
1015{ 1020{
1016 struct net_device *dev = platform_get_drvdata(pdev); 1021 struct net_device *dev = platform_get_drvdata(pdev);
1017 struct ti_hecc_priv *priv = netdev_priv(dev); 1022 struct ti_hecc_priv *priv = netdev_priv(dev);
1023 int err;
1018 1024
1019 clk_enable(priv->clk); 1025 err = clk_prepare_enable(priv->clk);
1026 if (err)
1027 return err;
1020 1028
1021 hecc_clear_bit(priv, HECC_CANMC, HECC_CANMC_PDR); 1029 hecc_clear_bit(priv, HECC_CANMC, HECC_CANMC_PDR);
1022 priv->can.state = CAN_STATE_ERROR_ACTIVE; 1030 priv->can.state = CAN_STATE_ERROR_ACTIVE;