===================================================================
@@ -44,6 +44,7 @@
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
#include <linux/suspend.h>
+#include <linux/power_supply.h>
#define PREFIX "ACPI: "
@@ -915,6 +916,18 @@ acpi_video_init_brightness(struct acpi_v
br->flags._BQC_use_index = (level == max_level ? 0 : 1);
+ /*
+ * Set brightness to the "AC power" value if on AC power or to the
+ * "battery" value otherwise. If these vaules are not exported, try
+ * to use the value returned by the initial _BQC and fall back to
+ * max_level.
+ */
+ if (!br->flags._BCL_no_ac_battery_levels) {
+ level = power_supply_is_system_supplied() ?
+ br->levels[0] : br->levels[1];
+ goto set_level;
+ }
+
if (!br->flags._BQC_use_index) {
/*
* Set the backlight to the initial state.
@@ -930,7 +943,8 @@ acpi_video_init_brightness(struct acpi_v
if (br->flags._BCL_reversed)
level_old = (br->count - 1) - level_old;
- level = br->levels[level_old];
+ level = level_old >= 0 && level_old < br->count ?
+ br->levels[level_old] : max_level;
set_level:
result = acpi_video_device_lcd_set_level(device, level);