drivers/phy/phy-core.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
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
Best regards,
--
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Hi Dmitry,
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.
>
I believe the correct spelling should be 'Damon' instead of 'Diamond'. ;-)
> 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
>
> Best regards,
Best regards
Damon
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
© 2016 - 2025 Red Hat, Inc.