]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
can: m_can: add deinit callback
authorSean Nyekjaer <sean@geanix.com>
Fri, 22 Nov 2024 14:52:22 +0000 (15:52 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Oct 2025 14:20:28 +0000 (16:20 +0200)
[ Upstream commit baa8aaf79768b72eb7a181c476ca0291613f59e6 ]

This is added in preparation for calling standby mode in the tcan4x5x
driver or other users of m_can.
For the tcan4x5x; If Vsup 12V, standby mode will save 7-8mA, when the
interface is down.

Signed-off-by: Sean Nyekjaer <sean@geanix.com>
Link: https://patch.msgid.link/20241122-tcan-standby-v3-1-90bafaf5eccd@geanix.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Stable-dep-of: a9e30a22d6f2 ("can: m_can: fix CAN state in system PM")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/can/m_can/m_can.c
drivers/net/can/m_can/m_can.h

index a7e326faca8cac5a2949cce02f2dfc25730f37d1..249263fca748d5792d2ac609d132ec64179a2aef 100644 (file)
@@ -1796,6 +1796,13 @@ static void m_can_stop(struct net_device *dev)
 
        /* set the state as STOPPED */
        cdev->can.state = CAN_STATE_STOPPED;
+
+       if (cdev->ops->deinit) {
+               ret = cdev->ops->deinit(cdev);
+               if (ret)
+                       netdev_err(dev, "failed to deinitialize: %pe\n",
+                                  ERR_PTR(ret));
+       }
 }
 
 static int m_can_close(struct net_device *dev)
index ef39e8e527ab67a040b5d676ccd23d1604fce0f3..bd4746c63af3f0a032910644dfd48a9ebb3a6168 100644 (file)
@@ -68,6 +68,7 @@ struct m_can_ops {
        int (*write_fifo)(struct m_can_classdev *cdev, int addr_offset,
                          const void *val, size_t val_count);
        int (*init)(struct m_can_classdev *cdev);
+       int (*deinit)(struct m_can_classdev *cdev);
 };
 
 struct m_can_tx_op {