Message ID | 20250107-phy-fix-set-moe-v1-1-b3dfe9391672@linaro.org |
---|---|
State | New |
Headers | show |
Series | phy: core: don't require set_mode() callback for phy_get_mode() to work | expand |
On 2025/1/7 19:34, Dmitry Baryshkov wrote: > As reported by Diamond Ding, the phy_get_mode() call doesn't work as > expected unless the PHY driver has a .set_mode() call. This prompts PHY > drivers to have empty stubs for .set_mode() for the sake of being able > to get the mode. > > Make .set_mode() callback truly optional and update PHY's mode even if > it there is none. > > Cc: Damon Ding <damon.ding@rock-chips.com> > Link: https://lore.kernel.org/r/96f8310f-93f1-4bcb-8637-137e1159ff83@rock-chips.com > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > --- > drivers/phy/phy-core.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c > index 8dfdce605a905d7f38205727151258af41f807a9..067316dfcd83a6fc8428cddd27d3b7ebfc270831 100644 > --- a/drivers/phy/phy-core.c > +++ b/drivers/phy/phy-core.c > @@ -405,13 +405,14 @@ EXPORT_SYMBOL_GPL(phy_power_off); > > int phy_set_mode_ext(struct phy *phy, enum phy_mode mode, int submode) > { > - int ret; > + int ret = 0; > > - if (!phy || !phy->ops->set_mode) > + if (!phy) > return 0; > > mutex_lock(&phy->mutex); > - ret = phy->ops->set_mode(phy, mode, submode); > + if (phy->ops->set_mode) > + ret = phy->ops->set_mode(phy, mode, submode); > if (!ret) > phy->attrs.mode = mode; > mutex_unlock(&phy->mutex); > > --- > base-commit: 7b4b9bf203da94fbeac75ed3116c84aa03e74578 > change-id: 20250107-phy-fix-set-moe-d275cff5e27b Tested-by: Damon Ding <damon.ding@rock-chips.com> Best regards Damon
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c index 8dfdce605a905d7f38205727151258af41f807a9..067316dfcd83a6fc8428cddd27d3b7ebfc270831 100644 --- a/drivers/phy/phy-core.c +++ b/drivers/phy/phy-core.c @@ -405,13 +405,14 @@ EXPORT_SYMBOL_GPL(phy_power_off); int phy_set_mode_ext(struct phy *phy, enum phy_mode mode, int submode) { - int ret; + int ret = 0; - if (!phy || !phy->ops->set_mode) + if (!phy) return 0; mutex_lock(&phy->mutex); - ret = phy->ops->set_mode(phy, mode, submode); + if (phy->ops->set_mode) + ret = phy->ops->set_mode(phy, mode, submode); if (!ret) phy->attrs.mode = mode; mutex_unlock(&phy->mutex);
As reported by Diamond Ding, the phy_get_mode() call doesn't work as expected unless the PHY driver has a .set_mode() call. This prompts PHY drivers to have empty stubs for .set_mode() for the sake of being able to get the mode. Make .set_mode() callback truly optional and update PHY's mode even if it there is none. Cc: Damon Ding <damon.ding@rock-chips.com> Link: https://lore.kernel.org/r/96f8310f-93f1-4bcb-8637-137e1159ff83@rock-chips.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> --- drivers/phy/phy-core.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) --- base-commit: 7b4b9bf203da94fbeac75ed3116c84aa03e74578 change-id: 20250107-phy-fix-set-moe-d275cff5e27b Best regards,