aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_lvds.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2013-06-27 19:50:34 -0400
committerDave Airlie <airlied@redhat.com>2013-06-27 19:50:34 -0400
commit28419261b09aa3a5118647b1ed93809ca97c5354 (patch)
tree5098381ee695009fce1fa4a25ba34d487eb4f35e /drivers/gpu/drm/i915/intel_lvds.c
parent4a009085978de90db40f9f38bcfad501f86ca959 (diff)
parent854c94a7854a4fabdd7db451cf1774e6dcba6bab (diff)
Merge tag 'drm-intel-next-2013-06-18' of git://people.freedesktop.org/~danvet/drm-intel into drm-next
Last 3.11 feature pull. I have a few odds bits and pieces and fixes in my queue, I'll sort them out later on to see what's for 3.11-fixes and what's for 3.12. But nothing to hold this here up imo. Highlights: - more hangcheck work from Mika and Chris to prepare for arb robustness - trickle feed fixes from Ville - first parts of the shared pch pll rework, with some basic hw state readout and cross-checking (this shuts up the confused pch pll refcount WARN that Linus just recently forwarded) - Haswell audio power well support from Wang Xingchao (alsa bits acked by Takashi) - some cleanups and asserts sprinkling around the plane/gamma enabling sequence from Ville - more gtt refactoring from Ben - clear up the adjusted->mode vs. pixel clock vs. port clock confusion - 30bpp support, this time for real hopefully * tag 'drm-intel-next-2013-06-18' of git://people.freedesktop.org/~danvet/drm-intel: (97 commits) drm/i915: remove a superflous semi-colon drm/i915: Kill useless "Enable panel fitter" comments drm/i915: Remove extra "ring" from error message drm/i915: simplify the reduced clock handling for pch plls drm/i915: stop killing pfit on i9xx drm/i915: explicitly set up PIPECONF (and gamma table) on haswell drm/i915: set up PIPECONF explicitly for i9xx/vlv platforms drm/i915: set up PIPECONF explicitly on ilk-ivb drm/i915: find guilty batch buffer on ring resets drm/i915: store ring hangcheck action drm/i915: add batch bo to i915_add_request() drm/i915: change i915_add_request to macro drm/i915: add i915_gem_context_get_hang_stats() drm/i915: add struct i915_ctx_hang_stats drm/i915: Try harder to disable trickle feed on VLV drm/i915: fix up pch pll enabling for pixel multipliers drm/i915: hw state readout and cross-checking for shared dplls drm/i915: WARN on lack of shared dpll drm/i915: split up intel_modeset_check_state drm/i915: extract readout_hw_state from setup_hw_state ... Conflicts: drivers/gpu/drm/i915/intel_display.c drivers/gpu/drm/i915/intel_fb.c drivers/gpu/drm/i915/intel_sdvo.c
Diffstat (limited to 'drivers/gpu/drm/i915/intel_lvds.c')
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 0ef8b4dc835f..2abb2d3c727b 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -264,9 +264,6 @@ static bool intel_lvds_compute_config(struct intel_encoder *intel_encoder,
264 return false; 264 return false;
265 } 265 }
266 266
267 if (intel_encoder_check_is_cloned(&lvds_encoder->base))
268 return false;
269
270 if ((I915_READ(lvds_encoder->reg) & LVDS_A3_POWER_MASK) == 267 if ((I915_READ(lvds_encoder->reg) & LVDS_A3_POWER_MASK) ==
271 LVDS_A3_POWER_UP) 268 LVDS_A3_POWER_UP)
272 lvds_bpp = 8*3; 269 lvds_bpp = 8*3;
@@ -880,7 +877,7 @@ static bool intel_lvds_supported(struct drm_device *dev)
880 * Create the connector, register the LVDS DDC bus, and try to figure out what 877 * Create the connector, register the LVDS DDC bus, and try to figure out what
881 * modes we can display on the LVDS panel (if present). 878 * modes we can display on the LVDS panel (if present).
882 */ 879 */
883bool intel_lvds_init(struct drm_device *dev) 880void intel_lvds_init(struct drm_device *dev)
884{ 881{
885 struct drm_i915_private *dev_priv = dev->dev_private; 882 struct drm_i915_private *dev_priv = dev->dev_private;
886 struct intel_lvds_encoder *lvds_encoder; 883 struct intel_lvds_encoder *lvds_encoder;
@@ -898,35 +895,35 @@ bool intel_lvds_init(struct drm_device *dev)
898 u8 pin; 895 u8 pin;
899 896
900 if (!intel_lvds_supported(dev)) 897 if (!intel_lvds_supported(dev))
901 return false; 898 return;
902 899
903 /* Skip init on machines we know falsely report LVDS */ 900 /* Skip init on machines we know falsely report LVDS */
904 if (dmi_check_system(intel_no_lvds)) 901 if (dmi_check_system(intel_no_lvds))
905 return false; 902 return;
906 903
907 pin = GMBUS_PORT_PANEL; 904 pin = GMBUS_PORT_PANEL;
908 if (!lvds_is_present_in_vbt(dev, &pin)) { 905 if (!lvds_is_present_in_vbt(dev, &pin)) {
909 DRM_DEBUG_KMS("LVDS is not present in VBT\n"); 906 DRM_DEBUG_KMS("LVDS is not present in VBT\n");
910 return false; 907 return;
911 } 908 }
912 909
913 if (HAS_PCH_SPLIT(dev)) { 910 if (HAS_PCH_SPLIT(dev)) {
914 if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0) 911 if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
915 return false; 912 return;
916 if (dev_priv->vbt.edp_support) { 913 if (dev_priv->vbt.edp_support) {
917 DRM_DEBUG_KMS("disable LVDS for eDP support\n"); 914 DRM_DEBUG_KMS("disable LVDS for eDP support\n");
918 return false; 915 return;
919 } 916 }
920 } 917 }
921 918
922 lvds_encoder = kzalloc(sizeof(struct intel_lvds_encoder), GFP_KERNEL); 919 lvds_encoder = kzalloc(sizeof(struct intel_lvds_encoder), GFP_KERNEL);
923 if (!lvds_encoder) 920 if (!lvds_encoder)
924 return false; 921 return;
925 922
926 lvds_connector = kzalloc(sizeof(struct intel_lvds_connector), GFP_KERNEL); 923 lvds_connector = kzalloc(sizeof(struct intel_lvds_connector), GFP_KERNEL);
927 if (!lvds_connector) { 924 if (!lvds_connector) {
928 kfree(lvds_encoder); 925 kfree(lvds_encoder);
929 return false; 926 return;
930 } 927 }
931 928
932 lvds_encoder->attached_connector = lvds_connector; 929 lvds_encoder->attached_connector = lvds_connector;
@@ -1097,7 +1094,7 @@ out:
1097 intel_panel_init(&intel_connector->panel, fixed_mode); 1094 intel_panel_init(&intel_connector->panel, fixed_mode);
1098 intel_panel_setup_backlight(connector); 1095 intel_panel_setup_backlight(connector);
1099 1096
1100 return true; 1097 return;
1101 1098
1102failed: 1099failed:
1103 DRM_DEBUG_KMS("No LVDS modes found, disabling.\n"); 1100 DRM_DEBUG_KMS("No LVDS modes found, disabling.\n");
@@ -1107,5 +1104,5 @@ failed:
1107 drm_mode_destroy(dev, fixed_mode); 1104 drm_mode_destroy(dev, fixed_mode);
1108 kfree(lvds_encoder); 1105 kfree(lvds_encoder);
1109 kfree(lvds_connector); 1106 kfree(lvds_connector);
1110 return false; 1107 return;
1111} 1108}