Skip to content

Commit c34d7f8

Browse files
committed
drm/ingenic: Add support for serial 8-bit GBR panels
Signed-off-by: Paul Cercueil <[email protected]>
1 parent b1fb952 commit c34d7f8

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

drivers/gpu/drm/ingenic/ingenic-drm-drv.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
624624
struct drm_display_mode *mode = &crtc_state->adjusted_mode;
625625
struct drm_connector *conn = conn_state->connector;
626626
struct drm_display_info *info = &conn->display_info;
627-
unsigned int cfg;
627+
unsigned int cfg, rgbcfg = 0;
628628

629629
priv->panel_is_sharp = info->bus_flags & DRM_BUS_FLAG_SHARP_SIGNALS;
630630

@@ -661,6 +661,9 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
661661
case MEDIA_BUS_FMT_RGB888_1X24:
662662
cfg |= JZ_LCD_CFG_MODE_GENERIC_24BIT;
663663
break;
664+
case MEDIA_BUS_FMT_GBR888_3X8:
665+
rgbcfg = JZ_LCD_RGBC_ODD_GBR | JZ_LCD_RGBC_EVEN_GBR;
666+
fallthrough;
664667
case MEDIA_BUS_FMT_RGB888_3X8:
665668
cfg |= JZ_LCD_CFG_MODE_8BIT_SERIAL;
666669
break;
@@ -671,6 +674,7 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
671674
}
672675

673676
regmap_write(priv->map, JZ_REG_LCD_CFG, cfg);
677+
regmap_write(priv->map, JZ_REG_LCD_RGBC, rgbcfg);
674678
}
675679

676680
static int ingenic_drm_encoder_atomic_check(struct drm_encoder *encoder,
@@ -688,6 +692,7 @@ static int ingenic_drm_encoder_atomic_check(struct drm_encoder *encoder,
688692

689693
switch (*info->bus_formats) {
690694
case MEDIA_BUS_FMT_RGB888_3X8:
695+
case MEDIA_BUS_FMT_GBR888_3X8:
691696
mode->crtc_clock = mode->clock * 3;
692697
mode->crtc_hsync_start = mode->hsync_start * 3;
693698
mode->crtc_hsync_end = mode->hsync_end * 3;

drivers/gpu/drm/ingenic/ingenic-drm.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#define JZ_REG_LCD_SA1 0x54
3232
#define JZ_REG_LCD_FID1 0x58
3333
#define JZ_REG_LCD_CMD1 0x5C
34+
#define JZ_REG_LCD_RGBC 0x90
3435
#define JZ_REG_LCD_OSDC 0x100
3536
#define JZ_REG_LCD_OSDCTRL 0x104
3637
#define JZ_REG_LCD_OSDS 0x108
@@ -138,6 +139,19 @@
138139
#define JZ_LCD_STATE_SOF_IRQ BIT(4)
139140
#define JZ_LCD_STATE_DISABLED BIT(0)
140141

142+
#define JZ_LCD_RGBC_ODD_RGB (0x0 << 4)
143+
#define JZ_LCD_RGBC_ODD_RBG (0x1 << 4)
144+
#define JZ_LCD_RGBC_ODD_GRB (0x2 << 4)
145+
#define JZ_LCD_RGBC_ODD_GBR (0x3 << 4)
146+
#define JZ_LCD_RGBC_ODD_BRG (0x4 << 4)
147+
#define JZ_LCD_RGBC_ODD_BGR (0x5 << 4)
148+
#define JZ_LCD_RGBC_EVEN_RGB (0x0 << 0)
149+
#define JZ_LCD_RGBC_EVEN_RBG (0x1 << 0)
150+
#define JZ_LCD_RGBC_EVEN_GRB (0x2 << 0)
151+
#define JZ_LCD_RGBC_EVEN_GBR (0x3 << 0)
152+
#define JZ_LCD_RGBC_EVEN_BRG (0x4 << 0)
153+
#define JZ_LCD_RGBC_EVEN_BGR (0x5 << 0)
154+
141155
#define JZ_LCD_OSDC_OSDEN BIT(0)
142156
#define JZ_LCD_OSDC_F0EN BIT(3)
143157
#define JZ_LCD_OSDC_F1EN BIT(4)

0 commit comments

Comments
 (0)