Re: [PATCH 2/2] drm/bridge: ti-tfp410: Set the bus_format

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Peter,

Thank you for the patch.

On Mon, Apr 01, 2019 at 03:41:43PM +0300, Peter Ujfalusi wrote:
> The TFP410 supports 24 bit, single-edge and 12 bit, dual-edge modes.
> Depending on how many wires are used (24/12) the driver can set the correct
> bus_format.
> 
> If the information is not available in DT then assume 24 bit, single-edge
> setup.
> 
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx>
> ---
>  drivers/gpu/drm/bridge/ti-tfp410.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti-tfp410.c
> index 6fc831eb3804..8b0e71bd3ca7 100644
> --- a/drivers/gpu/drm/bridge/ti-tfp410.c
> +++ b/drivers/gpu/drm/bridge/ti-tfp410.c
> @@ -29,6 +29,7 @@ struct tfp410 {
>  	struct drm_connector	connector;
>  	unsigned int		connector_type;
>  
> +	u32			bus_format;
>  	struct i2c_adapter	*ddc;
>  	struct gpio_desc	*hpd;
>  	int			hpd_irq;
> @@ -139,6 +140,9 @@ static int tfp410_attach(struct drm_bridge *bridge)
>  		return ret;
>  	}
>  
> +	drm_display_info_set_bus_formats(&dvi->connector.display_info,
> +					 &dvi->bus_format, 1);
> +
>  	drm_connector_attach_encoder(&dvi->connector,
>  					  bridge->encoder);
>  
> @@ -197,6 +201,7 @@ static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c)
>  	struct drm_bridge_timings *timings = &dvi->timings;
>  	struct device_node *ep;
>  	u32 pclk_sample = 0;
> +	u32 bus_width = 24;
>  	s32 deskew = 0;
>  
>  	/* Start with defaults. */
> @@ -221,6 +226,7 @@ static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c)
>  
>  	/* Get the sampling edge from the endpoint. */
>  	of_property_read_u32(ep, "pclk-sample", &pclk_sample);
> +	of_property_read_u32(ep, "bus-width", &bus_width);
>  	of_node_put(ep);
>  
>  	timings->input_bus_flags = DRM_BUS_FLAG_DE_HIGH;
> @@ -238,6 +244,17 @@ static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c)
>  		return -EINVAL;
>  	}
>  
> +	switch (bus_width) {
> +	case 12:
> +		dvi->bus_format = MEDIA_BUS_FMT_RGB888_2X12_LE;
> +		break;
> +	case 24:
> +		dvi->bus_format = MEDIA_BUS_FMT_RGB888_1X24;
> +		break;
> +	default:

Maybe an error message here (possibly just dev_dbg()) ?

Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>

> +		return -EINVAL;
> +	}
> +
>  	/* Get the setup and hold time from vendor-specific properties. */
>  	of_property_read_u32(dvi->dev->of_node, "ti,deskew", (u32 *)&deskew);
>  	if (deskew < -4 || deskew > 3)

-- 
Regards,

Laurent Pinchart



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux