RE: [PATCH] acpi: fix brightness level is initialized to zero when BIOS does not restore the brightness value to _BQC.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux