[RFC PATCH 16/17] drm: bridge: samsung-dsim: Fix PLL_P offset

Sam Ravnborg sam at ravnborg.org
Sun Jul 25 17:48:38 UTC 2021


Hi Jagan,
On Sun, Jul 04, 2021 at 02:32:29PM +0530, Jagan Teki wrote:
> PMS_P offset value in existing driver is not compatible
> with i.MX8MM.
> 
> However the i.MX8M Mini Application Reference manual shows
> the PMS_P offset is the same in the driver, but the i.MX8MM
> downstream driver uses a different one.
> 
> So, handle the PMS_P offset via driver_data and use the
> offset value for i.MX8MM from the downstream driver.
> 
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>

$subject and code speaks of PLL but the changelog says PMS.
I think the changelog needs a small update here.

	Sam

> ---
>  drivers/gpu/drm/bridge/samsung-dsim.c | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
> index 54767cbf231c..0ed218f5eefc 100644
> --- a/drivers/gpu/drm/bridge/samsung-dsim.c
> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c
> @@ -184,7 +184,7 @@
>  /* DSIM_PLLCTRL */
>  #define DSIM_FREQ_BAND(x)		((x) << 24)
>  #define DSIM_PLL_EN			(1 << 23)
> -#define DSIM_PLL_P(x)			((x) << 13)
> +#define DSIM_PLL_P(x, offset)		((x) << (offset))
>  #define DSIM_PLL_M(x)			((x) << 4)
>  #define DSIM_PLL_S(x)			((x) << 1)
>  
> @@ -259,6 +259,7 @@ struct samsung_dsim_driver_data {
>  	unsigned int max_freq;
>  	unsigned int wait_for_reset;
>  	unsigned int num_bits_resol;
> +	unsigned int pll_p_offset;
>  	const unsigned int *reg_values;
>  	bool exynos_specific;
>  };
> @@ -487,6 +488,7 @@ static const struct samsung_dsim_driver_data exynos3_dsi_driver_data = {
>  	.max_freq = 1000,
>  	.wait_for_reset = 1,
>  	.num_bits_resol = 11,
> +	.pll_p_offset = 13,
>  	.reg_values = reg_values,
>  	.exynos_specific = true,
>  };
> @@ -500,6 +502,7 @@ static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = {
>  	.max_freq = 1000,
>  	.wait_for_reset = 1,
>  	.num_bits_resol = 11,
> +	.pll_p_offset = 13,
>  	.reg_values = reg_values,
>  	.exynos_specific = true,
>  };
> @@ -511,6 +514,7 @@ static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = {
>  	.max_freq = 1000,
>  	.wait_for_reset = 1,
>  	.num_bits_resol = 11,
> +	.pll_p_offset = 13,
>  	.reg_values = reg_values,
>  	.exynos_specific = true,
>  };
> @@ -523,6 +527,7 @@ static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = {
>  	.max_freq = 1500,
>  	.wait_for_reset = 0,
>  	.num_bits_resol = 12,
> +	.pll_p_offset = 13,
>  	.reg_values = exynos5433_reg_values,
>  	.exynos_specific = true,
>  };
> @@ -535,6 +540,7 @@ static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = {
>  	.max_freq = 1500,
>  	.wait_for_reset = 1,
>  	.num_bits_resol = 12,
> +	.pll_p_offset = 13,
>  	.reg_values = exynos5422_reg_values,
>  	.exynos_specific = true,
>  };
> @@ -547,6 +553,7 @@ static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data = {
>  	.max_freq = 2100,
>  	.wait_for_reset = 0,
>  	.num_bits_resol = 12,
> +	.pll_p_offset = 14,
>  	.reg_values = imx8mm_dsim_reg_values,
>  };
>  
> @@ -662,7 +669,8 @@ static unsigned long samsung_dsim_set_pll(struct samsung_dsim *dsi,
>  	writel(driver_data->reg_values[PLL_TIMER],
>  			dsi->reg_base + driver_data->plltmr_reg);
>  
> -	reg = DSIM_PLL_EN | DSIM_PLL_P(p) | DSIM_PLL_M(m) | DSIM_PLL_S(s);
> +	reg = DSIM_PLL_EN | DSIM_PLL_P(p, driver_data->pll_p_offset) |
> +	      DSIM_PLL_M(m) | DSIM_PLL_S(s);
>  
>  	if (driver_data->has_freqband) {
>  		static const unsigned long freq_bands[] = {
> -- 
> 2.25.1


More information about the dri-devel mailing list