From: Jason Stubbs <jasonbstubbs@gmail.com>
To: Greg KH <greg@kroah.com>
Cc: Greg KH <gregkh@suse.de>, linux-kernel@vger.kernel.org
Subject: [PATCH] platform: add support for samsung nc210/nc110
Date: Fri, 13 May 2011 20:47:07 +1000 [thread overview]
Message-ID: <201105132047.07544.jasonbstubbs@gmail.com> (raw)
In-Reply-To: <201105132044.25928.jasonbstubbs@gmail.com>
From: Jason Stubbs <jasonbstubbs@gmail.com>
This patch adds support for the NC210/NC110 to the samsung-laptop driver.
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.
Along with adding the DMI checks for the NC210/NC110, 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 ebf1b07..89fd703 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 int 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 (nc210/nc110 at the very least) 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 = 0;
+ set_brightness(check_level);
+
+ if (read_brightness() != check_level) {
+ has_stepping_quirk = 1;
+ 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);
@@ -668,6 +708,15 @@ static struct dmi_system_id __initdata samsung_dmi_table[] = {
},
.callback = dmi_check_cb,
},
+ {
+ .ident = "NC210/NC110",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "NC210/NC110"),
+ DMI_MATCH(DMI_BOARD_NAME, "NC210/NC110"),
+ },
+ .callback = dmi_check_cb,
+ },
{ },
};
MODULE_DEVICE_TABLE(dmi, samsung_dmi_table);
@@ -776,6 +825,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))
next prev parent reply other threads:[~2011-05-13 10:49 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-20 3:58 [PATCH] platform: fix samsung brightness min/max calculations Jason Stubbs
2011-04-28 8:55 ` Jason Stubbs
2011-05-10 22:39 ` Greg KH
2011-05-11 4:47 ` Jason Stubbs
2011-05-11 13:51 ` Greg KH
2011-05-12 2:13 ` Jason Stubbs
2011-05-12 16:44 ` Greg KH
2011-05-13 10:44 ` Jason Stubbs
2011-05-13 10:47 ` Jason Stubbs [this message]
2011-06-13 23:55 ` Greg KH
2011-06-19 21:23 ` [PATCH] platform: samsung_laptop: " Jason Stubbs
2011-06-19 21:36 ` [PATCH] platform: " Jason Stubbs
2011-08-24 23:11 ` Greg KH
2011-05-12 2:32 ` Jason Stubbs
-- strict thread matches above, loose matches on Subject: below --
2011-04-20 5:07 [PATCH] platform: add support for samsung 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=201105132047.07544.jasonbstubbs@gmail.com \
--to=jasonbstubbs@gmail.com \
--cc=greg@kroah.com \
--cc=gregkh@suse.de \
--cc=linux-kernel@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.