From: Dave Stevenson <[email protected]>

DRM provides flags for inverting pixel clock and output enable
signals, but these were not mapped to the relevant registers.

Add those mappings.

Signed-off-by: Dave Stevenson <[email protected]>
Signed-off-by: Maxime Ripard <[email protected]>
---
 drivers/gpu/drm/vc4/vc4_dpi.c | 64 ++++++++++++++++++++---------------
 1 file changed, 37 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
index ffa55952c773..695b759db9bc 100644
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -148,35 +148,45 @@ static void vc4_dpi_encoder_enable(struct drm_encoder 
*encoder)
        }
        drm_connector_list_iter_end(&conn_iter);
 
-       if (connector && connector->display_info.num_bus_formats) {
-               u32 bus_format = connector->display_info.bus_formats[0];
+       if (connector) {
+               if (connector->display_info.num_bus_formats) {
+                       u32 bus_format = connector->display_info.bus_formats[0];
 
-               switch (bus_format) {
-               case MEDIA_BUS_FMT_RGB888_1X24:
-                       dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
-                                              DPI_FORMAT);
-                       break;
-               case MEDIA_BUS_FMT_BGR888_1X24:
-                       dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
-                                              DPI_FORMAT);
-                       dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
-                       break;
-               case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
-                       dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
-                                              DPI_FORMAT);
-                       break;
-               case MEDIA_BUS_FMT_RGB666_1X18:
-                       dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
-                                              DPI_FORMAT);
-                       break;
-               case MEDIA_BUS_FMT_RGB565_1X16:
-                       dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
-                                              DPI_FORMAT);
-                       break;
-               default:
-                       DRM_ERROR("Unknown media bus format %d\n", bus_format);
-                       break;
+                       switch (bus_format) {
+                       case MEDIA_BUS_FMT_RGB888_1X24:
+                               dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
+                                                      DPI_FORMAT);
+                               break;
+                       case MEDIA_BUS_FMT_BGR888_1X24:
+                               dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
+                                                      DPI_FORMAT);
+                               dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
+                                                      DPI_ORDER);
+                               break;
+                       case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
+                               dpi_c |= 
VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
+                                                      DPI_FORMAT);
+                               break;
+                       case MEDIA_BUS_FMT_RGB666_1X18:
+                               dpi_c |= 
VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
+                                                      DPI_FORMAT);
+                               break;
+                       case MEDIA_BUS_FMT_RGB565_1X16:
+                               dpi_c |= 
VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
+                                                      DPI_FORMAT);
+                               break;
+                       default:
+                               DRM_ERROR("Unknown media bus format %d\n",
+                                         bus_format);
+                               break;
+                       }
                }
+
+               if (connector->display_info.bus_flags & 
DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
+                       dpi_c |= DPI_PIXEL_CLK_INVERT;
+
+               if (connector->display_info.bus_flags & DRM_BUS_FLAG_DE_LOW)
+                       dpi_c |= DPI_OUTPUT_ENABLE_INVERT;
        } else {
                /* Default to 24bit if no connector found. */
                dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT);
-- 
2.36.1

Reply via email to