aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-07-12 14:19:59 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-07-25 12:23:47 -0400
commit08d644add0e5f799a47dbe7849401606c522e59e (patch)
treefb16c7a3902748552285836d1bae82601f3bcacb /drivers/gpu/drm
parent66a9278eecbef1c746e7fac8f4bcb0485d7aa4d0 (diff)
drm/i915: add port parameter to intel_hdmi_init
Instead of having a giant if cascade to figure this out according to the passed-in register. We could do quite a bit more cleaning up and all by using the port at more places, but I think this should be part of a bigger rework to introduce a struct intel_digital_port which would keep track of all these things. I guess this will be part of some haswell-DP-induced refactoring. For now this rips out the big cascade, which is what annoyed me so much. v2: Add port variable name back for the func decl (I've tried to trick myself below the 80 char limit). Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c2
-rw-r--r--drivers/gpu/drm/i915/intel_display.c14
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h3
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c41
4 files changed, 22 insertions, 38 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 933c74859172..32604ac80204 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -250,7 +250,7 @@ void intel_ddi_init(struct drm_device *dev, enum port port)
250 case PORT_B: 250 case PORT_B:
251 case PORT_C: 251 case PORT_C:
252 case PORT_D: 252 case PORT_D:
253 intel_hdmi_init(dev, DDI_BUF_CTL(port)); 253 intel_hdmi_init(dev, DDI_BUF_CTL(port), port);
254 break; 254 break;
255 default: 255 default:
256 DRM_DEBUG_DRIVER("No handlers defined for port %d, skipping DDI initialization\n", 256 DRM_DEBUG_DRIVER("No handlers defined for port %d, skipping DDI initialization\n",
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 5c0a72606225..e86fd3977f73 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6798,16 +6798,16 @@ static void intel_setup_outputs(struct drm_device *dev)
6798 /* PCH SDVOB multiplex with HDMIB */ 6798 /* PCH SDVOB multiplex with HDMIB */
6799 found = intel_sdvo_init(dev, PCH_SDVOB, true); 6799 found = intel_sdvo_init(dev, PCH_SDVOB, true);
6800 if (!found) 6800 if (!found)
6801 intel_hdmi_init(dev, HDMIB); 6801 intel_hdmi_init(dev, HDMIB, PORT_B);
6802 if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED)) 6802 if (!found && (I915_READ(PCH_DP_B) & DP_DETECTED))
6803 intel_dp_init(dev, PCH_DP_B); 6803 intel_dp_init(dev, PCH_DP_B);
6804 } 6804 }
6805 6805
6806 if (I915_READ(HDMIC) & PORT_DETECTED) 6806 if (I915_READ(HDMIC) & PORT_DETECTED)
6807 intel_hdmi_init(dev, HDMIC); 6807 intel_hdmi_init(dev, HDMIC, PORT_C);
6808 6808
6809 if (!dpd_is_edp && I915_READ(HDMID) & PORT_DETECTED) 6809 if (!dpd_is_edp && I915_READ(HDMID) & PORT_DETECTED)
6810 intel_hdmi_init(dev, HDMID); 6810 intel_hdmi_init(dev, HDMID, PORT_D);
6811 6811
6812 if (I915_READ(PCH_DP_C) & DP_DETECTED) 6812 if (I915_READ(PCH_DP_C) & DP_DETECTED)
6813 intel_dp_init(dev, PCH_DP_C); 6813 intel_dp_init(dev, PCH_DP_C);
@@ -6821,13 +6821,13 @@ static void intel_setup_outputs(struct drm_device *dev)
6821 /* SDVOB multiplex with HDMIB */ 6821 /* SDVOB multiplex with HDMIB */
6822 found = intel_sdvo_init(dev, SDVOB, true); 6822 found = intel_sdvo_init(dev, SDVOB, true);
6823 if (!found) 6823 if (!found)
6824 intel_hdmi_init(dev, SDVOB); 6824 intel_hdmi_init(dev, SDVOB, PORT_B);
6825 if (!found && (I915_READ(DP_B) & DP_DETECTED)) 6825 if (!found && (I915_READ(DP_B) & DP_DETECTED))
6826 intel_dp_init(dev, DP_B); 6826 intel_dp_init(dev, DP_B);
6827 } 6827 }
6828 6828
6829 if (I915_READ(SDVOC) & PORT_DETECTED) 6829 if (I915_READ(SDVOC) & PORT_DETECTED)
6830 intel_hdmi_init(dev, SDVOC); 6830 intel_hdmi_init(dev, SDVOC, PORT_C);
6831 6831
6832 /* Shares lanes with HDMI on SDVOC */ 6832 /* Shares lanes with HDMI on SDVOC */
6833 if (I915_READ(DP_C) & DP_DETECTED) 6833 if (I915_READ(DP_C) & DP_DETECTED)
@@ -6840,7 +6840,7 @@ static void intel_setup_outputs(struct drm_device *dev)
6840 found = intel_sdvo_init(dev, SDVOB, true); 6840 found = intel_sdvo_init(dev, SDVOB, true);
6841 if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) { 6841 if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) {
6842 DRM_DEBUG_KMS("probing HDMI on SDVOB\n"); 6842 DRM_DEBUG_KMS("probing HDMI on SDVOB\n");
6843 intel_hdmi_init(dev, SDVOB); 6843 intel_hdmi_init(dev, SDVOB, PORT_B);
6844 } 6844 }
6845 6845
6846 if (!found && SUPPORTS_INTEGRATED_DP(dev)) { 6846 if (!found && SUPPORTS_INTEGRATED_DP(dev)) {
@@ -6860,7 +6860,7 @@ static void intel_setup_outputs(struct drm_device *dev)
6860 6860
6861 if (SUPPORTS_INTEGRATED_HDMI(dev)) { 6861 if (SUPPORTS_INTEGRATED_HDMI(dev)) {
6862 DRM_DEBUG_KMS("probing HDMI on SDVOC\n"); 6862 DRM_DEBUG_KMS("probing HDMI on SDVOC\n");
6863 intel_hdmi_init(dev, SDVOC); 6863 intel_hdmi_init(dev, SDVOC, PORT_C);
6864 } 6864 }
6865 if (SUPPORTS_INTEGRATED_DP(dev)) { 6865 if (SUPPORTS_INTEGRATED_DP(dev)) {
6866 DRM_DEBUG_KMS("probing DP_C\n"); 6866 DRM_DEBUG_KMS("probing DP_C\n");
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 76ba554f6592..d234f1af5db5 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -364,7 +364,8 @@ extern void intel_attach_force_audio_property(struct drm_connector *connector);
364extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector); 364extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector);
365 365
366extern void intel_crt_init(struct drm_device *dev); 366extern void intel_crt_init(struct drm_device *dev);
367extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg); 367extern void intel_hdmi_init(struct drm_device *dev,
368 int sdvox_reg, enum port port);
368extern struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder); 369extern struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder);
369extern void intel_dip_infoframe_csum(struct dip_infoframe *avi_if); 370extern void intel_dip_infoframe_csum(struct dip_infoframe *avi_if);
370extern bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, 371extern bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg,
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 593b8fe2e00a..e4c37bb572e8 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -889,7 +889,7 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c
889 intel_attach_broadcast_rgb_property(connector); 889 intel_attach_broadcast_rgb_property(connector);
890} 890}
891 891
892void intel_hdmi_init(struct drm_device *dev, int sdvox_reg) 892void intel_hdmi_init(struct drm_device *dev, int sdvox_reg, enum port port)
893{ 893{
894 struct drm_i915_private *dev_priv = dev->dev_private; 894 struct drm_i915_private *dev_priv = dev->dev_private;
895 struct drm_connector *connector; 895 struct drm_connector *connector;
@@ -925,40 +925,23 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
925 925
926 intel_encoder->cloneable = false; 926 intel_encoder->cloneable = false;
927 927
928 /* Set up the DDC bus. */ 928 intel_hdmi->ddi_port = port;
929 if (sdvox_reg == SDVOB) { 929 switch (port) {
930 case PORT_B:
930 intel_hdmi->ddc_bus = GMBUS_PORT_DPB; 931 intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
931 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; 932 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
932 } else if (sdvox_reg == SDVOC) { 933 break;
933 intel_hdmi->ddc_bus = GMBUS_PORT_DPC; 934 case PORT_C:
934 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
935 } else if (sdvox_reg == HDMIB) {
936 intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
937 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
938 } else if (sdvox_reg == HDMIC) {
939 intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
940 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
941 } else if (sdvox_reg == HDMID) {
942 intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
943 dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
944 } else if (sdvox_reg == DDI_BUF_CTL(PORT_B)) {
945 DRM_DEBUG_DRIVER("LPT: detected output on DDI B\n");
946 intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
947 intel_hdmi->ddi_port = PORT_B;
948 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
949 } else if (sdvox_reg == DDI_BUF_CTL(PORT_C)) {
950 DRM_DEBUG_DRIVER("LPT: detected output on DDI C\n");
951 intel_hdmi->ddc_bus = GMBUS_PORT_DPC; 935 intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
952 intel_hdmi->ddi_port = PORT_C;
953 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; 936 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
954 } else if (sdvox_reg == DDI_BUF_CTL(PORT_D)) { 937 break;
955 DRM_DEBUG_DRIVER("LPT: detected output on DDI D\n"); 938 case PORT_D:
956 intel_hdmi->ddc_bus = GMBUS_PORT_DPD; 939 intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
957 intel_hdmi->ddi_port = PORT_D;
958 dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; 940 dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
959 } else { 941 break;
960 /* If we got an unknown sdvox_reg, things are pretty much broken 942 case PORT_A:
961 * in a way that we should let the kernel know about it */ 943 /* Internal port only for eDP. */
944 default:
962 BUG(); 945 BUG();
963 } 946 }
964 947