diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-07-12 14:19:59 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-07-25 12:23:47 -0400 |
commit | 08d644add0e5f799a47dbe7849401606c522e59e (patch) | |
tree | fb16c7a3902748552285836d1bae82601f3bcacb /drivers/gpu/drm | |
parent | 66a9278eecbef1c746e7fac8f4bcb0485d7aa4d0 (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.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 41 |
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); | |||
364 | extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector); | 364 | extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector); |
365 | 365 | ||
366 | extern void intel_crt_init(struct drm_device *dev); | 366 | extern void intel_crt_init(struct drm_device *dev); |
367 | extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg); | 367 | extern void intel_hdmi_init(struct drm_device *dev, |
368 | int sdvox_reg, enum port port); | ||
368 | extern struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder); | 369 | extern struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder); |
369 | extern void intel_dip_infoframe_csum(struct dip_infoframe *avi_if); | 370 | extern void intel_dip_infoframe_csum(struct dip_infoframe *avi_if); |
370 | extern bool intel_sdvo_init(struct drm_device *dev, uint32_t sdvo_reg, | 371 | extern 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 | ||
892 | void intel_hdmi_init(struct drm_device *dev, int sdvox_reg) | 892 | void 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 | ||