I think this is probably what you're looking for, /* * Some BIOSes claim they use minimum backlight at boot, * and this may bring dimming screen after boot */ static bool use_bios_initial_backlight = 1; module_param(use_bios_initial_backlight, bool, 0644); Lowest brightness level does not equal black screen. It is not a bug if a platform wants to set its brightness to lowest brightness level during boot. If it IS in your case, you can use this module parameter to ignore the initial _BQC value and use max_level instead. Thanks, rui > -----Original Message----- > From: joeyli [mailto:jlee@xxxxxxxx] > Sent: Monday, October 01, 2012 5:19 PM > To: Alex Hung > Cc: Zhang, Rui; linux-acpi@xxxxxxxxxxxxxxx > Subject: Re: [PATCH] acpi: fix brightness level is initialized to zero > when BIOS does not restore the brightness value to _BQC. > Importance: High > > 於 一,2012-10-01 於 17:11 +0800,Alex Hung 提到: > > On 10/01/2012 04:34 PM, joeyli wrote: > > > 於 一,2012-10-01 於 15:17 +0800,joeyli 提到: > > >> 於 一,2012-10-01 於 15:03 +0800,Alex Hung 提到: > > >>> On 10/01/2012 02:47 PM, joeyli wrote: > > >>>> Hi Alex, > > >>>> > > >>>> 於 一,2012-10-01 於 13:39 +0800,Alex Hung 提到: > > >>>>> Signed-off-by: Alex Hung <alex.hung@xxxxxxxxxxxxx> > > >>>>> --- > > >>>>> drivers/acpi/video.c | 4 ++++ > > >>>>> 1 files changed, 4 insertions(+), 0 deletions(-) > > >>>>> > > >>>>> diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c index > > >>>>> 42b226e..eaa9573 100644 > > >>>>> --- a/drivers/acpi/video.c > > >>>>> +++ b/drivers/acpi/video.c > > >>>>> @@ -724,6 +724,10 @@ acpi_video_init_brightness(struct > acpi_video_device *device) > > >>>>> if (level_old == br->levels[i]) > > >>>>> level = level_old; > > >>>>> } > > >>>>> + > > >>>>> + if (level == 0) > > >>>>> + level = br->levels[(br->count) / 2 + 1]; > > >>>> > > >>>> Looks here used the 50% brightness level. > > >>>> > > >>>> Per comment in video.c, we want set the backlight to max_level > > >>>> when level_old is invalid: > > >>>> > > >>>> if (!br->flags._BQC_use_index) { > > >>>> /* > > >>>> * Set the backlight to the initial state. > > >>>> * On some buggy laptops, _BQC returns an > uninitialized value > > >>>> * when invoked for the first time, i.e. > level_old is invalid. > > >>>> * set the backlight to max_level in this case > > >>>> */ > > >>>> > > >>>> I think here used max_level to fulfill it, e.g. > > >>>> > > >>>> + if (level == 0) > > >>>> + level = max_level; > > >>>> > > >>>> How do you think? > > >>> Hi Joey, > > >>> > > >>> I was debating with myself which level to be set, ex. 50%, ~75% > or > > >>> 100%, and I think 50% *might* be closer to normal use-case (just > a > > >>> personal guess). > > >>> > > >>> However, "max_level" seems to fit best if we treat the initial > > >>> zero brightness in invalid. I can modify it according it that's > preferred. > > >>> > > >>> Thanks for the feedback. > > >>> > > >>> Cheers, > > >>> Alex Hung > > >>> > > >> > > >> hm.... I have a question for what's the BIOS's problem that causes > > >> 'level == 0'? > > >> That implied the issue machine's max_level is 0? > > >> > > >> /* > > >> * Set the level to maximum and check if _BQC uses indexed > value > > >> */ > > >> result = acpi_video_device_lcd_set_level(device, max_level); > /* write max_level purposely, then read level back, compare > them */ > > >> ... > > >> result = acpi_video_device_lcd_get_level_current(device, > &level, 0); > > >> ... > > >> br->flags._BQC_use_index = (level == max_level ? 0 : 1); > > >> if (!br->flags._BQC_use_index) { /* > _BQC_use_index is 0 will run into if, means level == max_level */ > > >> > > >> So, looks the 'level == max_level == 0' when level_old is invalid. > > >> > > >> Just wonder what's defect of BIOS (in _BCL?) causes problem. > > >> > > >> > > > > > > Sorry for my misunderstood! > > > > > > I think that's possible the level_old is 0 and there have a 0 value > > > in the return package from _BCL. > > > > > > > Yes, there is nothing wrong with _BCL and _BQC except that _BQC > > returns a zero initially. > > > > > Could you please share the _BCL in DSDT from issue machine? Does > > > there have 0 value in _BCL? > > > > _BCL returns below data and there is a zero in the list. > > > > [ 744.572289] Brightness[0] = 100 > > [ 744.572293] Brightness[1] = 50 > > [ 744.572295] Brightness[2] = 0 > > [ 744.572297] Brightness[3] = 10 > > [ 744.572299] Brightness[4] = 20 > > [ 744.572301] Brightness[5] = 30 > > [ 744.572303] Brightness[6] = 40 > > [ 744.572305] Brightness[7] = 50 > > [ 744.572306] Brightness[8] = 60 > > [ 744.572308] Brightness[9] = 70 > > [ 744.572310] Brightness[10] = 80 > > [ 744.572312] Brightness[11] = 90 > > [ 744.572314] Brightness[12] = 100 > > > > The below is the complete _BCL for references > > > > Method (_BCL, 0, Serialized) > > { > > Name (_T_0, Zero) > > If (_OSI ("NOT_WINP_KEY")) > > { > > While (One) > > { > > Store (LCDD, _T_0) > > If (LEqual (_T_0, 0x303CAF06)) > > { > > Return (AUOL) > > } > > Else > > { > > If (LEqual (_T_0, 0x1475AE0D)) > > { > > Return (CMIL) > > } > > Else > > { > > If (LEqual (_T_0, 0x033FE430)) > > { > > Return (LGDL) > > } > > Else > > { > > If (LEqual (_T_0, > 0x3942A34C)) > > { > > Return (SAML) > > } > > Else > > { > > Return (DEFL) > > } > > } > > } > > } > > > > Break > > } > > } > > Else > > { > > Return (Package (0x0D) > > { > > 0x64, > > 0x32, > > Zero, > > Yes, have Zero value in _BCL return package. > > > 0x0A, > > 0x14, > > 0x1E, > > 0x28, > > 0x32, > > 0x3C, > > 0x46, > > 0x50, > > 0x5A, > > 0x64 > > }) > > } > > } > > > > > > According to the above information, it make sense now! > > > Thank a lot! > Joey Lee ��.n��������+%������w��{.n�����{�����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f