[Intel-gfx] [PATCH] ACPI / video: update the skip case for acpi_video_device_in_dod

Jani Nikula jani.nikula at linux.intel.com
Mon Dec 15 01:02:37 PST 2014


On Mon, 15 Dec 2014, Aaron Lu <aaron.lu at 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 <linux at rempel-privat.de>
> Reported-and-tested-by: Dmitry Tunin <hanipouspilot at gmail.com>
> Reported-and-tested-by: Jimbo <jaime.91 at hotmail.es>
> Cc: stable at vger.kernel.org
> Signed-off-by: Aaron Lu <aaron.lu at 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.nikula at 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


More information about the Intel-gfx mailing list