mirror of
https://github.com/torvalds/linux.git
synced 2024-11-07 12:41:55 +00:00
drm/i915: Set the LVDS_BORDER when using LVDS scaling mode
According to the spec the LVDS_BORDER_ENABLE bit decides whether the border data should be included in the active display and data sent to the panel. Border should be used when in VGA centered (un-scaled) mode or when scaling a 4:3 source image to a wide screen panel (typical 16:9). So when the LVDS scaling is used, decide whether the LVDS_BORDER should be enabled or not according to the current scaling mode. At the same time fix the typo error in LVDS center scaling mode. https://bugs.freedesktop.org/show_bug.cgi?id=23789 Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> tested-by: Zhao Jian <jian.zhao@intel.com> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
9216d44dc1
commit
a3e17eb8f4
@ -492,6 +492,8 @@ typedef struct drm_i915_private {
|
|||||||
struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
|
struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
|
||||||
} mm;
|
} mm;
|
||||||
struct sdvo_device_mapping sdvo_mappings[2];
|
struct sdvo_device_mapping sdvo_mappings[2];
|
||||||
|
/* indicate whether the LVDS_BORDER should be enabled or not */
|
||||||
|
unsigned int lvds_border_bits;
|
||||||
|
|
||||||
/* Reclocking support */
|
/* Reclocking support */
|
||||||
bool render_reclock_avail;
|
bool render_reclock_avail;
|
||||||
|
@ -968,6 +968,8 @@
|
|||||||
#define LVDS_PORT_EN (1 << 31)
|
#define LVDS_PORT_EN (1 << 31)
|
||||||
/* Selects pipe B for LVDS data. Must be set on pre-965. */
|
/* Selects pipe B for LVDS data. Must be set on pre-965. */
|
||||||
#define LVDS_PIPEB_SELECT (1 << 30)
|
#define LVDS_PIPEB_SELECT (1 << 30)
|
||||||
|
/* Enable border for unscaled (or aspect-scaled) display */
|
||||||
|
#define LVDS_BORDER_ENABLE (1 << 15)
|
||||||
/*
|
/*
|
||||||
* Enables the A0-A2 data pairs and CLKA, containing 18 bits of color data per
|
* Enables the A0-A2 data pairs and CLKA, containing 18 bits of color data per
|
||||||
* pixel.
|
* pixel.
|
||||||
|
@ -2936,6 +2936,8 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
|
|||||||
|
|
||||||
lvds = I915_READ(lvds_reg);
|
lvds = I915_READ(lvds_reg);
|
||||||
lvds |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP | LVDS_PIPEB_SELECT;
|
lvds |= LVDS_PORT_EN | LVDS_A0A2_CLKA_POWER_UP | LVDS_PIPEB_SELECT;
|
||||||
|
/* set the corresponsding LVDS_BORDER bit */
|
||||||
|
lvds |= dev_priv->lvds_border_bits;
|
||||||
/* Set the B0-B3 data pairs corresponding to whether we're going to
|
/* Set the B0-B3 data pairs corresponding to whether we're going to
|
||||||
* set the DPLLs for dual-channel mode or not.
|
* set the DPLLs for dual-channel mode or not.
|
||||||
*/
|
*/
|
||||||
|
@ -380,7 +380,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
|||||||
adjusted_mode->crtc_vblank_start + vsync_pos;
|
adjusted_mode->crtc_vblank_start + vsync_pos;
|
||||||
/* keep the vsync width constant */
|
/* keep the vsync width constant */
|
||||||
adjusted_mode->crtc_vsync_end =
|
adjusted_mode->crtc_vsync_end =
|
||||||
adjusted_mode->crtc_vblank_start + vsync_width;
|
adjusted_mode->crtc_vsync_start + vsync_width;
|
||||||
border = 1;
|
border = 1;
|
||||||
break;
|
break;
|
||||||
case DRM_MODE_SCALE_ASPECT:
|
case DRM_MODE_SCALE_ASPECT:
|
||||||
@ -525,6 +525,14 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
|
|||||||
out:
|
out:
|
||||||
lvds_priv->pfit_control = pfit_control;
|
lvds_priv->pfit_control = pfit_control;
|
||||||
lvds_priv->pfit_pgm_ratios = pfit_pgm_ratios;
|
lvds_priv->pfit_pgm_ratios = pfit_pgm_ratios;
|
||||||
|
/*
|
||||||
|
* When there exists the border, it means that the LVDS_BORDR
|
||||||
|
* should be enabled.
|
||||||
|
*/
|
||||||
|
if (border)
|
||||||
|
dev_priv->lvds_border_bits |= LVDS_BORDER_ENABLE;
|
||||||
|
else
|
||||||
|
dev_priv->lvds_border_bits &= ~(LVDS_BORDER_ENABLE);
|
||||||
/*
|
/*
|
||||||
* XXX: It would be nice to support lower refresh rates on the
|
* XXX: It would be nice to support lower refresh rates on the
|
||||||
* panels to reduce power consumption, and perhaps match the
|
* panels to reduce power consumption, and perhaps match the
|
||||||
|
Loading…
Reference in New Issue
Block a user