drm: msm: add skip_ddc support for hdmi display

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>
This commit is contained in:
Suprith Malligere Shankaregowda 2018-07-05 17:24:45 +05:30 committed by Gerrit - the friendly Code Review server
parent 65a0403464
commit 225c6e1fee
4 changed files with 15 additions and 3 deletions

View 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

View 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)

View 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;

View 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;
}