diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c index 39152e755a13e4..e5ea7d7ca83819 100644 --- a/drivers/gpu/drm/vc4/vc4_dpi.c +++ b/drivers/gpu/drm/vc4/vc4_dpi.c @@ -95,6 +95,8 @@ struct vc4_dpi { struct clk *core_clock; struct debugfs_regset32 regset; + + u32 rgb_order_override; }; #define to_vc4_dpi(_encoder) \ @@ -205,6 +207,11 @@ static void vc4_dpi_encoder_enable(struct drm_encoder *encoder) } } + if (dpi->rgb_order_override) { + dpi_c &= ~DPI_ORDER_MASK; + dpi_c |= VC4_SET_FIELD(dpi->rgb_order_override, DPI_ORDER); + } + if (connector->display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE) dpi_c |= DPI_PIXEL_CLK_INVERT; @@ -361,6 +368,12 @@ static int vc4_dpi_bind(struct device *dev, struct device *master, void *data) if (ret) return ret; + of_property_read_u32(dev->of_node, "rgb_order", &dpi->rgb_order_override); + if (dpi->rgb_order_override > DPI_ORDER_BRG) { + DRM_ERROR("DPI rgb_order override invalid - ignored\n"); + dpi->rgb_order_override = 0; + } + ret = drmm_encoder_init(drm, &dpi->encoder.base, &vc4_dpi_encoder_funcs, DRM_MODE_ENCODER_DPI,