On Mon, 15 Dec 2014, Aaron Lu <aaron.lu@xxxxxxxxx> wrote: > If the firmware has declared more than 8 video output devices, and the > one that control the internal panel's backlight is listed after the > first 8 output devices, the _DOD will not include it due to the current > i915 operation region implementation. As a result, we will not create a > backlight device for it while we should. Solve this problem by special > case the firmware that has 8+ output devices in that if we see such a > firmware, we do not test if the device is in _DOD list. The creation of > the backlight device will also enable the firmware to emit events on > backlight hotkey press when the acpi_osi= cmdline option is specified on > those affected ASUS laptops. > > Buglink: https://bugzilla.kernel.org/show_bug.cgi?id=70241 > Reported-and-tested-by: Oleksij Rempel <linux@xxxxxxxxxxxxxxxx> > Reported-and-tested-by: Dmitry Tunin <hanipouspilot@xxxxxxxxx> > Reported-and-tested-by: Jimbo <jaime.91@xxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Aaron Lu <aaron.lu@xxxxxxxxx> Obviously I'd like to have the proper information in the opregion DIDL/CADL fields, but it's not going to happen soon, nor is it going to fit under stable size limits. I like the simplicity here. FWIW, Acked-by: Jani Nikula <jani.nikula@xxxxxxxxx> > --- > drivers/acpi/video.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c > index 8b844931b936..c72e79d2c5ad 100644 > --- a/drivers/acpi/video.c > +++ b/drivers/acpi/video.c > @@ -155,6 +155,7 @@ struct acpi_video_bus { > u8 dos_setting; > struct acpi_video_enumerated_device *attached_array; > u8 attached_count; > + u8 child_count; > struct acpi_video_bus_cap cap; > struct acpi_video_bus_flags flags; > struct list_head video_device_list; > @@ -1176,8 +1177,12 @@ static bool acpi_video_device_in_dod(struct acpi_video_device *device) > struct acpi_video_bus *video = device->video; > int i; > > - /* If we have a broken _DOD, no need to test */ > - if (!video->attached_count) > + /* > + * If we have a broken _DOD or we have more than 8 output devices > + * under the graphics controller node that we can't proper deal with > + * in the operation region code currently, no need to test. > + */ > + if (!video->attached_count || video->child_count > 8) > return true; > > for (i = 0; i < video->attached_count; i++) { > @@ -1430,6 +1435,7 @@ acpi_video_bus_get_devices(struct acpi_video_bus *video, > dev_err(&dev->dev, "Can't attach device\n"); > break; > } > + video->child_count++; > } > return status; > } > -- > 2.1.0 > -- Jani Nikula, Intel Open Source Technology Center -- 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