[PATCH 04/10] phy: rockchip: naneng-combphy: Simplify init ops

Kever Yang kever.yang at rock-chips.com
Sat Aug 30 18:46:18 CEST 2025


On 2025/7/22 06:07, Jonas Karlman wrote:
> The init ops for Rockchip COMBPHY driver is more complex than it needs
> to be, e.g. declaring multiple init functions that only differ in the
> error message.
>
> Simplify the init ops based on code from the Linux mainline driver.
>
> This change also ensure that errors returned from combphy_cfg() and
> reset_deassert_bulk() is propertly propagated to the caller. No other
> runtime change is expected with this simplication.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever
> ---
>   .../rockchip/phy-rockchip-naneng-combphy.c    | 101 ++++--------------
>   1 file changed, 19 insertions(+), 82 deletions(-)
>
> diff --git a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
> index a3038d067d3a..f246c8db2d6c 100644
> --- a/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
> +++ b/drivers/phy/rockchip/phy-rockchip-naneng-combphy.c
> @@ -98,104 +98,41 @@ static int param_write(struct regmap *base,
>   	return regmap_write(base, reg->offset, val);
>   }
>   
> -static int rockchip_combphy_pcie_init(struct rockchip_combphy_priv *priv)
> -{
> -	int ret = 0;
> -
> -	if (priv->cfg->combphy_cfg) {
> -		ret = priv->cfg->combphy_cfg(priv);
> -		if (ret) {
> -			dev_err(priv->dev, "failed to init phy for pcie\n");
> -			return ret;
> -		}
> -	}
> -
> -	return ret;
> -}
> -
> -static int rockchip_combphy_usb3_init(struct rockchip_combphy_priv *priv)
> -{
> -	int ret = 0;
> -
> -	if (priv->cfg->combphy_cfg) {
> -		ret = priv->cfg->combphy_cfg(priv);
> -		if (ret) {
> -			dev_err(priv->dev, "failed to init phy for usb3\n");
> -			return ret;
> -		}
> -	}
> -
> -	return ret;
> -}
> -
> -static int rockchip_combphy_sata_init(struct rockchip_combphy_priv *priv)
> -{
> -	int ret = 0;
> -
> -	if (priv->cfg->combphy_cfg) {
> -		ret = priv->cfg->combphy_cfg(priv);
> -		if (ret) {
> -			dev_err(priv->dev, "failed to init phy for sata\n");
> -			return ret;
> -		}
> -	}
> -
> -	return ret;
> -}
> -
> -static int rockchip_combphy_sgmii_init(struct rockchip_combphy_priv *priv)
> +static int rockchip_combphy_init(struct phy *phy)
>   {
> -	int ret = 0;
> -
> -	if (priv->cfg->combphy_cfg) {
> -		ret = priv->cfg->combphy_cfg(priv);
> -		if (ret) {
> -			dev_err(priv->dev, "failed to init phy for sgmii\n");
> -			return ret;
> -		}
> -	}
> +	struct rockchip_combphy_priv *priv = dev_get_priv(phy->dev);
> +	int ret;
>   
> -	return ret;
> -}
> +	ret = clk_enable(&priv->ref_clk);
> +	if (ret < 0 && ret != -ENOSYS)
> +		return ret;
>   
> -static int rockchip_combphy_set_mode(struct rockchip_combphy_priv *priv)
> -{
>   	switch (priv->mode) {
>   	case PHY_TYPE_PCIE:
> -		rockchip_combphy_pcie_init(priv);
> -		break;
>   	case PHY_TYPE_USB3:
> -		rockchip_combphy_usb3_init(priv);
> -		break;
>   	case PHY_TYPE_SATA:
> -		rockchip_combphy_sata_init(priv);
> -		break;
>   	case PHY_TYPE_SGMII:
>   	case PHY_TYPE_QSGMII:
> -		return rockchip_combphy_sgmii_init(priv);
> +		if (priv->cfg->combphy_cfg)
> +			ret = priv->cfg->combphy_cfg(priv);
> +		else
> +			ret = 0;
> +		break;
>   	default:
>   		dev_err(priv->dev, "incompatible PHY type\n");
> -		return -EINVAL;
> +		ret = -EINVAL;
> +		break;
>   	}
>   
> -	return 0;
> -}
> -
> -static int rockchip_combphy_init(struct phy *phy)
> -{
> -	struct rockchip_combphy_priv *priv = dev_get_priv(phy->dev);
> -	int ret;
> -
> -	ret = clk_enable(&priv->ref_clk);
> -	if (ret < 0 && ret != -ENOSYS)
> -		return ret;
> +	if (ret) {
> +		dev_err(priv->dev, "failed to init phy for phy type %x\n", priv->mode);
> +		goto err_clk;
> +	}
>   
> -	ret = rockchip_combphy_set_mode(priv);
> +	ret = reset_deassert_bulk(&priv->phy_rsts);
>   	if (ret)
>   		goto err_clk;
>   
> -	reset_deassert_bulk(&priv->phy_rsts);
> -
>   	return 0;
>   
>   err_clk:
> @@ -305,7 +242,7 @@ static int rockchip_combphy_probe(struct udevice *udev)
>   	}
>   
>   	priv->dev = udev;
> -	priv->mode = PHY_TYPE_SATA;
> +	priv->mode = PHY_NONE;
>   	priv->cfg = phy_cfg;
>   
>   	return rockchip_combphy_parse_dt(udev, priv);


More information about the U-Boot mailing list