Matthew, Is there a life failure someplace (eg. bugzilla) that works after this patch? thanks, Len Brown, Intel Open Source Technology Center On Tue, 16 Feb 2010, Matthew Garrett wrote: > Right now, if _BQC returns a value we don't understand we immediately > invalidate it. Change this behaviour so we only invalidate it if it > continues to give an invalid answer after we've already set a brightness. > > Signed-off-by: Matthew Garrett <mjg@xxxxxxxxxx> > --- > drivers/acpi/video.c | 28 +++++++++++++++++----------- > 1 files changed, 17 insertions(+), 11 deletions(-) > > diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c > index b765790..ea314a2 100644 > --- a/drivers/acpi/video.c > +++ b/drivers/acpi/video.c > @@ -327,7 +327,7 @@ static int acpi_video_device_lcd_set_level(struct acpi_video_device *device, > int level); > static int acpi_video_device_lcd_get_level_current( > struct acpi_video_device *device, > - unsigned long long *level); > + unsigned long long *level, int init); > static int acpi_video_get_next_level(struct acpi_video_device *device, > u32 level_current, u32 event); > static int acpi_video_switch_brightness(struct acpi_video_device *device, > @@ -345,7 +345,7 @@ static int acpi_video_get_brightness(struct backlight_device *bd) > struct acpi_video_device *vd = > (struct acpi_video_device *)bl_get_data(bd); > > - if (acpi_video_device_lcd_get_level_current(vd, &cur_level)) > + if (acpi_video_device_lcd_get_level_current(vd, &cur_level, 0)) > return -EINVAL; > for (i = 2; i < vd->brightness->count; i++) { > if (vd->brightness->levels[i] == cur_level) > @@ -414,7 +414,7 @@ static int video_get_cur_state(struct thermal_cooling_device *cooling_dev, unsig > unsigned long long level; > int offset; > > - if (acpi_video_device_lcd_get_level_current(video, &level)) > + if (acpi_video_device_lcd_get_level_current(video, &level, 0)) > return -EINVAL; > for (offset = 2; offset < video->brightness->count; offset++) > if (level == video->brightness->levels[offset]) { > @@ -609,7 +609,7 @@ static struct dmi_system_id video_dmi_table[] __initdata = { > > static int > acpi_video_device_lcd_get_level_current(struct acpi_video_device *device, > - unsigned long long *level) > + unsigned long long *level, int init) > { > acpi_status status = AE_OK; > int i; > @@ -633,10 +633,16 @@ acpi_video_device_lcd_get_level_current(struct acpi_video_device *device, > device->brightness->curr = *level; > return 0; > } > - /* BQC returned an invalid level. Stop using it. */ > - ACPI_WARNING((AE_INFO, "%s returned an invalid level", > - buf)); > - device->cap._BQC = device->cap._BCQ = 0; > + if (!init) { > + /* > + * BQC returned an invalid level. > + * Stop using it. > + */ > + ACPI_WARNING((AE_INFO, > + "%s returned an invalid level", > + buf)); > + device->cap._BQC = device->cap._BCQ = 0; > + } > } else { > /* Fixme: > * should we return an error or ignore this failure? > @@ -892,7 +898,7 @@ acpi_video_init_brightness(struct acpi_video_device *device) > if (!device->cap._BQC) > goto set_level; > > - result = acpi_video_device_lcd_get_level_current(device, &level_old); > + result = acpi_video_device_lcd_get_level_current(device, &level_old, 1); > if (result) > goto out_free_levels; > > @@ -903,7 +909,7 @@ acpi_video_init_brightness(struct acpi_video_device *device) > if (result) > goto out_free_levels; > > - result = acpi_video_device_lcd_get_level_current(device, &level); > + result = acpi_video_device_lcd_get_level_current(device, &level, 0); > if (result) > goto out_free_levels; > > @@ -1996,7 +2002,7 @@ acpi_video_switch_brightness(struct acpi_video_device *device, int event) > goto out; > > result = acpi_video_device_lcd_get_level_current(device, > - &level_current); > + &level_current, 0); > if (result) > goto out; > > -- > 1.6.6.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html