[PATCH 06/11] drivers: phy: phy-mtk-ufs: disable clk in power_off

Neil Armstrong neil.armstrong at linaro.org
Tue Mar 17 15:54:58 CET 2026


On 3/17/26 15:24, Julien Stephan wrote:
> Disable clocks in power_off(). Also define ufs_mtk_phy_set_inactive()
> helper function to keep consistency with power_on() and
> ufs_mtk_phy_set_active().
> 
> Signed-off-by: Julien Stephan <jstephan at baylibre.com>
> ---
>   drivers/phy/phy-mtk-ufs.c | 40 +++++++++++++++++++++++++---------------
>   1 file changed, 25 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/phy/phy-mtk-ufs.c b/drivers/phy/phy-mtk-ufs.c
> index c7a671ebfad..0522e1ab683 100644
> --- a/drivers/phy/phy-mtk-ufs.c
> +++ b/drivers/phy/phy-mtk-ufs.c
> @@ -88,34 +88,44 @@ static int mtk_phy_power_on(struct phy *phy)
>   	return 0;
>   }
>   
> -static int mtk_phy_power_off(struct phy *phy)
> +static void ufs_mtk_phy_set_inactive(struct mtk_ufs_phy *phy)
>   {
> -	struct mtk_ufs_phy *ufs_phy = dev_get_priv(phy->dev);
> -
>   	/* Set PHY to Deep Hibernate mode */
> -	setbits_le32(ufs_phy->mmio + MP_LN_DIG_RX_9C, FSM_DIFZ_FRC);
> +	setbits_le32(phy->mmio + MP_LN_DIG_RX_9C, FSM_DIFZ_FRC);
>   
>   	/* force DA_MP_RX0_SQ_EN */
> -	setbits_le32(ufs_phy->mmio + MP_LN_DIG_RX_AC, FRC_RX_SQ_EN);
> -	clrbits_le32(ufs_phy->mmio + MP_LN_DIG_RX_AC, RX_SQ_EN);
> +	setbits_le32(phy->mmio + MP_LN_DIG_RX_AC, FRC_RX_SQ_EN);
> +	clrbits_le32(phy->mmio + MP_LN_DIG_RX_AC, RX_SQ_EN);
>   
>   	/* force DA_MP_CDR_ISO_EN */
> -	setbits_le32(ufs_phy->mmio + MP_LN_RX_44, FRC_CDR_ISO_EN);
> -	setbits_le32(ufs_phy->mmio + MP_LN_RX_44, CDR_ISO_EN);
> +	setbits_le32(phy->mmio + MP_LN_RX_44, FRC_CDR_ISO_EN);
> +	setbits_le32(phy->mmio + MP_LN_RX_44, CDR_ISO_EN);
>   
>   	/* force DA_MP_CDR_PWR_ON */
> -	setbits_le32(ufs_phy->mmio + MP_LN_RX_44, FRC_CDR_PWR_ON);
> -	clrbits_le32(ufs_phy->mmio + MP_LN_RX_44, CDR_PWR_ON);
> +	setbits_le32(phy->mmio + MP_LN_RX_44, FRC_CDR_PWR_ON);
> +	clrbits_le32(phy->mmio + MP_LN_RX_44, CDR_PWR_ON);
>   
>   	/* force DA_MP_PLL_ISO_EN */
> -	setbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, FRC_PLL_ISO_EN);
> -	setbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, PLL_ISO_EN);
> +	setbits_le32(phy->mmio + MP_GLB_DIG_8C, FRC_PLL_ISO_EN);
> +	setbits_le32(phy->mmio + MP_GLB_DIG_8C, PLL_ISO_EN);
>   
>   	/* force DA_MP_PLL_PWR_ON */
> -	setbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, FRC_FRC_PWR_ON);
> -	clrbits_le32(ufs_phy->mmio + MP_GLB_DIG_8C, PLL_PWR_ON);
> +	setbits_le32(phy->mmio + MP_GLB_DIG_8C, FRC_FRC_PWR_ON);
> +	clrbits_le32(phy->mmio + MP_GLB_DIG_8C, PLL_PWR_ON);
> +}
>   
> -	return 0;
> +static int mtk_phy_power_off(struct phy *phy)
> +{
> +	struct mtk_ufs_phy *ufs_phy = dev_get_priv(phy->dev);
> +	int ret;
> +
> +	ufs_mtk_phy_set_inactive(ufs_phy);
> +
> +	ret = clk_disable_bulk(&ufs_phy->clk_bulk);
> +	if (ret)
> +		dev_err(phy->dev, "failed to disable clocks (ret=%d)\n", ret);
> +
> +	return ret;
>   }
>   
>   static const struct phy_ops mtk_ufs_phy_ops = {
> 

Reviewed-by: Neil Armstrong <neil.armstrong at linaro.org>

Thanks,
Neil


More information about the U-Boot mailing list