Skip to content

Commit c5d701e

Browse files
6by9pelwell
authored andcommitted
drm/vc4: dpi: Add override for RGB order
There are no MEDIA_BUS_FMT_* defines for GRB or BRG, and adding them is a pain. Add a DT override to allow setting the order. Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
1 parent f1a2a9a commit c5d701e

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

drivers/gpu/drm/vc4/vc4_dpi.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ struct vc4_dpi {
9595
struct clk *core_clock;
9696

9797
struct debugfs_regset32 regset;
98+
99+
int rgb_order_override;
98100
};
99101

100102
#define to_vc4_dpi(_encoder) \
@@ -205,6 +207,11 @@ static void vc4_dpi_encoder_enable(struct drm_encoder *encoder)
205207
}
206208
}
207209

210+
if (dpi->rgb_order_override >= 0) {
211+
dpi_c &= ~DPI_ORDER_MASK;
212+
dpi_c |= VC4_SET_FIELD(dpi->rgb_order_override, DPI_ORDER);
213+
}
214+
208215
if (connector->display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
209216
dpi_c |= DPI_PIXEL_CLK_INVERT;
210217

@@ -313,6 +320,7 @@ static int vc4_dpi_bind(struct device *dev, struct device *master, void *data)
313320
{
314321
struct platform_device *pdev = to_platform_device(dev);
315322
struct drm_device *drm = dev_get_drvdata(master);
323+
const char *rgb_order = NULL;
316324
struct vc4_dpi *dpi;
317325
int ret;
318326

@@ -361,6 +369,20 @@ static int vc4_dpi_bind(struct device *dev, struct device *master, void *data)
361369
if (ret)
362370
return ret;
363371

372+
dpi->rgb_order_override = -1;
373+
if (!of_property_read_string(dev->of_node, "rgb_order", &rgb_order)) {
374+
if (!strcmp(rgb_order, "rgb"))
375+
dpi->rgb_order_override = DPI_ORDER_RGB;
376+
else if (!strcmp(rgb_order, "bgr"))
377+
dpi->rgb_order_override = DPI_ORDER_BGR;
378+
else if (!strcmp(rgb_order, "grb"))
379+
dpi->rgb_order_override = DPI_ORDER_GRB;
380+
else if (!strcmp(rgb_order, "brg"))
381+
dpi->rgb_order_override = DPI_ORDER_BRG;
382+
else
383+
DRM_ERROR("Invalid dpi order %s - ignored\n", rgb_order);
384+
}
385+
364386
ret = drmm_encoder_init(drm, &dpi->encoder.base,
365387
&vc4_dpi_encoder_funcs,
366388
DRM_MODE_ENCODER_DPI,

0 commit comments

Comments
 (0)