@@ -461,6 +461,38 @@ static irqreturn_t mv88q2xxx_handle_interrupt(struct phy_device *phydev)
461
461
return IRQ_HANDLED ;
462
462
}
463
463
464
+ static int mv88q2xxx_suspend (struct phy_device * phydev )
465
+ {
466
+ int ret ;
467
+
468
+ /* Disable PHY interrupts */
469
+ if (phy_interrupt_is_valid (phydev )) {
470
+ phydev -> interrupts = PHY_INTERRUPT_DISABLED ;
471
+ ret = mv88q2xxx_config_intr (phydev );
472
+ if (ret )
473
+ return ret ;
474
+ }
475
+
476
+ return phy_set_bits_mmd (phydev , MDIO_MMD_PMAPMD , MDIO_CTRL1 ,
477
+ MDIO_CTRL1_LPOWER );
478
+ }
479
+
480
+ static int mv88q2xxx_resume (struct phy_device * phydev )
481
+ {
482
+ int ret ;
483
+
484
+ /* Enable PHY interrupts */
485
+ if (phy_interrupt_is_valid (phydev )) {
486
+ phydev -> interrupts = PHY_INTERRUPT_ENABLED ;
487
+ ret = mv88q2xxx_config_intr (phydev );
488
+ if (ret )
489
+ return ret ;
490
+ }
491
+
492
+ return phy_clear_bits_mmd (phydev , MDIO_MMD_PMAPMD , MDIO_CTRL1 ,
493
+ MDIO_CTRL1_LPOWER );
494
+ }
495
+
464
496
static int mv88q222x_soft_reset (struct phy_device * phydev )
465
497
{
466
498
int ret ;
@@ -566,6 +598,8 @@ static struct phy_driver mv88q2xxx_driver[] = {
566
598
.set_loopback = genphy_c45_loopback ,
567
599
.get_sqi = mv88q2xxx_get_sqi ,
568
600
.get_sqi_max = mv88q2xxx_get_sqi_max ,
601
+ .suspend = mv88q2xxx_suspend ,
602
+ .resume = mv88q2xxx_resume ,
569
603
},
570
604
};
571
605
0 commit comments