[PATCH v2 05/17] mmc: rockchip_sdhci: Add set_clock and config_dll sdhci_ops

Kever Yang kever.yang at rock-chips.com
Thu Apr 20 11:57:53 CEST 2023


On 2023/4/19 00:46, Jonas Karlman wrote:
> Add support for the set_clock and config_dll sdhci_ops. Use of these ops
> will allow configuration of DLL while the output clock is disabled.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever

> ---
> v2:
> - No change
>
>   drivers/mmc/rockchip_sdhci.c | 29 +++++++++++++++++++++++++++--
>   1 file changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mmc/rockchip_sdhci.c b/drivers/mmc/rockchip_sdhci.c
> index 2a30974df501..bc9838ac7c45 100644
> --- a/drivers/mmc/rockchip_sdhci.c
> +++ b/drivers/mmc/rockchip_sdhci.c
> @@ -139,6 +139,9 @@ struct sdhci_data {
>   	 */
>   	int (*set_ios_post)(struct sdhci_host *host);
>   
> +	void (*set_clock)(struct sdhci_host *host, u32 div);
> +	int (*config_dll)(struct sdhci_host *host, u32 clock, bool enable);
> +
>   	/**
>   	 * set_enhanced_strobe() - Set HS400 Enhanced Strobe config
>   	 *
> @@ -430,6 +433,15 @@ static int rockchip_sdhci_set_ios_post(struct sdhci_host *host)
>   	return 0;
>   }
>   
> +static void rockchip_sdhci_set_clock(struct sdhci_host *host, u32 div)
> +{
> +	struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host);
> +	struct sdhci_data *data = (struct sdhci_data *)dev_get_driver_data(priv->dev);
> +
> +	if (data->set_clock)
> +		data->set_clock(host, div);
> +}
> +
>   static int rockchip_sdhci_execute_tuning(struct mmc *mmc, u8 opcode)
>   {
>   	struct rockchip_sdhc *priv = dev_get_priv(mmc->dev);
> @@ -491,6 +503,17 @@ static int rockchip_sdhci_execute_tuning(struct mmc *mmc, u8 opcode)
>   	return ret;
>   }
>   
> +static int rockchip_sdhci_config_dll(struct sdhci_host *host, u32 clock, bool enable)
> +{
> +	struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host);
> +	struct sdhci_data *data = (struct sdhci_data *)dev_get_driver_data(priv->dev);
> +
> +	if (data->config_dll)
> +		return data->config_dll(host, clock, enable);
> +
> +	return 0;
> +}
> +
>   static int rockchip_sdhci_set_enhanced_strobe(struct sdhci_host *host)
>   {
>   	struct rockchip_sdhc *priv = container_of(host, struct rockchip_sdhc, host);
> @@ -503,9 +526,11 @@ static int rockchip_sdhci_set_enhanced_strobe(struct sdhci_host *host)
>   }
>   
>   static struct sdhci_ops rockchip_sdhci_ops = {
> -	.set_ios_post	= rockchip_sdhci_set_ios_post,
> -	.platform_execute_tuning = &rockchip_sdhci_execute_tuning,
>   	.set_control_reg = rockchip_sdhci_set_control_reg,
> +	.set_ios_post = rockchip_sdhci_set_ios_post,
> +	.set_clock = rockchip_sdhci_set_clock,
> +	.platform_execute_tuning = rockchip_sdhci_execute_tuning,
> +	.config_dll = rockchip_sdhci_config_dll,
>   	.set_enhanced_strobe = rockchip_sdhci_set_enhanced_strobe,
>   };
>   


More information about the U-Boot mailing list