Skip to content

Commit ad1ddb3

Browse files
sknseanmarckleinebudde
authored andcommitted
can: m_can: call deinit/init callback when going into suspend/resume
m_can user like the tcan4x5x device, can go into standby mode. Low power RX mode is enabled to allow wake on can. Signed-off-by: Sean Nyekjaer <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Marc Kleine-Budde <[email protected]>
1 parent a136631 commit ad1ddb3

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

drivers/net/can/m_can/m_can.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2444,6 +2444,7 @@ int m_can_class_suspend(struct device *dev)
24442444
{
24452445
struct m_can_classdev *cdev = dev_get_drvdata(dev);
24462446
struct net_device *ndev = cdev->net;
2447+
int ret = 0;
24472448

24482449
if (netif_running(ndev)) {
24492450
netif_stop_queue(ndev);
@@ -2456,6 +2457,9 @@ int m_can_class_suspend(struct device *dev)
24562457
if (cdev->pm_wake_source) {
24572458
hrtimer_cancel(&cdev->hrtimer);
24582459
m_can_write(cdev, M_CAN_IE, IR_RF0N);
2460+
2461+
if (cdev->ops->deinit)
2462+
ret = cdev->ops->deinit(cdev);
24592463
} else {
24602464
m_can_stop(ndev);
24612465
}
@@ -2467,22 +2471,21 @@ int m_can_class_suspend(struct device *dev)
24672471

24682472
cdev->can.state = CAN_STATE_SLEEPING;
24692473

2470-
return 0;
2474+
return ret;
24712475
}
24722476
EXPORT_SYMBOL_GPL(m_can_class_suspend);
24732477

24742478
int m_can_class_resume(struct device *dev)
24752479
{
24762480
struct m_can_classdev *cdev = dev_get_drvdata(dev);
24772481
struct net_device *ndev = cdev->net;
2482+
int ret = 0;
24782483

24792484
pinctrl_pm_select_default_state(dev);
24802485

24812486
cdev->can.state = CAN_STATE_ERROR_ACTIVE;
24822487

24832488
if (netif_running(ndev)) {
2484-
int ret;
2485-
24862489
ret = m_can_clk_start(cdev);
24872490
if (ret)
24882491
return ret;
@@ -2495,6 +2498,10 @@ int m_can_class_resume(struct device *dev)
24952498
* again.
24962499
*/
24972500
cdev->active_interrupts |= IR_RF0N | IR_TEFN;
2501+
2502+
if (cdev->ops->init)
2503+
ret = cdev->ops->init(cdev);
2504+
24982505
m_can_write(cdev, M_CAN_IE, cdev->active_interrupts);
24992506
} else {
25002507
ret = m_can_start(ndev);
@@ -2508,7 +2515,7 @@ int m_can_class_resume(struct device *dev)
25082515
netif_start_queue(ndev);
25092516
}
25102517

2511-
return 0;
2518+
return ret;
25122519
}
25132520
EXPORT_SYMBOL_GPL(m_can_class_resume);
25142521

0 commit comments

Comments
 (0)