diff options
author | Dave Airlie <airlied@redhat.com> | 2013-06-27 19:50:34 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-06-27 19:50:34 -0400 |
commit | 28419261b09aa3a5118647b1ed93809ca97c5354 (patch) | |
tree | 5098381ee695009fce1fa4a25ba34d487eb4f35e /drivers/gpu/drm/i915/intel_lvds.c | |
parent | 4a009085978de90db40f9f38bcfad501f86ca959 (diff) | |
parent | 854c94a7854a4fabdd7db451cf1774e6dcba6bab (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.c | 23 |
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 | */ |
883 | bool intel_lvds_init(struct drm_device *dev) | 880 | void 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 | ||
1102 | failed: | 1099 | failed: |
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 | } |