]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/bridge: ti-tfp410: Set the bus_format
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Mon, 1 Apr 2019 12:41:43 +0000 (15:41 +0300)
committerAndrzej Hajda <a.hajda@samsung.com>
Fri, 12 Apr 2019 07:39:01 +0000 (09:39 +0200)
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@ti.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190401124143.17179-3-peter.ujfalusi@ti.com
drivers/gpu/drm/bridge/ti-tfp410.c

index 6fc831eb3804d042b10a6697caeb060250791dbd..8b0e71bd3ca7734f3fdd9e525641cb5609f618f1 100644 (file)
@@ -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:
+               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)