On 03/14/2013 06:34 PM, Danny Baumann wrote: > The value initially read via _BQC also needs to be offset by 2 to > compensate for the first 2 special items in _BCL. Introduce a helper > function to do the conversion in order to not needlessly duplicate code. > --- > drivers/acpi/video.c | 23 ++++++++++++++--------- > 1 file changed, 14 insertions(+), 9 deletions(-) > > diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c > index d0fade7..562ccc3 100644 > --- a/drivers/acpi/video.c > +++ b/drivers/acpi/video.c > @@ -450,6 +450,16 @@ static struct dmi_system_id video_dmi_table[] __initdata > = { > {} > }; > > +static unsigned long long > +acpi_video_index_to_level(struct acpi_video_device *device, > + unsigned long long index) > +{ > + if (device->brightness->flags._BCL_reversed) > + index = device->brightness->count - 3 - index; > + > + return device->brightness->levels[index + 2]; > +}
What about making this function also take care of the bqc_offset_aml_bug_workaround? so that this function serves more like a conversion from raw value to fixed value, the function name can perhaps be named as: acpi_video_fix_bqc_value, or whatever you think is more appropriate. > + > static int > acpi_video_device_lcd_get_level_current(struct acpi_video_device *device, > unsigned long long *level, int init) > @@ -472,13 +482,10 @@ acpi_video_device_lcd_get_level_current(struct > acpi_video_device *device, > return 0; > } > > - if (device->brightness->flags._BQC_use_index) { > - if (device->brightness->flags._BCL_reversed) > - *level = device->brightness->count > - - 3 - (*level); > - *level = device->brightness->levels[*level + 2]; > + if (device->brightness->flags._BQC_use_index) > + *level = acpi_video_index_to_level(device, > + *level); > > - } > *level += bqc_offset_aml_bug_workaround; > for (i = 2; i < device->brightness->count; i++) > if (device->brightness->levels[i] == *level) { > @@ -742,9 +749,7 @@ acpi_video_init_brightness(struct acpi_video_device > *device) > } > } > } else { > - if (br->flags._BCL_reversed) > - level_old = (br->count - 1) - level_old; > - level = br->levels[level_old]; > + level = acpi_video_index_to_level(device, level_old); And here, that new function should be used, which also takes care of the offset_aml_bug problem(though in theory, the two problems may not happen on the same BIOS table). And the acpi_video_device_lcd_get_level_current's param init can probably be renamed as raw, meaning if raw value is desired or fixed value, but it's not a big deal. Thanks, Aaron > } > > set_level: > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/