can: m_can: make m_can_start and m_can_stop symmetric
authorQuentin Schulz <quentin.schulz@free-electrons.com>
Fri, 5 May 2017 13:50:31 +0000 (15:50 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Thu, 18 May 2017 08:32:48 +0000 (10:32 +0200)
This moves clocks gating outside of the m_can_stop function as the
m_can_start function does not (and cannot, at least in current
implementation) ungate clocks. This way, both functions can now be used
symmetrically.

Signed-off-by: Quentin Schulz <quentin.schulz@free-electrons.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/m_can/m_can.c

index 5da1bdb202a32fe81e5f7a52222b43c1e5ce4ee3..6115dede671e6dc05fa13d4420ea857e350e9828 100644 (file)
@@ -1324,9 +1324,6 @@ static void m_can_stop(struct net_device *dev)
        /* disable all interrupts */
        m_can_disable_all_interrupts(priv);
 
-       clk_disable_unprepare(priv->hclk);
-       clk_disable_unprepare(priv->cclk);
-
        /* set the state as STOPPED */
        priv->can.state = CAN_STATE_STOPPED;
 }
@@ -1338,6 +1335,8 @@ static int m_can_close(struct net_device *dev)
        netif_stop_queue(dev);
        napi_disable(&priv->napi);
        m_can_stop(dev);
+       clk_disable_unprepare(priv->hclk);
+       clk_disable_unprepare(priv->cclk);
        free_irq(dev->irq, dev);
        close_candev(dev);
        can_led_event(dev, CAN_LED_EVENT_STOP);