| From c8d1e49f65c71ff7ea26672179aa54330b943255 Mon Sep 17 00:00:00 2001 |
| From: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Date: Mon, 16 Sep 2013 23:43:45 +0200 |
| Subject: drm/i915: re-layout intel_panel.c to obey 80 char limit |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Especially intel_gmch_panel_fitting was shifting way too much over the |
| right edge and also was way too long. So extract two helpers, one for |
| gen4+ and one for gen2/3. Now the entire thing is again almost |
| readable ... |
| |
| Spurred by checkpatch freaking out about a Ville's pipeconfig rework |
| in intel_panel.c |
| |
| Otherwise just two lines that needed appropriate breaking. |
| |
| Not functional change in this patch. |
| |
| Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Cc: Damien Lespiau <damien.lespiau@intel.com> |
| Reviewed-by: Jani Nikula <jani.nikula@intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 9084e7d27671bc463c09ae6f0d6dfeea5f74f041) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_panel.c | 152 +++++++++++++++++++++---------------- |
| 1 file changed, 88 insertions(+), 64 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c |
| index 90b87c750695..fdf9cb531684 100644 |
| --- a/drivers/gpu/drm/i915/intel_panel.c |
| +++ b/drivers/gpu/drm/i915/intel_panel.c |
| @@ -73,8 +73,10 @@ intel_pch_panel_fitting(struct intel_crtc *intel_crtc, |
| case DRM_MODE_SCALE_ASPECT: |
| /* Scale but preserve the aspect ratio */ |
| { |
| - u32 scaled_width = adjusted_mode->hdisplay * pipe_config->pipe_src_h; |
| - u32 scaled_height = pipe_config->pipe_src_w * adjusted_mode->vdisplay; |
| + u32 scaled_width = adjusted_mode->hdisplay |
| + * pipe_config->pipe_src_h; |
| + u32 scaled_height = pipe_config->pipe_src_w |
| + * adjusted_mode->vdisplay; |
| if (scaled_width > scaled_height) { /* pillar */ |
| width = scaled_height / pipe_config->pipe_src_h; |
| if (width & 1) |
| @@ -170,6 +172,83 @@ static inline u32 panel_fitter_scaling(u32 source, u32 target) |
| return (FACTOR * ratio + FACTOR/2) / FACTOR; |
| } |
| |
| +static void i965_scale_aspect(struct intel_crtc_config *pipe_config, |
| + u32 *pfit_control) |
| +{ |
| + struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode; |
| + u32 scaled_width = adjusted_mode->hdisplay * |
| + pipe_config->pipe_src_h; |
| + u32 scaled_height = pipe_config->pipe_src_w * |
| + adjusted_mode->vdisplay; |
| + |
| + /* 965+ is easy, it does everything in hw */ |
| + if (scaled_width > scaled_height) |
| + *pfit_control |= PFIT_ENABLE | |
| + PFIT_SCALING_PILLAR; |
| + else if (scaled_width < scaled_height) |
| + *pfit_control |= PFIT_ENABLE | |
| + PFIT_SCALING_LETTER; |
| + else if (adjusted_mode->hdisplay != pipe_config->pipe_src_w) |
| + *pfit_control |= PFIT_ENABLE | PFIT_SCALING_AUTO; |
| +} |
| + |
| +static void i9xx_scale_aspect(struct intel_crtc_config *pipe_config, |
| + u32 *pfit_control, u32 *pfit_pgm_ratios, |
| + u32 *border) |
| +{ |
| + struct drm_display_mode *adjusted_mode = &pipe_config->adjusted_mode; |
| + u32 scaled_width = adjusted_mode->hdisplay * |
| + pipe_config->pipe_src_h; |
| + u32 scaled_height = pipe_config->pipe_src_w * |
| + adjusted_mode->vdisplay; |
| + u32 bits; |
| + |
| + /* |
| + * For earlier chips we have to calculate the scaling |
| + * ratio by hand and program it into the |
| + * PFIT_PGM_RATIO register |
| + */ |
| + if (scaled_width > scaled_height) { /* pillar */ |
| + centre_horizontally(adjusted_mode, |
| + scaled_height / |
| + pipe_config->pipe_src_h); |
| + |
| + *border = LVDS_BORDER_ENABLE; |
| + if (pipe_config->pipe_src_h != adjusted_mode->vdisplay) { |
| + bits = panel_fitter_scaling(pipe_config->pipe_src_h, |
| + adjusted_mode->vdisplay); |
| + |
| + *pfit_pgm_ratios |= (bits << PFIT_HORIZ_SCALE_SHIFT | |
| + bits << PFIT_VERT_SCALE_SHIFT); |
| + *pfit_control |= (PFIT_ENABLE | |
| + VERT_INTERP_BILINEAR | |
| + HORIZ_INTERP_BILINEAR); |
| + } |
| + } else if (scaled_width < scaled_height) { /* letter */ |
| + centre_vertically(adjusted_mode, |
| + scaled_width / |
| + pipe_config->pipe_src_w); |
| + |
| + *border = LVDS_BORDER_ENABLE; |
| + if (pipe_config->pipe_src_w != adjusted_mode->hdisplay) { |
| + bits = panel_fitter_scaling(pipe_config->pipe_src_w, |
| + adjusted_mode->hdisplay); |
| + |
| + *pfit_pgm_ratios |= (bits << PFIT_HORIZ_SCALE_SHIFT | |
| + bits << PFIT_VERT_SCALE_SHIFT); |
| + *pfit_control |= (PFIT_ENABLE | |
| + VERT_INTERP_BILINEAR | |
| + HORIZ_INTERP_BILINEAR); |
| + } |
| + } else { |
| + /* Aspects match, Let hw scale both directions */ |
| + *pfit_control |= (PFIT_ENABLE | |
| + VERT_AUTO_SCALE | HORIZ_AUTO_SCALE | |
| + VERT_INTERP_BILINEAR | |
| + HORIZ_INTERP_BILINEAR); |
| + } |
| +} |
| + |
| void intel_gmch_panel_fitting(struct intel_crtc *intel_crtc, |
| struct intel_crtc_config *pipe_config, |
| int fitting_mode) |
| @@ -197,67 +276,11 @@ void intel_gmch_panel_fitting(struct intel_crtc *intel_crtc, |
| break; |
| case DRM_MODE_SCALE_ASPECT: |
| /* Scale but preserve the aspect ratio */ |
| - if (INTEL_INFO(dev)->gen >= 4) { |
| - u32 scaled_width = adjusted_mode->hdisplay * |
| - pipe_config->pipe_src_h; |
| - u32 scaled_height = pipe_config->pipe_src_w * |
| - adjusted_mode->vdisplay; |
| - |
| - /* 965+ is easy, it does everything in hw */ |
| - if (scaled_width > scaled_height) |
| - pfit_control |= PFIT_ENABLE | |
| - PFIT_SCALING_PILLAR; |
| - else if (scaled_width < scaled_height) |
| - pfit_control |= PFIT_ENABLE | |
| - PFIT_SCALING_LETTER; |
| - else if (adjusted_mode->hdisplay != pipe_config->pipe_src_w) |
| - pfit_control |= PFIT_ENABLE | PFIT_SCALING_AUTO; |
| - } else { |
| - u32 scaled_width = adjusted_mode->hdisplay * |
| - pipe_config->pipe_src_h; |
| - u32 scaled_height = pipe_config->pipe_src_w * |
| - adjusted_mode->vdisplay; |
| - /* |
| - * For earlier chips we have to calculate the scaling |
| - * ratio by hand and program it into the |
| - * PFIT_PGM_RATIO register |
| - */ |
| - if (scaled_width > scaled_height) { /* pillar */ |
| - centre_horizontally(adjusted_mode, |
| - scaled_height / |
| - pipe_config->pipe_src_h); |
| - |
| - border = LVDS_BORDER_ENABLE; |
| - if (pipe_config->pipe_src_h != adjusted_mode->vdisplay) { |
| - u32 bits = panel_fitter_scaling(pipe_config->pipe_src_h, adjusted_mode->vdisplay); |
| - pfit_pgm_ratios |= (bits << PFIT_HORIZ_SCALE_SHIFT | |
| - bits << PFIT_VERT_SCALE_SHIFT); |
| - pfit_control |= (PFIT_ENABLE | |
| - VERT_INTERP_BILINEAR | |
| - HORIZ_INTERP_BILINEAR); |
| - } |
| - } else if (scaled_width < scaled_height) { /* letter */ |
| - centre_vertically(adjusted_mode, |
| - scaled_width / |
| - pipe_config->pipe_src_w); |
| - |
| - border = LVDS_BORDER_ENABLE; |
| - if (pipe_config->pipe_src_w != adjusted_mode->hdisplay) { |
| - u32 bits = panel_fitter_scaling(pipe_config->pipe_src_w, adjusted_mode->hdisplay); |
| - pfit_pgm_ratios |= (bits << PFIT_HORIZ_SCALE_SHIFT | |
| - bits << PFIT_VERT_SCALE_SHIFT); |
| - pfit_control |= (PFIT_ENABLE | |
| - VERT_INTERP_BILINEAR | |
| - HORIZ_INTERP_BILINEAR); |
| - } |
| - } else { |
| - /* Aspects match, Let hw scale both directions */ |
| - pfit_control |= (PFIT_ENABLE | |
| - VERT_AUTO_SCALE | HORIZ_AUTO_SCALE | |
| - VERT_INTERP_BILINEAR | |
| - HORIZ_INTERP_BILINEAR); |
| - } |
| - } |
| + if (INTEL_INFO(dev)->gen >= 4) |
| + i965_scale_aspect(pipe_config, &pfit_control); |
| + else |
| + i9xx_scale_aspect(pipe_config, &pfit_control, |
| + &pfit_pgm_ratios, &border); |
| break; |
| case DRM_MODE_SCALE_FULLSCREEN: |
| /* |
| @@ -439,7 +462,8 @@ static void intel_pch_panel_set_backlight(struct drm_device *dev, u32 level) |
| I915_WRITE(BLC_PWM_CPU_CTL, val | level); |
| } |
| |
| -static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level) |
| +static void intel_panel_actually_set_backlight(struct drm_device *dev, |
| + u32 level) |
| { |
| struct drm_i915_private *dev_priv = dev->dev_private; |
| u32 tmp; |
| -- |
| 1.8.5.rc3 |
| |