OSDN Git Service

drm: msm: add skip_ddc support for hdmi display
authorSuprith Malligere Shankaregowda <supgow@codeaurora.org>
Thu, 5 Jul 2018 11:54:45 +0000 (17:24 +0530)
committerGerrit - the friendly Code Review server <code-review@localhost>
Mon, 16 Jul 2018 05:11:04 +0000 (22:11 -0700)
HDMI display on auto boards has disabled pluggable function
and hardcoded 1080p mode for output. So ddc related function
should also be skipped. Otherwise, some error messages are
printed when accessing ddc.

Change-Id: I42694b0586dd870e7881b422cd3d6ee960276b17
Signed-off-by: Suprith Malligere Shankaregowda <supgow@codeaurora.org>
Signed-off-by: Guchun Chen <guchunc@codeaurora.org>
Documentation/devicetree/bindings/drm/msm/hdmi-display.txt
drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c
drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h
drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c

index 9329fb7..7621032 100644 (file)
@@ -8,6 +8,7 @@ Optional properties:
 - qcom,display-type: display type of this manager. It could be "primary",
   "secondary", "tertiary", etc.
 - qcom,non-pluggable: Boolean to indicate if display is non pluggable.
+- qcom,skip_ddc: Boolean to indicate if display skips ddc function.
 - qcom,customize-modes: Customized modes when it's non pluggable display.
 - qcom,customize-mode-id: Customized mode node.
 - qcom,mode-name: String which indicates the mode name which shall be used
index 46cc521..302ed39 100644 (file)
@@ -3069,6 +3069,8 @@ static int _sde_hdmi_parse_dt(struct device_node *node,
 {
        int rc = 0;
 
+       struct hdmi *hdmi = display->ctrl.ctrl;
+
        display->name = of_get_property(node, "label", NULL);
 
        display->display_type = of_get_property(node,
@@ -3079,6 +3081,11 @@ static int _sde_hdmi_parse_dt(struct device_node *node,
        display->non_pluggable = of_property_read_bool(node,
                                                "qcom,non-pluggable");
 
+       display->skip_ddc = of_property_read_bool(node,
+                                               "qcom,skip_ddc");
+       if (!display->non_pluggable)
+               hdmi_i2c_destroy(hdmi->i2c);
+
        rc = _sde_hdmi_parse_dt_modes(node, &display->mode_list,
                                        &display->num_of_modes);
        if (rc)
index 9cf807e..2aa8d94 100644 (file)
@@ -154,6 +154,7 @@ struct sde_hdmi {
        struct sde_edid_ctrl *edid_ctrl;
 
        bool non_pluggable;
+       bool skip_ddc;
        u32 num_of_modes;
        struct list_head mode_list;
        struct drm_display_mode mode;
index bae6b1c..2d65fc9 100644 (file)
@@ -512,8 +512,8 @@ static void _sde_hdmi_bridge_pre_enable(struct drm_bridge *bridge)
                }
                hdmi->power_on = true;
        }
-
-       _sde_hdmi_bridge_setup_scrambler(hdmi, &display->mode);
+       if (!display->skip_ddc)
+               _sde_hdmi_bridge_setup_scrambler(hdmi, &display->mode);
 
        if (phy)
                phy->funcs->powerup(phy, hdmi->pixclock);
@@ -822,6 +822,8 @@ static u32 _sde_hdmi_choose_best_format(struct hdmi *hdmi,
         */
        int dc_format;
        struct drm_connector *connector = hdmi->connector;
+       struct sde_connector *c_conn = to_sde_connector(connector);
+       struct sde_hdmi *display = (struct sde_hdmi *)c_conn->display;
 
        dc_format = sde_hdmi_sink_dc_support(connector, mode);
        if (dc_format & MSM_MODE_FLAG_RGB444_DC_ENABLE)
@@ -835,7 +837,8 @@ static u32 _sde_hdmi_choose_best_format(struct hdmi *hdmi,
        else if (mode->flags & DRM_MODE_FLAG_SUPPORTS_YUV)
                return MSM_MODE_FLAG_COLOR_FORMAT_YCBCR420;
 
-       SDE_ERROR("Can't get available best display format\n");
+       if (display && !display->non_pluggable)
+               SDE_ERROR("Can't get available best display format\n");
 
        return MSM_MODE_FLAG_COLOR_FORMAT_RGB444;
 }