|
|
@@ -677,17 +677,28 @@ static void kszphy_get_stats(struct phy_device *phydev,
|
|
|
data[i] = kszphy_get_stat(phydev, i);
|
|
|
}
|
|
|
|
|
|
-static int kszphy_resume(struct phy_device *phydev)
|
|
|
+static int kszphy_suspend(struct phy_device *phydev)
|
|
|
{
|
|
|
- int value;
|
|
|
+ /* Disable PHY Interrupts */
|
|
|
+ if (phy_interrupt_is_valid(phydev)) {
|
|
|
+ phydev->interrupts = PHY_INTERRUPT_DISABLED;
|
|
|
+ if (phydev->drv->config_intr)
|
|
|
+ phydev->drv->config_intr(phydev);
|
|
|
+ }
|
|
|
|
|
|
- mutex_lock(&phydev->lock);
|
|
|
+ return genphy_suspend(phydev);
|
|
|
+}
|
|
|
|
|
|
- value = phy_read(phydev, MII_BMCR);
|
|
|
- phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN);
|
|
|
+static int kszphy_resume(struct phy_device *phydev)
|
|
|
+{
|
|
|
+ genphy_resume(phydev);
|
|
|
|
|
|
- kszphy_config_intr(phydev);
|
|
|
- mutex_unlock(&phydev->lock);
|
|
|
+ /* Enable PHY Interrupts */
|
|
|
+ if (phy_interrupt_is_valid(phydev)) {
|
|
|
+ phydev->interrupts = PHY_INTERRUPT_ENABLED;
|
|
|
+ if (phydev->drv->config_intr)
|
|
|
+ phydev->drv->config_intr(phydev);
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -900,7 +911,7 @@ static struct phy_driver ksphy_driver[] = {
|
|
|
.get_sset_count = kszphy_get_sset_count,
|
|
|
.get_strings = kszphy_get_strings,
|
|
|
.get_stats = kszphy_get_stats,
|
|
|
- .suspend = genphy_suspend,
|
|
|
+ .suspend = kszphy_suspend,
|
|
|
.resume = kszphy_resume,
|
|
|
}, {
|
|
|
.phy_id = PHY_ID_KSZ8061,
|