From: Greg KH <greg@kroah.com>
To: David Herrmann <dh.herrmann@googlemail.com>
Cc: Jason Stubbs <jasonbstubbs@gmail.com>,
platform-driver-x86@vger.kernel.org, mjg@redhat.com
Subject: Re: [PATCH] Platform: Brightness quirk for samsung laptop driver
Date: Thu, 1 Sep 2011 15:44:32 -0700 [thread overview]
Message-ID: <20110901224432.GA18879@kroah.com> (raw)
In-Reply-To: <CANq1E4SgFWtMyps18c7MZp87uTCZO0T2q21FZ3eqR1TehNA-YQ@mail.gmail.com>
On Fri, Aug 26, 2011 at 01:31:38PM +0200, David Herrmann wrote:
> On Fri, Aug 26, 2011 at 11:58 AM, Jason Stubbs <jasonbstubbs@gmail.com> wrote:
> > From: Jason Stubbs <jasonbstubbs@gmail.com>
> >
> > On some Samsung laptops the brightness regulation works slightly different.
> > All SABI commands except for set_brightness work as expected. The behaviour
> > of set_brightness is as follows:
> >
> > - Setting a new brightness will only step one level toward the new brightness
> > level. For example, setting a level of 5 when the current level is 2 will
> > result in a brightness level of 3.
> > - A spurious KEY_BRIGHTNESS_UP or KEY_BRIGHTNESS_DOWN event is also generated
> > along with the change in brightness.
> > - Neither of the above two issues occur when changing from/to brightness
> > level 0.
> >
> > This patch adds detection and a non-intrusive workaround for the above issues.
> >
> > Signed-off-by: Jason Stubbs <jasonbstubbs@gmail.com>
> >
> > ---
> >
> > diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
> > index ee68c1c..b193bf0 100644
> > --- a/drivers/platform/x86/samsung-laptop.c
> > +++ b/drivers/platform/x86/samsung-laptop.c
> > @@ -226,6 +226,7 @@ static struct backlight_device *backlight_device;
> > static struct mutex sabi_mutex;
> > static struct platform_device *sdev;
> > static struct rfkill *rfk;
> > +static bool has_stepping_quirk;
> >
> > static int force;
> > module_param(force, bool, 0);
> > @@ -382,6 +383,17 @@ static void set_brightness(u8 user_brightness)
> > {
> > u8 user_level = user_brightness + sabi_config->min_brightness;
> >
> > + if (has_stepping_quirk && user_level != 0) {
> > + /*
> > + * short circuit if the specified level is what's already set
> > + * to prevent the screen from flickering needlessly
> > + */
> > + if (user_brightness == read_brightness())
> > + return;
> > +
> > + sabi_set_command(sabi_config->commands.set_brightness, 0);
> > + }
> > +
> > sabi_set_command(sabi_config->commands.set_brightness, user_level);
> > }
> >
> > @@ -390,6 +402,34 @@ static int get_brightness(struct backlight_device *bd)
> > return (int)read_brightness();
> > }
> >
> > +static void check_for_stepping_quirk(void)
> > +{
> > + u8 initial_level = read_brightness();
> > + u8 check_level;
> > +
> > + /*
> > + * Some laptops exhibit the strange behaviour of stepping toward
> > + * (rather than setting) the brightness except when changing to/from
> > + * brightness level 0. This behaviour is checked for here and worked
> > + * around in set_brightness.
> > + */
> > +
> > + if (initial_level <= 2)
> > + check_level = initial_level + 2;
> > + else
> > + check_level = initial_level - 2;
> > +
> > + has_stepping_quirk = false;
> > + set_brightness(check_level);
> > +
> > + if (read_brightness() != check_level) {
> > + has_stepping_quirk = true;
> > + pr_info("enabled workaround for brightness stepping quirk\n");
> > + }
> > +
> > + set_brightness(initial_level);
> > +}
> > +
> > static int update_status(struct backlight_device *bd)
> > {
> > set_brightness(bd->props.brightness);
> > @@ -796,6 +836,9 @@ static int __init samsung_init(void)
> > }
> > }
> >
> > + /* Check for stepping quirk */
> > + check_for_stepping_quirk();
> > +
> > /* knock up a platform device to hang stuff off of */
> > sdev = platform_device_register_simple("samsung", -1, NULL, 0);
> > if (IS_ERR(sdev))
> >
> >
>
> Thank you, Jason.
> Tested-by: David Herrmann <dh.herrmann@googlemail.com>
>
> And Greg, could you actually "git add" the new samsung patches in your
> repository? You added them to "series" but didn't submit the actual
> patch files. That would be great.
Now done, sorry about that.
greg k-h
next prev parent reply other threads:[~2011-09-01 22:47 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-23 16:05 [PATCH] Platform: Brightness quirk for samsung laptop driver David Herrmann
2011-08-24 23:10 ` Greg KH
2011-08-25 3:27 ` Jason Stubbs
2011-08-26 0:03 ` Greg KH
2011-08-26 9:58 ` Jason Stubbs
2011-08-26 11:31 ` David Herrmann
2011-09-01 22:44 ` Greg KH [this message]
2011-08-26 11:57 ` [PATCH] Platform: Samsung laptop DMI info for NC210/NC110 Jason Stubbs
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=20110901224432.GA18879@kroah.com \
--to=greg@kroah.com \
--cc=dh.herrmann@googlemail.com \
--cc=jasonbstubbs@gmail.com \
--cc=mjg@redhat.com \
--cc=platform-driver-x86@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.