summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-07-18 01:05:40 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-07-18 01:05:39 -0700
commita731719d4e6eadca049047ad250add841beb1b0e (patch)
tree576f4b90002850ac57a9c9cf86e20a2cba195a6c /drivers/gpu
parenteaa068f8051ac6b93269c8419d7a8ee9595755e4 (diff)
parent225c6e1feeda95ebf2c54e9324a64494c3bc2c2d (diff)
Merge "drm: msm: add skip_ddc support for hdmi display"
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c7
-rw-r--r--drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h1
-rw-r--r--drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c9
3 files changed, 14 insertions, 3 deletions
diff --git a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c
index 46cc521a09f3..302ed39d9218 100644
--- a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c
+++ b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.c
@@ -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)
diff --git a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h
index 9cf807e829c7..2aa8d9496c5b 100644
--- a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h
+++ b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi.h
@@ -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;
diff --git a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c
index bae6b1c84420..2d65fc924f07 100644
--- a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c
@@ -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;
}