drm/i915: Add lvds_channel module option
authorTakashi Iwai <tiwai@suse.de>
Tue, 20 Mar 2012 12:07:06 +0000 (13:07 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 22 Mar 2012 22:23:45 +0000 (23:23 +0100)
Add a new module optoin lvds_channel to specify the LVDS channel mode
explicitly instead of probing the LVDS register value set by BIOS.
This will be helpful when VBT is broken or incompatible with the
current code.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42842
Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_drv.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/intel_display.c

index 0e797d3cb5f4fea45332a63340b9afea644cf6ff..8e2c52ec5a9e81ac5de4dd7d3a82010a561ed622 100644 (file)
@@ -80,6 +80,12 @@ MODULE_PARM_DESC(lvds_downclock,
                "Use panel (LVDS/eDP) downclocking for power savings "
                "(default: false)");
 
+int i915_lvds_channel_mode __read_mostly;
+module_param_named(lvds_channel_mode, i915_lvds_channel_mode, int, 0600);
+MODULE_PARM_DESC(lvds_channel_mode,
+                "Specify LVDS channel mode "
+                "(0=probe BIOS [default], 1=single-channel, 2=dual-channel)");
+
 int i915_panel_use_ssc __read_mostly = -1;
 module_param_named(lvds_use_ssc, i915_panel_use_ssc, int, 0600);
 MODULE_PARM_DESC(lvds_use_ssc,
index 4cbed7f23e72a6c30e5f8e1bb7820ee1cb327e36..f2f9dd933ce4d39b0e42c8003e0a4e2138837144 100644 (file)
@@ -1064,6 +1064,7 @@ extern int i915_panel_ignore_lid __read_mostly;
 extern unsigned int i915_powersave __read_mostly;
 extern int i915_semaphores __read_mostly;
 extern unsigned int i915_lvds_downclock __read_mostly;
+extern int i915_lvds_channel_mode __read_mostly;
 extern int i915_panel_use_ssc __read_mostly;
 extern int i915_vbt_sdvo_panel_type __read_mostly;
 extern int i915_enable_rc6 __read_mostly;
index a76ac2eb99384977dfff324052236987fba85dae..a0e31660381cb2e2daed3ebd0b81c6e274f24b01 100644 (file)
@@ -365,6 +365,10 @@ static bool is_dual_link_lvds(struct drm_i915_private *dev_priv,
 {
        unsigned int val;
 
+       /* use the module option value if specified */
+       if (i915_lvds_channel_mode > 0)
+               return i915_lvds_channel_mode == 2;
+
        if (dev_priv->lvds_val)
                val = dev_priv->lvds_val;
        else {