[PATCH] sn65dsi83.c: fix dual-channel LVDS output also divide porches

Dmitry Baryshkov dmitry.baryshkov at linaro.org
Sat Nov 30 09:54:11 UTC 2024


On Tue, Nov 26, 2024 at 09:42:45AM +0000, Bauer, Markus wrote:
> sn65dsi83.c: fix dual-channel LVDS output also divide porches

Please use drm/bridge: ti-sn65dsi83: as subject prefix. Drop the first
line of the commit message.

> 
> When generating dual-channel LVDS to a single display, the
> horizontal part has to be divided in halves for each channel.
> This was done correctly for hactive, but not for the porches.

I don't see this being handled for hactive. Could you please point out
the code?

> 
> Of course this does only apply to sn65dsi84, which is also covered
> by this driver.
> 
> Cc: stable at vger.kernel.org

Also:

Fixes: ceb515ba29ba ("drm/bridge: ti-sn65dsi83: Add TI SN65DSI83 and SN65DSI84 driver")

> Signed-off-by: Markus Bauer <markus.bauer2 at avnet.com>
> ---
>  drivers/gpu/drm/bridge/ti-sn65dsi83.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi83.c b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> index ad73f69d768d..d71f752e79ec 100644
> --- a/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> +++ b/drivers/gpu/drm/bridge/ti-sn65dsi83.c
> @@ -399,7 +399,7 @@ static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge,
>  	unsigned int pval;
>  	__le16 le16val;
>  	u16 val;
> -	int ret;
> +	int ret, hfront, hback;
>  
>  	ret = regulator_enable(ctx->vcc);
>  	if (ret) {
> @@ -521,12 +521,22 @@ static void sn65dsi83_atomic_pre_enable(struct drm_bridge *bridge,
>  	le16val = cpu_to_le16(mode->vsync_end - mode->vsync_start);
>  	regmap_bulk_write(ctx->regmap, REG_VID_CHA_VSYNC_PULSE_WIDTH_LOW,
>  			  &le16val, 2);
> +
> +	hback = mode->htotal - mode->hsync_end;
> +	if (ctx->lvds_dual_link)
> +		hback /= 2;
> +
>  	regmap_write(ctx->regmap, REG_VID_CHA_HORIZONTAL_BACK_PORCH,
> -		     mode->htotal - mode->hsync_end);
> +		     hback);
>  	regmap_write(ctx->regmap, REG_VID_CHA_VERTICAL_BACK_PORCH,
>  		     mode->vtotal - mode->vsync_end);
> +
> +	hfront = mode->hsync_start - mode->hdisplay;
> +	if (ctx->lvds_dual_link)
> +		hfront /= 2;
> +
>  	regmap_write(ctx->regmap, REG_VID_CHA_HORIZONTAL_FRONT_PORCH,
> -		     mode->hsync_start - mode->hdisplay);
> +		     hfront);
>  	regmap_write(ctx->regmap, REG_VID_CHA_VERTICAL_FRONT_PORCH,
>  		     mode->vsync_start - mode->vdisplay);
>  	regmap_write(ctx->regmap, REG_VID_CHA_TEST_PATTERN, 0x00);
> -- 
> 2.34.1
> 
> 
> --
> Markus Bauer
> 
> Avnet Embedded is becoming TRIA:
> www.tria-technologies.com
> 
> 
> 
> We continuously commit to comply with the applicable data protection laws and ensure fair and transparent processing of your personal data. 
> Please read our privacy statement including an information notice and data protection policy for detailed information on our website.

-- 
With best wishes
Dmitry


More information about the dri-devel mailing list