On Mon, 15 Dec 2014, Aaron Lu <aaron...@intel.com> 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 <li...@rempel-privat.de>
> Reported-and-tested-by: Dmitry Tunin <hanipouspi...@gmail.com>
> Reported-and-tested-by: Jimbo <jaime...@hotmail.es>
> Cc: sta...@vger.kernel.org
> Signed-off-by: Aaron Lu <aaron...@intel.com>

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.nik...@intel.com>

> ---
>  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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to