]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
phy: core: don't require set_mode() callback for phy_get_mode() to work
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Sun, 9 Feb 2025 12:31:45 +0000 (14:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2025 12:37:05 +0000 (14:37 +0200)
[ Upstream commit d58c04e305afbaa9dda7969151f06c4efe2c98b0 ]

As reported by Damon 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
Tested-by: Damon Ding <damon.ding@rock-chips.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20250209-phy-fix-set-moe-v2-1-76e248503856@linaro.org
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/phy/phy-core.c

index 1bcdef37e8aa290c39e983a83f1d465f8db07f6d..dac0f7f4f3d3d54f4157a9db481116164c670ed2 100644 (file)
@@ -360,13 +360,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);