From: Dharma Balasubiramani <[email protected]>

Add support for encoder type "DRM_MODE_ENCODER_LVDS" with the following
bus formats:
        - RGB888_1X7X4_SPWG
        - RGB888_1X7X4_JEIDA
        - RGB666_1X7X3_SPWG
        - RGB666_1X18

Signed-off-by: Dharma Balasubiramani <[email protected]>
[[email protected]: move modifications inside the
atmel_xlcdc_connector_output_lvds fn]
Signed-off-by: Manikandan Muralidharan <[email protected]>
---
 .../gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c    | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c 
b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index e0efc7309b1b..beb825fc4d5d 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -357,6 +357,42 @@ static int atmel_xlcdc_connector_output_dsi(struct 
drm_encoder *encoder,
        return supported_fmts;
 }
 
+static int atmel_xlcdc_connector_output_lvds(struct drm_encoder *encoder,
+                                            struct drm_display_info *info)
+{
+       int j;
+       unsigned int supported_fmts = 0;
+
+       switch (atmel_hlcdc_encoder_get_bus_fmt(encoder)) {
+       case 0:
+               break;
+       case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
+       case MEDIA_BUS_FMT_RGB666_1X18:
+               return ATMEL_HLCDC_RGB666_OUTPUT;
+       case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
+       case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
+               return ATMEL_HLCDC_RGB888_OUTPUT;
+       default:
+               return -EINVAL;
+       }
+
+       for (j = 0; j < info->num_bus_formats; j++) {
+               switch (info->bus_formats[j]) {
+               case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
+               case MEDIA_BUS_FMT_RGB666_1X18:
+                       supported_fmts |= ATMEL_HLCDC_RGB666_OUTPUT;
+                       break;
+               case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
+               case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
+                       supported_fmts |= ATMEL_HLCDC_RGB888_OUTPUT;
+                       break;
+               default:
+                       break;
+               }
+       }
+       return supported_fmts;
+}
+
 static int atmel_hlcdc_connector_output_mode(struct drm_connector_state *state)
 {
        struct drm_connector *connector = state->connector;
@@ -375,6 +411,8 @@ static int atmel_hlcdc_connector_output_mode(struct 
drm_connector_state *state)
         */
        if (encoder->encoder_type == DRM_MODE_ENCODER_DSI)
                return atmel_xlcdc_connector_output_dsi(encoder, info);
+       else if (encoder->encoder_type == DRM_MODE_ENCODER_LVDS)
+               return atmel_xlcdc_connector_output_lvds(encoder, info);
 
        switch (atmel_hlcdc_encoder_get_bus_fmt(encoder)) {
        case 0:
-- 
2.25.1

Reply via email to