phy: ti: gmii-sel: add resume support

The resume callback restores the submode of each PHY.

It uses the submode stored in struct phy_gmii_sel_phy_priv (variable
phy_if_mode). The submode was saved by the set_mode PHY operation.

Signed-off-by: Thomas Richard <thomas.richard@bootlin.com>
Link: https://lore.kernel.org/r/20240125171754.773909-1-thomas.richard@bootlin.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
Thomas Richard 2024-01-25 18:17:54 +01:00 committed by Vinod Koul
parent 442f34ede7
commit bc25f0b571

View File

@ -494,11 +494,35 @@ static int phy_gmii_sel_probe(struct platform_device *pdev)
return 0;
}
static int phy_gmii_sel_resume_noirq(struct device *dev)
{
struct phy_gmii_sel_priv *priv = dev_get_drvdata(dev);
struct phy_gmii_sel_phy_priv *if_phys = priv->if_phys;
int ret, i;
for (i = 0; i < priv->num_ports; i++) {
if (if_phys[i].phy_if_mode) {
ret = phy_gmii_sel_mode(if_phys[i].if_phy,
PHY_MODE_ETHERNET, if_phys[i].phy_if_mode);
if (ret) {
dev_err(dev, "port%u: restore mode fail %d\n",
if_phys[i].if_phy->id, ret);
return ret;
}
}
}
return 0;
}
static DEFINE_NOIRQ_DEV_PM_OPS(phy_gmii_sel_pm_ops, NULL, phy_gmii_sel_resume_noirq);
static struct platform_driver phy_gmii_sel_driver = {
.probe = phy_gmii_sel_probe,
.driver = {
.name = "phy-gmii-sel",
.of_match_table = phy_gmii_sel_id_table,
.pm = pm_sleep_ptr(&phy_gmii_sel_pm_ops),
},
};
module_platform_driver(phy_gmii_sel_driver);