aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index fee23cf93a2b..cd0f649b57a5 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -4333,6 +4333,9 @@ intel_dp_short_pulse(struct intel_dp *intel_dp)
4333 DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n"); 4333 DRM_DEBUG_DRIVER("CP or sink specific irq unhandled\n");
4334 } 4334 }
4335 4335
4336 /* Handle CEC interrupts, if any */
4337 drm_dp_cec_irq(&intel_dp->aux);
4338
4336 /* defer to the hotplug work for link retraining if needed */ 4339 /* defer to the hotplug work for link retraining if needed */
4337 if (intel_dp_needs_link_retrain(intel_dp)) 4340 if (intel_dp_needs_link_retrain(intel_dp))
4338 return false; 4341 return false;
@@ -4642,6 +4645,7 @@ intel_dp_set_edid(struct intel_dp *intel_dp)
4642 intel_connector->detect_edid = edid; 4645 intel_connector->detect_edid = edid;
4643 4646
4644 intel_dp->has_audio = drm_detect_monitor_audio(edid); 4647 intel_dp->has_audio = drm_detect_monitor_audio(edid);
4648 drm_dp_cec_set_edid(&intel_dp->aux, edid);
4645} 4649}
4646 4650
4647static void 4651static void
@@ -4649,6 +4653,7 @@ intel_dp_unset_edid(struct intel_dp *intel_dp)
4649{ 4653{
4650 struct intel_connector *intel_connector = intel_dp->attached_connector; 4654 struct intel_connector *intel_connector = intel_dp->attached_connector;
4651 4655
4656 drm_dp_cec_unset_edid(&intel_dp->aux);
4652 kfree(intel_connector->detect_edid); 4657 kfree(intel_connector->detect_edid);
4653 intel_connector->detect_edid = NULL; 4658 intel_connector->detect_edid = NULL;
4654 4659
@@ -4837,6 +4842,7 @@ static int
4837intel_dp_connector_register(struct drm_connector *connector) 4842intel_dp_connector_register(struct drm_connector *connector)
4838{ 4843{
4839 struct intel_dp *intel_dp = intel_attached_dp(connector); 4844 struct intel_dp *intel_dp = intel_attached_dp(connector);
4845 struct drm_device *dev = connector->dev;
4840 int ret; 4846 int ret;
4841 4847
4842 ret = intel_connector_register(connector); 4848 ret = intel_connector_register(connector);
@@ -4849,13 +4855,20 @@ intel_dp_connector_register(struct drm_connector *connector)
4849 intel_dp->aux.name, connector->kdev->kobj.name); 4855 intel_dp->aux.name, connector->kdev->kobj.name);
4850 4856
4851 intel_dp->aux.dev = connector->kdev; 4857 intel_dp->aux.dev = connector->kdev;
4852 return drm_dp_aux_register(&intel_dp->aux); 4858 ret = drm_dp_aux_register(&intel_dp->aux);
4859 if (!ret)
4860 drm_dp_cec_register_connector(&intel_dp->aux,
4861 connector->name, dev->dev);
4862 return ret;
4853} 4863}
4854 4864
4855static void 4865static void
4856intel_dp_connector_unregister(struct drm_connector *connector) 4866intel_dp_connector_unregister(struct drm_connector *connector)
4857{ 4867{
4858 drm_dp_aux_unregister(&intel_attached_dp(connector)->aux); 4868 struct intel_dp *intel_dp = intel_attached_dp(connector);
4869
4870 drm_dp_cec_unregister_connector(&intel_dp->aux);
4871 drm_dp_aux_unregister(&intel_dp->aux);
4859 intel_connector_unregister(connector); 4872 intel_connector_unregister(connector);
4860} 4873}
4861 4874
@@ -6051,7 +6064,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
6051 edid = drm_get_edid(connector, &intel_dp->aux.ddc); 6064 edid = drm_get_edid(connector, &intel_dp->aux.ddc);
6052 if (edid) { 6065 if (edid) {
6053 if (drm_add_edid_modes(connector, edid)) { 6066 if (drm_add_edid_modes(connector, edid)) {
6054 drm_mode_connector_update_edid_property(connector, 6067 drm_connector_update_edid_property(connector,
6055 edid); 6068 edid);
6056 } else { 6069 } else {
6057 kfree(edid); 6070 kfree(edid);
@@ -6140,8 +6153,8 @@ static void intel_dp_modeset_retry_work_fn(struct work_struct *work)
6140 /* Set connector link status to BAD and send a Uevent to notify 6153 /* Set connector link status to BAD and send a Uevent to notify
6141 * userspace to do a modeset. 6154 * userspace to do a modeset.
6142 */ 6155 */
6143 drm_mode_connector_set_link_status_property(connector, 6156 drm_connector_set_link_status_property(connector,
6144 DRM_MODE_LINK_STATUS_BAD); 6157 DRM_MODE_LINK_STATUS_BAD);
6145 mutex_unlock(&connector->dev->mode_config.mutex); 6158 mutex_unlock(&connector->dev->mode_config.mutex);
6146 /* Send Hotplug uevent so userspace can reprobe */ 6159 /* Send Hotplug uevent so userspace can reprobe */
6147 drm_kms_helper_hotplug_event(connector->dev); 6160 drm_kms_helper_hotplug_event(connector->dev);