drm/i915: disable LVDS downclock by default
Many platform support this feature, and it can provide significant power savings when the reduced refresh rate is low. However, on some platforms a secondary (reduced) timing is provided but not actually supported by the hardware. This results in undesirable flicker at runtime. So disable the feature by default, but allow users to opt-in to the reduced clock behavior with a new module parameter, lvds_downclock, that can be set to 1 to enable the feature. Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Родитель
21bd770b9c
Коммит
33814341f2
|
@ -45,6 +45,9 @@ module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
|
|||
unsigned int i915_powersave = 1;
|
||||
module_param_named(powersave, i915_powersave, int, 0400);
|
||||
|
||||
unsigned int i915_lvds_downclock = 0;
|
||||
module_param_named(lvds_downclock, i915_lvds_downclock, int, 0400);
|
||||
|
||||
static struct drm_driver driver;
|
||||
|
||||
#define INTEL_VGA_DEVICE(id, info) { \
|
||||
|
|
|
@ -722,6 +722,7 @@ extern struct drm_ioctl_desc i915_ioctls[];
|
|||
extern int i915_max_ioctl;
|
||||
extern unsigned int i915_fbpercrtc;
|
||||
extern unsigned int i915_powersave;
|
||||
extern unsigned int i915_lvds_downclock;
|
||||
|
||||
extern void i915_save_display(struct drm_device *dev);
|
||||
extern void i915_restore_display(struct drm_device *dev);
|
||||
|
|
|
@ -197,7 +197,8 @@ parse_lfp_panel_data(struct drm_i915_private *dev_priv,
|
|||
memset(temp_mode, 0, sizeof(*temp_mode));
|
||||
}
|
||||
kfree(temp_mode);
|
||||
if (temp_downclock < panel_fixed_mode->clock) {
|
||||
if (temp_downclock < panel_fixed_mode->clock &&
|
||||
i915_lvds_downclock) {
|
||||
dev_priv->lvds_downclock_avail = 1;
|
||||
dev_priv->lvds_downclock = temp_downclock;
|
||||
DRM_DEBUG_KMS("LVDS downclock is found in VBT. ",
|
||||
|
|
|
@ -926,7 +926,8 @@ static void intel_find_lvds_downclock(struct drm_device *dev,
|
|||
}
|
||||
}
|
||||
mutex_unlock(&dev->mode_config.mutex);
|
||||
if (temp_downclock < panel_fixed_mode->clock) {
|
||||
if (temp_downclock < panel_fixed_mode->clock &&
|
||||
i915_lvds_downclock) {
|
||||
/* We found the downclock for LVDS. */
|
||||
dev_priv->lvds_downclock_avail = 1;
|
||||
dev_priv->lvds_downclock = temp_downclock;
|
||||
|
|
Загрузка…
Ссылка в новой задаче