mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Indan Zupancic" <indan@nul.nu>
To: "Takashi Iwai" <tiwai@suse.de>
Cc: "Linus Torvalds" <torvalds@linux-foundation.org>,
	"Alex Riesen" <raa.lkml@gmail.com>,
	"Jesse Barnes" <jbarnes@virtuousgeek.org>,
	"DRI mailing list" <dri-devel@lists.freedesktop.org>,
	"Chris Wilson" <chris@chris-wilson.co.uk>,
	"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
	"Tino Keitel" <tino.keitel@tikei.de>,
	stable@kernel.org
Subject: Re: [PATCH] drm/i915: Revive combination mode for backlight control
Date: Fri, 11 Mar 2011 02:23:08 +0100 (CET)	[thread overview]
Message-ID: <334e13a8513c5863dc9a5d278831777f.squirrel@webmail.greenhost.nl> (raw)
In-Reply-To: <s5hr5afm8mj.wl%tiwai@suse.de>

Hi,

Some nitpicks below. I know you're just restoring the original code,
but if we improve it we can as well do it now.

On Thu, March 10, 2011 14:02, Takashi Iwai wrote:
> This reverts commit 951f3512dba5bd44cda3e5ee22b4b522e4bb09fb
>
>     drm/i915: Do not handle backlight combination mode specially
>
> since this commit introduced other regressions due to untouched LBPC
> register, e.g. the backlight dimmed after resume.

The regression was that, if ALSE was used, the maximum brightness
would be the brightness at boot, because LBPC isn't touched and
the BIOS restores it at boot. So the sympom would be less brightness
levels or lower maximum brightness.

Systems with no ASLE support work fine because there the code is only
used to save and restore the PWM register. LBPC is saved and restored
by the BIOS.

The backlight dimming after resume/blanking was the original bug
caused by the bogus val <<=1 shift.

> In addition to the revert, this patch includes a fix for the original
> issue (weird backlight levels) by removing the wrong bit shift for
> computing the current backlight level.
> Also, including typo fixes (lpbc -> lbpc).
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34524
> Acked-by: Indan Zupancic <indan@nul.nu>
> Cc: <stable@kernel.org>
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>  drivers/gpu/drm/i915/i915_reg.h    |   10 ++++++++++
>  drivers/gpu/drm/i915/intel_panel.c |   36 ++++++++++++++++++++++++++++++++++++
>  2 files changed, 46 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 3e6f486..2abe240 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -1553,7 +1553,17 @@
>
>  /* Backlight control */
>  #define BLC_PWM_CTL		0x61254
> +#define   BACKLIGHT_MODULATION_FREQ_SHIFT		(17)

This one isn't used anywhere.

>  #define BLC_PWM_CTL2		0x61250 /* 965+ only */
> +#define   BLM_COMBINATION_MODE (1 << 30)
> +/*
> + * This is the most significant 15 bits of the number of backlight cycles in a
> + * complete cycle of the modulated backlight control.
> + *
> + * The actual value is this field multiplied by two.
> + */
> +#define   BACKLIGHT_MODULATION_FREQ_MASK		(0x7fff << 17)

This one isn't used and the comment is misleading, I think.

> +#define   BLM_LEGACY_MODE				(1 << 16)
>  /*
>   * This is the number of cycles out of the backlight modulation cycle for which
>   * the backlight is on.
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index d860abe..f8f86e5 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -30,6 +30,8 @@
>
>  #include "intel_drv.h"
>
> +#define PCI_LBPC 0xf4 /* legacy/combination backlight modes */
> +

I'd either put all the defines in i915_reg.h, or have all combination
mode specific defines here. Though I guess LBPC is an odd one.

>  void
>  intel_fixed_panel_mode(struct drm_display_mode *fixed_mode,
>  		       struct drm_display_mode *adjusted_mode)
> @@ -110,6 +112,19 @@ done:
>  	dev_priv->pch_pf_size = (width << 16) | height;
>  }
>
> +static int is_backlight_combination_mode(struct drm_device *dev)
> +{
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +
> +	if (INTEL_INFO(dev)->gen >= 4)
> +		return I915_READ(BLC_PWM_CTL2) & BLM_COMBINATION_MODE;
> +
> +	if (IS_GEN2(dev))
> +		return I915_READ(BLC_PWM_CTL) & BLM_LEGACY_MODE;
> +
> +	return 0;
> +}
> +
>  static u32 i915_read_blc_pwm_ctl(struct drm_i915_private *dev_priv)
>  {
>  	u32 val;
> @@ -166,6 +181,9 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
>  			if (INTEL_INFO(dev)->gen < 4)
>  				max &= ~1;

I'd add a comment that this is to clear the BLM_LEGACY_MODE bit.

>  		}
> +
> +		if (is_backlight_combination_mode(dev))
> +			max *= 0xff;
>  	}
>
>  	DRM_DEBUG_DRIVER("max backlight PWM = %d\n", max);
> @@ -183,6 +201,14 @@ u32 intel_panel_get_backlight(struct drm_device *dev)
>  		val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
>  		if (IS_PINEVIEW(dev))
>  			val >>= 1;
> +
> +		if (is_backlight_combination_mode(dev)){
> +			u8 lbpc;
> +
> +			val &= ~1;
> +			pci_read_config_byte(dev->pdev, PCI_LBPC, &lbpc);
> +			val *= lbpc;
> +		}
>  	}
>
>  	DRM_DEBUG_DRIVER("get backlight PWM = %d\n", val);
> @@ -205,6 +231,16 @@ void intel_panel_set_backlight(struct drm_device *dev, u32 level)
>
>  	if (HAS_PCH_SPLIT(dev))
>  		return intel_pch_panel_set_backlight(dev, level);
> +
> +	if (is_backlight_combination_mode(dev)){
> +		u32 max = intel_panel_get_max_backlight(dev);
> +		u8 lbpc;
> +
> +		lbpc = level * 0xfe / max + 1;
> +		level /= lbpc;
> +		pci_write_config_byte(dev->pdev, PCI_LBPC, lbpc);
> +	}
> +
>  	tmp = I915_READ(BLC_PWM_CTL);
>  	if (IS_PINEVIEW(dev)) {
>  		tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);

After this patch, combined with my new patch

"drm/i915: Fix DPMS and suspend interaction for intel_panel.c"

all known backlight problems should be fixed.

Greetings,

Indan



  parent reply	other threads:[~2011-03-11  1:23 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-16  4:16 Linux 2.6.38-rc5 Linus Torvalds
2011-02-16 11:14 ` Eric Dumazet
2011-02-16 13:55   ` Eric Dumazet
2011-02-16 15:46   ` Linus Torvalds
2011-02-16 16:06     ` Al Viro
2011-02-16 16:19       ` Al Viro
2011-02-16 16:33         ` Linus Torvalds
2011-02-16 16:39           ` Al Viro
2011-02-16 16:47             ` Eric Dumazet
2011-02-16 16:22     ` Eric Dumazet
2011-02-16 19:26 ` [PATCH] fix backlight brightness on intel LVDS panel after reopening lid Alex Riesen
2011-02-16 19:46   ` Alex Riesen
2011-02-16 19:54     ` Jesse Barnes
2011-02-16 19:59       ` Alex Riesen
2011-02-16 20:05         ` Jesse Barnes
2011-02-16 20:28           ` Alex Riesen
2011-02-17  1:41     ` [PATCH] drm/i915: Do not handle backlight combination mode specially Indan Zupancic
2011-02-17 22:13   ` [PATCH] fix backlight brightness on intel LVDS panel after reopening lid Tino Keitel
2011-02-18  4:57     ` Indan Zupancic
2011-02-19 12:11       ` Alex Riesen
2011-02-19 12:26         ` Alex Riesen
2011-02-19 23:07           ` Linus Torvalds
2011-02-22 21:04             ` Jesse Barnes
2011-02-22 22:31               ` Tino Keitel
2011-02-23  1:09                 ` Linus Torvalds
2011-03-04  6:53                   ` Indan Zupancic
2011-03-04 18:47                     ` Linus Torvalds
2011-03-04 23:32                       ` Indan Zupancic
2011-03-06 17:40                       ` Alex Riesen
2011-03-10  5:50                       ` Indan Zupancic
2011-03-10  6:00                         ` Indan Zupancic
2011-03-10  7:49                         ` Takashi Iwai
2011-03-10  8:25                           ` Takashi Iwai
2011-03-10 10:06                             ` Indan Zupancic
2011-03-10 12:59                               ` Takashi Iwai
2011-03-10 13:02                               ` [PATCH] drm/i915: Revive combination mode for backlight control Takashi Iwai
2011-03-10 19:36                                 ` Keith Packard
2011-03-11  1:30                                   ` Indan Zupancic
2011-03-11  1:23                                 ` Indan Zupancic [this message]
2011-03-11  1:28                                   ` Linus Torvalds
2011-03-11  7:26                                   ` Takashi Iwai
2011-03-11  9:08                                     ` Indan Zupancic
2011-03-11  7:34                                   ` Keith Packard
2011-03-10  8:45                           ` [PATCH] fix backlight brightness on intel LVDS panel after reopening lid Indan Zupancic
2011-03-10 12:51                             ` Takashi Iwai
2011-03-05  0:26                     ` Peter Stuge
2011-02-23  1:32               ` Indan Zupancic
2011-02-20 14:03 ` Linux 2.6.38-rc5 Paul Rolland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=334e13a8513c5863dc9a5d278831777f.squirrel@webmail.greenhost.nl \
    --to=indan@nul.nu \
    --cc=chris@chris-wilson.co.uk \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jbarnes@virtuousgeek.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=raa.lkml@gmail.com \
    --cc=stable@kernel.org \
    --cc=tino.keitel@tikei.de \
    --cc=tiwai@suse.de \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®