aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
diff options
context:
space:
mode:
authorjilai wang <jilaiw@codeaurora.org>2015-04-02 17:49:01 -0400
committerRob Clark <robdclark@gmail.com>2015-08-15 18:27:10 -0400
commitc6a57a50ad562a2e6fc6ac3218b710caea73a58b (patch)
treec630cd3e4c5328655ebbd8ed1ce59b36ce753c30 /drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
parent2d3584eb871da2a6fa72e3d50781f33b0312589a (diff)
drm/msm/hdmi: add hdmi hdcp support (V3)
Add HDMI HDCP support including HDCP PartI/II/III authentication. V1: Initial Change V2: Address Bjorn&Rob's comments Refactor the authentication process to use single work instead of multiple work for different authentication stages. V3: Update to align with qcom SCM api. Signed-off-by: Jilai Wang <jilaiw@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/msm/hdmi/hdmi_bridge.c')
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi_bridge.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
index a7a1d8267cf0..1dd093e3451c 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_bridge.c
@@ -102,6 +102,9 @@ static void hdmi_bridge_pre_enable(struct drm_bridge *bridge)
102 102
103 phy->funcs->powerup(phy, hdmi->pixclock); 103 phy->funcs->powerup(phy, hdmi->pixclock);
104 hdmi_set_mode(hdmi, true); 104 hdmi_set_mode(hdmi, true);
105
106 if (hdmi->hdcp_ctrl)
107 hdmi_hdcp_on(hdmi->hdcp_ctrl);
105} 108}
106 109
107static void hdmi_bridge_enable(struct drm_bridge *bridge) 110static void hdmi_bridge_enable(struct drm_bridge *bridge)
@@ -118,6 +121,9 @@ static void hdmi_bridge_post_disable(struct drm_bridge *bridge)
118 struct hdmi *hdmi = hdmi_bridge->hdmi; 121 struct hdmi *hdmi = hdmi_bridge->hdmi;
119 struct hdmi_phy *phy = hdmi->phy; 122 struct hdmi_phy *phy = hdmi->phy;
120 123
124 if (hdmi->hdcp_ctrl)
125 hdmi_hdcp_off(hdmi->hdcp_ctrl);
126
121 DBG("power down"); 127 DBG("power down");
122 hdmi_set_mode(hdmi, false); 128 hdmi_set_mode(hdmi, false);
123 phy->funcs->powerdown(phy); 129 phy->funcs->powerdown(phy);
@@ -142,8 +148,6 @@ static void hdmi_bridge_mode_set(struct drm_bridge *bridge,
142 148
143 hdmi->pixclock = mode->clock * 1000; 149 hdmi->pixclock = mode->clock * 1000;
144 150
145 hdmi->hdmi_mode = drm_match_cea_mode(mode) > 1;
146
147 hstart = mode->htotal - mode->hsync_start; 151 hstart = mode->htotal - mode->hsync_start;
148 hend = mode->htotal - mode->hsync_start + mode->hdisplay; 152 hend = mode->htotal - mode->hsync_start + mode->hdisplay;
149 153