]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'bugzilla-12249' into release
authorLen Brown <len.brown@intel.com>
Fri, 24 Apr 2009 05:35:46 +0000 (01:35 -0400)
committerLen Brown <len.brown@intel.com>
Fri, 24 Apr 2009 05:35:46 +0000 (01:35 -0400)
1  2 
drivers/acpi/video.c

diff --combined drivers/acpi/video.c
index 21968ae6ed91add7b1fb23493606457caf35bc49,346277f93cdac15a596cf03fe204bf350b57fb4a..1705d947ea092eb59a82792e5d6244473c11d5b0
@@@ -770,12 -770,10 +770,12 @@@ acpi_video_init_brightness(struct acpi_
         * In this case, the first two elements in _BCL packages
         * are also supported brightness levels that OS should take care of.
         */
 -      for (i = 2; i < count; i++)
 -              if (br->levels[i] == br->levels[0] ||
 -                  br->levels[i] == br->levels[1])
 +      for (i = 2; i < count; i++) {
 +              if (br->levels[i] == br->levels[0])
                        level_ac_battery++;
 +              if (br->levels[i] == br->levels[1])
 +                      level_ac_battery++;
 +      }
  
        if (level_ac_battery < 2) {
                level_ac_battery = 2 - level_ac_battery;
        br->flags._BCM_use_index = br->flags._BCL_use_index;
  
        /* _BQC uses INDEX while _BCL uses VALUE in some laptops */
-       br->curr = max_level;
+       br->curr = level_old = max_level;
+       if (!device->cap._BQC)
+               goto set_level;
        result = acpi_video_device_lcd_get_level_current(device, &level_old);
        if (result)
                goto out_free_levels;
  
-       result = acpi_video_device_lcd_set_level(device, br->curr);
+       /*
+        * Set the level to maximum and check if _BQC uses indexed value
+        */
+       result = acpi_video_device_lcd_set_level(device, max_level);
        if (result)
                goto out_free_levels;
  
        if (result)
                goto out_free_levels;
  
-       if ((level != level_old) && !br->flags._BCM_use_index) {
-               /* Note:
-                * This piece of code does not work correctly if the current
-                * brightness levels is 0.
-                * But I guess boxes that boot with such a dark screen are rare
-                * and no more code is needed to cover this specifial case.
-                */
-               if (level_ac_battery != 2) {
-                       /*
-                        * For now, we don't support the _BCL like this:
-                        * 16, 15, 0, 1, 2, 3, ..., 14, 15, 16
-                        * because we may mess up the index returned by _BQC.
-                        * Plus: we have not got a box like this.
-                        */
-                       ACPI_ERROR((AE_INFO, "_BCL not supported\n"));
-               }
-               br->flags._BQC_use_index = 1;
-       }
+       br->flags._BQC_use_index = (level == max_level ? 0 : 1);
+       if (!br->flags._BQC_use_index)
+               goto set_level;
+       if (br->flags._BCL_reversed)
+               level_old = (br->count - 1) - level_old;
+       level_old = br->levels[level_old];
+ set_level:
+       result = acpi_video_device_lcd_set_level(device, level_old);
+       if (result)
+               goto out_free_levels;
  
        ACPI_DEBUG_PRINT((ACPI_DB_INFO,
                          "found %d brightness levels\n", count - 2));