diff options
author | Eugeni Dodonov <eugeni.dodonov@intel.com> | 2012-05-09 14:37:28 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-19 16:39:50 -0400 |
commit | 7ceae0a55c52ca8a2a7cbdecc945e434fff77f94 (patch) | |
tree | 0a1a8ea1b0577a3c813aa4347bcb979e36cdb21f /drivers/gpu/drm/i915/intel_hdmi.c | |
parent | 0e72a5b55e706dafa3402611f6f9e082a810673d (diff) |
drm/i915: add support for DDI-controlled digital outputs
Those are driven by DDIs on Haswell architecture, so we need to keep track
of which DDI is being used on each output.
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_hdmi.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 8da8dfe1b4fa..3b0cf7197254 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
@@ -41,6 +41,7 @@ struct intel_hdmi { | |||
41 | struct intel_encoder base; | 41 | struct intel_encoder base; |
42 | u32 sdvox_reg; | 42 | u32 sdvox_reg; |
43 | int ddc_bus; | 43 | int ddc_bus; |
44 | int ddi_port; | ||
44 | uint32_t color_range; | 45 | uint32_t color_range; |
45 | bool has_hdmi_sink; | 46 | bool has_hdmi_sink; |
46 | bool has_audio; | 47 | bool has_audio; |
@@ -661,6 +662,24 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg) | |||
661 | intel_encoder->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT); | 662 | intel_encoder->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT); |
662 | intel_hdmi->ddc_bus = GMBUS_PORT_DPD; | 663 | intel_hdmi->ddc_bus = GMBUS_PORT_DPD; |
663 | dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; | 664 | dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; |
665 | } else if (sdvox_reg == DDI_BUF_CTL(PORT_B)) { | ||
666 | DRM_DEBUG_DRIVER("LPT: detected output on DDI B\n"); | ||
667 | intel_encoder->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT); | ||
668 | intel_hdmi->ddc_bus = GMBUS_PORT_DPB; | ||
669 | intel_hdmi->ddi_port = PORT_B; | ||
670 | dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; | ||
671 | } else if (sdvox_reg == DDI_BUF_CTL(PORT_C)) { | ||
672 | DRM_DEBUG_DRIVER("LPT: detected output on DDI C\n"); | ||
673 | intel_encoder->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT); | ||
674 | intel_hdmi->ddc_bus = GMBUS_PORT_DPC; | ||
675 | intel_hdmi->ddi_port = PORT_C; | ||
676 | dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; | ||
677 | } else if (sdvox_reg == DDI_BUF_CTL(PORT_D)) { | ||
678 | DRM_DEBUG_DRIVER("LPT: detected output on DDI D\n"); | ||
679 | intel_encoder->clone_mask = (1 << INTEL_HDMID_CLONE_BIT); | ||
680 | intel_hdmi->ddc_bus = GMBUS_PORT_DPD; | ||
681 | intel_hdmi->ddi_port = PORT_D; | ||
682 | dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; | ||
664 | } else { | 683 | } else { |
665 | /* If we got an unknown sdvox_reg, things are pretty much broken | 684 | /* If we got an unknown sdvox_reg, things are pretty much broken |
666 | * in a way that we should let the kernel know about it */ | 685 | * in a way that we should let the kernel know about it */ |