@@ -624,7 +624,7 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
624
624
struct drm_display_mode * mode = & crtc_state -> adjusted_mode ;
625
625
struct drm_connector * conn = conn_state -> connector ;
626
626
struct drm_display_info * info = & conn -> display_info ;
627
- unsigned int cfg ;
627
+ unsigned int cfg , rgbcfg = 0 ;
628
628
629
629
priv -> panel_is_sharp = info -> bus_flags & DRM_BUS_FLAG_SHARP_SIGNALS ;
630
630
@@ -661,6 +661,9 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
661
661
case MEDIA_BUS_FMT_RGB888_1X24 :
662
662
cfg |= JZ_LCD_CFG_MODE_GENERIC_24BIT ;
663
663
break ;
664
+ case MEDIA_BUS_FMT_GBR888_3X8 :
665
+ rgbcfg = JZ_LCD_RGBC_ODD_GBR | JZ_LCD_RGBC_EVEN_GBR ;
666
+ fallthrough ;
664
667
case MEDIA_BUS_FMT_RGB888_3X8 :
665
668
cfg |= JZ_LCD_CFG_MODE_8BIT_SERIAL ;
666
669
break ;
@@ -671,6 +674,7 @@ static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
671
674
}
672
675
673
676
regmap_write (priv -> map , JZ_REG_LCD_CFG , cfg );
677
+ regmap_write (priv -> map , JZ_REG_LCD_RGBC , rgbcfg );
674
678
}
675
679
676
680
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,
688
692
689
693
switch (* info -> bus_formats ) {
690
694
case MEDIA_BUS_FMT_RGB888_3X8 :
695
+ case MEDIA_BUS_FMT_GBR888_3X8 :
691
696
mode -> crtc_clock = mode -> clock * 3 ;
692
697
mode -> crtc_hsync_start = mode -> hsync_start * 3 ;
693
698
mode -> crtc_hsync_end = mode -> hsync_end * 3 ;
0 commit comments