@@ -2444,6 +2444,7 @@ int m_can_class_suspend(struct device *dev)
2444
2444
{
2445
2445
struct m_can_classdev * cdev = dev_get_drvdata (dev );
2446
2446
struct net_device * ndev = cdev -> net ;
2447
+ int ret = 0 ;
2447
2448
2448
2449
if (netif_running (ndev )) {
2449
2450
netif_stop_queue (ndev );
@@ -2456,6 +2457,9 @@ int m_can_class_suspend(struct device *dev)
2456
2457
if (cdev -> pm_wake_source ) {
2457
2458
hrtimer_cancel (& cdev -> hrtimer );
2458
2459
m_can_write (cdev , M_CAN_IE , IR_RF0N );
2460
+
2461
+ if (cdev -> ops -> deinit )
2462
+ ret = cdev -> ops -> deinit (cdev );
2459
2463
} else {
2460
2464
m_can_stop (ndev );
2461
2465
}
@@ -2467,22 +2471,21 @@ int m_can_class_suspend(struct device *dev)
2467
2471
2468
2472
cdev -> can .state = CAN_STATE_SLEEPING ;
2469
2473
2470
- return 0 ;
2474
+ return ret ;
2471
2475
}
2472
2476
EXPORT_SYMBOL_GPL (m_can_class_suspend );
2473
2477
2474
2478
int m_can_class_resume (struct device * dev )
2475
2479
{
2476
2480
struct m_can_classdev * cdev = dev_get_drvdata (dev );
2477
2481
struct net_device * ndev = cdev -> net ;
2482
+ int ret = 0 ;
2478
2483
2479
2484
pinctrl_pm_select_default_state (dev );
2480
2485
2481
2486
cdev -> can .state = CAN_STATE_ERROR_ACTIVE ;
2482
2487
2483
2488
if (netif_running (ndev )) {
2484
- int ret ;
2485
-
2486
2489
ret = m_can_clk_start (cdev );
2487
2490
if (ret )
2488
2491
return ret ;
@@ -2495,6 +2498,10 @@ int m_can_class_resume(struct device *dev)
2495
2498
* again.
2496
2499
*/
2497
2500
cdev -> active_interrupts |= IR_RF0N | IR_TEFN ;
2501
+
2502
+ if (cdev -> ops -> init )
2503
+ ret = cdev -> ops -> init (cdev );
2504
+
2498
2505
m_can_write (cdev , M_CAN_IE , cdev -> active_interrupts );
2499
2506
} else {
2500
2507
ret = m_can_start (ndev );
@@ -2508,7 +2515,7 @@ int m_can_class_resume(struct device *dev)
2508
2515
netif_start_queue (ndev );
2509
2516
}
2510
2517
2511
- return 0 ;
2518
+ return ret ;
2512
2519
}
2513
2520
EXPORT_SYMBOL_GPL (m_can_class_resume );
2514
2521
0 commit comments