aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc
diff options
context:
space:
mode:
authorHenrique de Moraes Holschuh <hmh@hmh.eng.br>2008-04-26 00:02:20 -0400
committerLen Brown <len.brown@intel.com>2008-04-29 09:47:00 -0400
commit2d5e94d7ca315f859a0eee1366838e8ad34dd7b2 (patch)
tree3bbf8aff5cc01084984b07da060add73d3c0cd4c /drivers/misc
parent8c74adbc692a3cb040cc69d7ca3dfd86d75860a8 (diff)
ACPI: thinkpad-acpi: rate-limit CMOS/EC unsynced error messages
If userspace applications mess with the CMOS NVRAM, or something causes both the ACPI firmware and thinkpad-acpi to try to change the brightness at the same time, it is possible to have the CMOS and EC registers for the current brightness go out of sync. Should that happen, thinkpad-acpi could be really obnoxious when using a brightness_mode of 3 (both EC and CMOS). Instead of complaining a massive number of times, make sure to complain only once until EC and CMOS are back in sync. Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Cc: Joerg Platte <lists@naasa.net> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/thinkpad_acpi.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c
index 601dbe8b407a..7dc6b73e8f5b 100644
--- a/drivers/misc/thinkpad_acpi.c
+++ b/drivers/misc/thinkpad_acpi.c
@@ -239,6 +239,7 @@ static struct {
239 239
240static struct { 240static struct {
241 u16 hotkey_mask_ff:1; 241 u16 hotkey_mask_ff:1;
242 u16 bright_cmos_ec_unsync:1;
242} tp_warned; 243} tp_warned;
243 244
244struct thinkpad_id_data { 245struct thinkpad_id_data {
@@ -4323,13 +4324,20 @@ static int brightness_get(struct backlight_device *bd)
4323 level = lcmos; 4324 level = lcmos;
4324 } 4325 }
4325 4326
4326 if (brightness_mode == 3 && lec != lcmos) { 4327 if (brightness_mode == 3) {
4327 printk(TPACPI_ERR 4328 if (lec == lcmos)
4328 "CMOS NVRAM (%u) and EC (%u) do not agree " 4329 tp_warned.bright_cmos_ec_unsync = 0;
4329 "on display brightness level\n", 4330 else {
4330 (unsigned int) lcmos, 4331 if (!tp_warned.bright_cmos_ec_unsync) {
4331 (unsigned int) lec); 4332 printk(TPACPI_ERR
4332 return -EIO; 4333 "CMOS NVRAM (%u) and EC (%u) do not "
4334 "agree on display brightness level\n",
4335 (unsigned int) lcmos,
4336 (unsigned int) lec);
4337 tp_warned.bright_cmos_ec_unsync = 1;
4338 }
4339 return -EIO;
4340 }
4333 } 4341 }
4334 4342
4335 return level; 4343 return level;