From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 65A07ECAAD4 for ; Mon, 29 Aug 2022 11:42:04 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9CE4710F153; Mon, 29 Aug 2022 11:41:59 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 26DD410F153 for ; Mon, 29 Aug 2022 11:41:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661773314; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=NX4Uqn/FhhpshzHLNfN2A67Ns35g/gWpppzc97ebUaPVcN23fY0Hne6TVvE1PhN7J2I95M PKpkCpJsuOH1lzt5jixWCgZXxJmcQgYEYoxvh99qYJBrqkUwXEZZyvnh1zukqC9Vy7sytB Xd3EgtyNdAjOUXe1IjOU/r1QblSXmeU= Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-244-aGhD7OkoMK-8_E0UwbqmjQ-1; Mon, 29 Aug 2022 07:41:42 -0400 X-MC-Unique: aGhD7OkoMK-8_E0UwbqmjQ-1 Received: by mail-ej1-f69.google.com with SMTP id qk37-20020a1709077fa500b00730c2d975a0so2168169ejc.13 for ; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=R96FCHldehTMhtpgDhJx6bfPkedrrEBfCvUelNcSfPSI3a7Pwqu8M6npDhzUKHVNJc K2Rp/0YnJuye2ypJypPLUcL63FtQ+11yFXza4nTzMRbD9eCF8vMFVBbiMLhTgVfqv0ff QMmdbmak9Stf7zm3TmeQV4n24jZSbwIiFua1ERN/jxCJrwg/m8PnaFzI0nVzsszFdqGj i30GT/5NF4CpuHQ2i8xQTwL3S5AWwnwg7oZ0ipom1qT90LMyneL0HcTCZMHz1i4+PLz1 3ZnGDA24EW5jORjLLH7bhamnL3hZzBKKZfxDluJDPo5ijDizwzru4W7Ro29a2kmEj+kV hpNg== X-Gm-Message-State: ACgBeo38UZ96DEca36gP4b9/dvjTShHI0/HlpPnw+xh4X9CwqnavSdfQ c6TBxVuf6S45HYMacwYcYYf//pX22SiCEkn63YUT7ccAK737lFv9uMdNADEA2x4QOElTMuI0DtZ S00tB8PkUMFQQeT4hdc8JVpatvA== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677752ejc.227.1661773301035; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR4EiH7klPrajd4w6phluOAxxP5+QSPfK7S4vRyR/vwmU8/fqFSjch/glWZJuzPXXquQHg2DRA== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677719ejc.227.1661773300758; Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Received: from [10.40.98.142] ([78.108.130.194]) by smtp.gmail.com with ESMTPSA id og4-20020a1709071dc400b0073ddfe1ea69sm4355852ejc.111.2022.08.29.04.41.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Message-ID: Date: Mon, 29 Aug 2022 13:41:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 To: Daniel Dadap , Ben Skeggs , Karol Herbst , Lyude , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Alex Deucher , =?UTF-8?Q?Christian_K=c3=b6nig?= , Xinhui , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Mark Gross , Andy Shevchenko References: <20220825143726.269890-1-hdegoede@redhat.com> <20220825143726.269890-18-hdegoede@redhat.com> From: Hans de Goede In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: Re: [Nouveau] [PATCH v5 17/31] ACPI: video: Add Nvidia WMI EC brightness control detection (v3) X-BeenThere: nouveau@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Nouveau development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nouveau@lists.freedesktop.org, intel-gfx , "Rafael J . Wysocki" , amd-gfx@lists.freedesktop.org, platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org, dri-devel@lists.freedesktop.org, Daniel Vetter , David Airlie , Len Brown Errors-To: nouveau-bounces@lists.freedesktop.org Sender: "Nouveau" Hi, On 8/26/22 00:21, Daniel Dadap wrote: > On 8/25/22 9:37 AM, Hans de Goede wrote: >> On some new laptop designs a new Nvidia specific WMI interface is present >> which gives info about panel brightness control and may allow controlling >> the brightness through this interface when the embedded controller is used >> for brightness control. >> >> When this WMI interface is present and indicates that the EC is used, >> then this interface should be used for brightness control. >> >> Changes in v2: >> - Use the new shared nvidia-wmi-ec-backlight.h header for the >>    WMI firmware API definitions >> - ACPI_VIDEO can now be enabled on non X86 too, >>    adjust the Kconfig changes to match this. >> >> Changes in v3: >> - Use WMI_BRIGHTNESS_GUID define >> >> Acked-by: Rafael J. Wysocki >> Signed-off-by: Hans de Goede >> --- >>   drivers/acpi/Kconfig           |  1 + >>   drivers/acpi/video_detect.c    | 37 ++++++++++++++++++++++++++++++++++ >>   drivers/gpu/drm/gma500/Kconfig |  2 ++ >>   drivers/gpu/drm/i915/Kconfig   |  2 ++ >>   include/acpi/video.h           |  1 + >>   5 files changed, 43 insertions(+) >> >> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig >> index 7802d8846a8d..44ad4b6bd234 100644 >> --- a/drivers/acpi/Kconfig >> +++ b/drivers/acpi/Kconfig >> @@ -212,6 +212,7 @@ config ACPI_VIDEO >>       tristate "Video" >>       depends on BACKLIGHT_CLASS_DEVICE >>       depends on INPUT >> +    depends on ACPI_WMI || !X86 >>       select THERMAL >>       help >>         This driver implements the ACPI Extensions For Display Adapters >> diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c >> index cc9d0d91e268..4dc7fb865083 100644 >> --- a/drivers/acpi/video_detect.c >> +++ b/drivers/acpi/video_detect.c >> @@ -32,6 +32,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -75,6 +76,36 @@ find_video(acpi_handle handle, u32 lvl, void *context, void **rv) >>       return AE_OK; >>   } >>   +/* This depends on ACPI_WMI which is X86 only */ >> +#ifdef CONFIG_X86 > > > This could probably also provide the { return false; } stub which you have for non-x86 if the kernel is built without nvidia-wmi-ec-backight, e.g.: > > #if defined(CONFIG_X86) && (defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT) || defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT_MODULE)) > > Although I suppose that would break things if somebody has a kernel that originally had NVIDIA_WMI_EC_BACKLIGHT=n in Kconfig, and then builds the nvidia-wmi-ec-backlight driver out-of-tree later. I don't know whether that's intended to be a supported use case, so I guess it is fine either way. The video-detect code is about detecting what interface should be used. So far it does this independently of the driver implementing that interface actually being enabled or not. If someone has a system which needs the nvidia-wmi-ec-backlight driver, but it is disabled then they / their distro should enable that driver, rather then trying to fallback on e.g. acpi_video. Taking which drivers are enabled into account would both make the code more complicated and would also explode the test matrix. All of this is already somewhat fragile, so lets not make it extra complicated :) Regards, Hans > > >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    struct wmi_brightness_args args = { >> +        .mode = WMI_BRIGHTNESS_MODE_GET, >> +        .val = 0, >> +        .ret = 0, >> +    }; >> +    struct acpi_buffer buf = { (acpi_size)sizeof(args), &args }; >> +    acpi_status status; >> + >> +    status = wmi_evaluate_method(WMI_BRIGHTNESS_GUID, 0, >> +                     WMI_BRIGHTNESS_METHOD_SOURCE, &buf, &buf); >> +    if (ACPI_FAILURE(status)) >> +        return false; >> + >> +    /* >> +     * If brightness is handled by the EC then nvidia-wmi-ec-backlight >> +     * should be used, else the GPU driver(s) should be used. >> +     */ >> +    return args.ret == WMI_BRIGHTNESS_SOURCE_EC; >> +} >> +#else >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    return false; >> +} >> +#endif >> + >>   /* Force to use vendor driver when the ACPI device is known to be >>    * buggy */ >>   static int video_detect_force_vendor(const struct dmi_system_id *d) >> @@ -541,6 +572,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { >>   static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>   { >>       static DEFINE_MUTEX(init_mutex); >> +    static bool nvidia_wmi_ec_present; >>       static bool native_available; >>       static bool init_done; >>       static long video_caps; >> @@ -553,6 +585,7 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>           acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, >>                       ACPI_UINT32_MAX, find_video, NULL, >>                       &video_caps, NULL); >> +        nvidia_wmi_ec_present = nvidia_wmi_ec_supported(); >>           init_done = true; >>       } >>       if (native) >> @@ -570,6 +603,10 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>       if (acpi_backlight_dmi != acpi_backlight_undef) >>           return acpi_backlight_dmi; >>   +    /* Special cases such as nvidia_wmi_ec and apple gmux. */ >> +    if (nvidia_wmi_ec_present) >> +        return acpi_backlight_nvidia_wmi_ec; >> + >>       /* On systems with ACPI video use either native or ACPI video. */ >>       if (video_caps & ACPI_VIDEO_BACKLIGHT) { >>           /* >> diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig >> index 0cff20265f97..807b989e3c77 100644 >> --- a/drivers/gpu/drm/gma500/Kconfig >> +++ b/drivers/gpu/drm/gma500/Kconfig >> @@ -7,6 +7,8 @@ config DRM_GMA500 >>       select ACPI_VIDEO if ACPI >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       help >>         Say yes for an experimental 2D KMS framebuffer driver for the >>         Intel GMA500 (Poulsbo), Intel GMA600 (Moorestown/Oak Trail) and >> diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig >> index 7ae3b7d67fcf..3efce05d7b57 100644 >> --- a/drivers/gpu/drm/i915/Kconfig >> +++ b/drivers/gpu/drm/i915/Kconfig >> @@ -23,6 +23,8 @@ config DRM_I915 >>       # but for select to work, need to select ACPI_VIDEO's dependencies, ick >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       select ACPI_VIDEO if ACPI >>       select ACPI_BUTTON if ACPI >>       select SYNC_FILE >> diff --git a/include/acpi/video.h b/include/acpi/video.h >> index 0625806d3bbd..91578e77ac4e 100644 >> --- a/include/acpi/video.h >> +++ b/include/acpi/video.h >> @@ -48,6 +48,7 @@ enum acpi_backlight_type { >>       acpi_backlight_video, >>       acpi_backlight_vendor, >>       acpi_backlight_native, >> +    acpi_backlight_nvidia_wmi_ec, >>   }; >>     #if IS_ENABLED(CONFIG_ACPI_VIDEO) > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id ECAF1ECAAD4 for ; Mon, 29 Aug 2022 11:41:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0855810EEB1; Mon, 29 Aug 2022 11:41:51 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id B39B610E4CC for ; Mon, 29 Aug 2022 11:41:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661773303; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=DfQoGAJhKh6pjk4V5JSkk4HxbW6AfXsic6VTax7iIK1eHQLNlMo54hDUOmxz3/GfXuiBFp kNxn/sTh8RwQQlVMwR/R5PRMwu2m2OT/IoaAJkk8v1X6g8Rlbtx0tfZ9zMo/7QVVnmVtka WmqzMB0uHxswYR2TZbTF5s0fPJAQ57A= Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-244-LuVlxYQiMD60HzYhLoqEcw-1; Mon, 29 Aug 2022 07:41:42 -0400 X-MC-Unique: LuVlxYQiMD60HzYhLoqEcw-1 Received: by mail-ed1-f71.google.com with SMTP id q18-20020a056402519200b0043dd2ff50feso5262178edd.9 for ; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=QUxlisQ+8Rco5rNs7wh+g7gjZ4cJ06Un3gsfo7rTijVR2V8t3mqHyFBU+PJFpH8FGk UrzgqPWgsAHjg7joE4hBn9FqCZp8vV9Ts+S0x2d13AwdKTS5uJL0AD4mzzVhZtr2QeFv 2mbeOFU+QysMfyUZYiwV4duEjPkv00Xv4bBEuqr5ypNd3oVOax2DVG3FsOOJS2QqpIKU BD7BXar46WJZmXTzpl5MUaDS2lj/WYNoXbcQEcG7LZU8fo7Dz1goS3BnyhcTTsLZVGhb tRl5sltGsAClnEqtoNYNX7igGX8UlcHeKULtyafCxbmLavy3N2JkDl+QaDCQThE6wwqY 7B6w== X-Gm-Message-State: ACgBeo2a9kh/3NkwPl2HjEp1u74ZVvPaTeMqMYkypVNrLjUkL9oTdGIf wC7thBMNLfjgo0TXMrAWLkUFgQLrA/+DFkzUj+CgrEiSYxY8po/PabwyGSudNvsQlAfrEY0o2TQ XA78acvl3mVnpQ8eNjG9GmVlW19z2 X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677753ejc.227.1661773301040; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR4EiH7klPrajd4w6phluOAxxP5+QSPfK7S4vRyR/vwmU8/fqFSjch/glWZJuzPXXquQHg2DRA== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677719ejc.227.1661773300758; Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Received: from [10.40.98.142] ([78.108.130.194]) by smtp.gmail.com with ESMTPSA id og4-20020a1709071dc400b0073ddfe1ea69sm4355852ejc.111.2022.08.29.04.41.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Message-ID: Date: Mon, 29 Aug 2022 13:41:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH v5 17/31] ACPI: video: Add Nvidia WMI EC brightness control detection (v3) To: Daniel Dadap , Ben Skeggs , Karol Herbst , Lyude , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Alex Deucher , =?UTF-8?Q?Christian_K=c3=b6nig?= , Xinhui , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Mark Gross , Andy Shevchenko References: <20220825143726.269890-1-hdegoede@redhat.com> <20220825143726.269890-18-hdegoede@redhat.com> From: Hans de Goede In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nouveau@lists.freedesktop.org, intel-gfx , "Rafael J . Wysocki" , amd-gfx@lists.freedesktop.org, platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org, dri-devel@lists.freedesktop.org, David Airlie , Len Brown Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi, On 8/26/22 00:21, Daniel Dadap wrote: > On 8/25/22 9:37 AM, Hans de Goede wrote: >> On some new laptop designs a new Nvidia specific WMI interface is present >> which gives info about panel brightness control and may allow controlling >> the brightness through this interface when the embedded controller is used >> for brightness control. >> >> When this WMI interface is present and indicates that the EC is used, >> then this interface should be used for brightness control. >> >> Changes in v2: >> - Use the new shared nvidia-wmi-ec-backlight.h header for the >>    WMI firmware API definitions >> - ACPI_VIDEO can now be enabled on non X86 too, >>    adjust the Kconfig changes to match this. >> >> Changes in v3: >> - Use WMI_BRIGHTNESS_GUID define >> >> Acked-by: Rafael J. Wysocki >> Signed-off-by: Hans de Goede >> --- >>   drivers/acpi/Kconfig           |  1 + >>   drivers/acpi/video_detect.c    | 37 ++++++++++++++++++++++++++++++++++ >>   drivers/gpu/drm/gma500/Kconfig |  2 ++ >>   drivers/gpu/drm/i915/Kconfig   |  2 ++ >>   include/acpi/video.h           |  1 + >>   5 files changed, 43 insertions(+) >> >> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig >> index 7802d8846a8d..44ad4b6bd234 100644 >> --- a/drivers/acpi/Kconfig >> +++ b/drivers/acpi/Kconfig >> @@ -212,6 +212,7 @@ config ACPI_VIDEO >>       tristate "Video" >>       depends on BACKLIGHT_CLASS_DEVICE >>       depends on INPUT >> +    depends on ACPI_WMI || !X86 >>       select THERMAL >>       help >>         This driver implements the ACPI Extensions For Display Adapters >> diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c >> index cc9d0d91e268..4dc7fb865083 100644 >> --- a/drivers/acpi/video_detect.c >> +++ b/drivers/acpi/video_detect.c >> @@ -32,6 +32,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -75,6 +76,36 @@ find_video(acpi_handle handle, u32 lvl, void *context, void **rv) >>       return AE_OK; >>   } >>   +/* This depends on ACPI_WMI which is X86 only */ >> +#ifdef CONFIG_X86 > > > This could probably also provide the { return false; } stub which you have for non-x86 if the kernel is built without nvidia-wmi-ec-backight, e.g.: > > #if defined(CONFIG_X86) && (defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT) || defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT_MODULE)) > > Although I suppose that would break things if somebody has a kernel that originally had NVIDIA_WMI_EC_BACKLIGHT=n in Kconfig, and then builds the nvidia-wmi-ec-backlight driver out-of-tree later. I don't know whether that's intended to be a supported use case, so I guess it is fine either way. The video-detect code is about detecting what interface should be used. So far it does this independently of the driver implementing that interface actually being enabled or not. If someone has a system which needs the nvidia-wmi-ec-backlight driver, but it is disabled then they / their distro should enable that driver, rather then trying to fallback on e.g. acpi_video. Taking which drivers are enabled into account would both make the code more complicated and would also explode the test matrix. All of this is already somewhat fragile, so lets not make it extra complicated :) Regards, Hans > > >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    struct wmi_brightness_args args = { >> +        .mode = WMI_BRIGHTNESS_MODE_GET, >> +        .val = 0, >> +        .ret = 0, >> +    }; >> +    struct acpi_buffer buf = { (acpi_size)sizeof(args), &args }; >> +    acpi_status status; >> + >> +    status = wmi_evaluate_method(WMI_BRIGHTNESS_GUID, 0, >> +                     WMI_BRIGHTNESS_METHOD_SOURCE, &buf, &buf); >> +    if (ACPI_FAILURE(status)) >> +        return false; >> + >> +    /* >> +     * If brightness is handled by the EC then nvidia-wmi-ec-backlight >> +     * should be used, else the GPU driver(s) should be used. >> +     */ >> +    return args.ret == WMI_BRIGHTNESS_SOURCE_EC; >> +} >> +#else >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    return false; >> +} >> +#endif >> + >>   /* Force to use vendor driver when the ACPI device is known to be >>    * buggy */ >>   static int video_detect_force_vendor(const struct dmi_system_id *d) >> @@ -541,6 +572,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { >>   static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>   { >>       static DEFINE_MUTEX(init_mutex); >> +    static bool nvidia_wmi_ec_present; >>       static bool native_available; >>       static bool init_done; >>       static long video_caps; >> @@ -553,6 +585,7 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>           acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, >>                       ACPI_UINT32_MAX, find_video, NULL, >>                       &video_caps, NULL); >> +        nvidia_wmi_ec_present = nvidia_wmi_ec_supported(); >>           init_done = true; >>       } >>       if (native) >> @@ -570,6 +603,10 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>       if (acpi_backlight_dmi != acpi_backlight_undef) >>           return acpi_backlight_dmi; >>   +    /* Special cases such as nvidia_wmi_ec and apple gmux. */ >> +    if (nvidia_wmi_ec_present) >> +        return acpi_backlight_nvidia_wmi_ec; >> + >>       /* On systems with ACPI video use either native or ACPI video. */ >>       if (video_caps & ACPI_VIDEO_BACKLIGHT) { >>           /* >> diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig >> index 0cff20265f97..807b989e3c77 100644 >> --- a/drivers/gpu/drm/gma500/Kconfig >> +++ b/drivers/gpu/drm/gma500/Kconfig >> @@ -7,6 +7,8 @@ config DRM_GMA500 >>       select ACPI_VIDEO if ACPI >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       help >>         Say yes for an experimental 2D KMS framebuffer driver for the >>         Intel GMA500 (Poulsbo), Intel GMA600 (Moorestown/Oak Trail) and >> diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig >> index 7ae3b7d67fcf..3efce05d7b57 100644 >> --- a/drivers/gpu/drm/i915/Kconfig >> +++ b/drivers/gpu/drm/i915/Kconfig >> @@ -23,6 +23,8 @@ config DRM_I915 >>       # but for select to work, need to select ACPI_VIDEO's dependencies, ick >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       select ACPI_VIDEO if ACPI >>       select ACPI_BUTTON if ACPI >>       select SYNC_FILE >> diff --git a/include/acpi/video.h b/include/acpi/video.h >> index 0625806d3bbd..91578e77ac4e 100644 >> --- a/include/acpi/video.h >> +++ b/include/acpi/video.h >> @@ -48,6 +48,7 @@ enum acpi_backlight_type { >>       acpi_backlight_video, >>       acpi_backlight_vendor, >>       acpi_backlight_native, >> +    acpi_backlight_nvidia_wmi_ec, >>   }; >>     #if IS_ENABLED(CONFIG_ACPI_VIDEO) > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 76BD0ECAAD4 for ; Mon, 29 Aug 2022 11:41:49 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 25C6510E4CC; Mon, 29 Aug 2022 11:41:48 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id BD58810EEB1 for ; Mon, 29 Aug 2022 11:41:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661773303; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=DfQoGAJhKh6pjk4V5JSkk4HxbW6AfXsic6VTax7iIK1eHQLNlMo54hDUOmxz3/GfXuiBFp kNxn/sTh8RwQQlVMwR/R5PRMwu2m2OT/IoaAJkk8v1X6g8Rlbtx0tfZ9zMo/7QVVnmVtka WmqzMB0uHxswYR2TZbTF5s0fPJAQ57A= Received: from mail-ed1-f72.google.com (mail-ed1-f72.google.com [209.85.208.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-493-EigJANo9MIuGr0oqj5_MtQ-1; Mon, 29 Aug 2022 07:41:42 -0400 X-MC-Unique: EigJANo9MIuGr0oqj5_MtQ-1 Received: by mail-ed1-f72.google.com with SMTP id ee47-20020a056402292f00b004486550972aso1927269edb.1 for ; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=iVBeHCOCzBFFVDvqyaWrRLqQfOM0y72hSb3Vr2CHBfyrcR+i89DZrKMlb242WM6LNg D1DLlh93r5bvD1NsVmjN2XJ17hih8qitR0GaLyJip4ey5qAazQdPXB4/X/ZxeCPhRJRs 1k1+M9vuKBWo/wfSNFVTI4EEOwgLQrHp4QKtMstNbSSeKB2OgpnYPKD80nyPWZZ/zIhB /kS7LzNX9L2jbBwXU3YQpFv5mDA1vysvhtlHGp0Kr92yVVVGRsg6QbeyNLnYuq5/9MUf 2MZzi1ChtYQQEY3CnZROacmhpfASvB3AntFlryl9d+1Ulxy2H6wDEspWGzfuFGt881tP 0tDw== X-Gm-Message-State: ACgBeo33BK2g2VOc3FNcKzZgz+Ezqse1+EbogcM5KiJMz0wsa09PMfvO okSgs/OUcHhF751MMAhE74UPBiLfdUtzhWZ8LD1U00onC9ZEcZRJYSYp+8yzY+mpVuNXyoxnMpW Xsc7U4dsa2XykyEzqTTcYOZh6xieN X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677754ejc.227.1661773301053; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR4EiH7klPrajd4w6phluOAxxP5+QSPfK7S4vRyR/vwmU8/fqFSjch/glWZJuzPXXquQHg2DRA== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677719ejc.227.1661773300758; Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Received: from [10.40.98.142] ([78.108.130.194]) by smtp.gmail.com with ESMTPSA id og4-20020a1709071dc400b0073ddfe1ea69sm4355852ejc.111.2022.08.29.04.41.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Message-ID: Date: Mon, 29 Aug 2022 13:41:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 To: Daniel Dadap , Ben Skeggs , Karol Herbst , Lyude , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Alex Deucher , =?UTF-8?Q?Christian_K=c3=b6nig?= , Xinhui , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Mark Gross , Andy Shevchenko References: <20220825143726.269890-1-hdegoede@redhat.com> <20220825143726.269890-18-hdegoede@redhat.com> From: Hans de Goede In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: Re: [Intel-gfx] [PATCH v5 17/31] ACPI: video: Add Nvidia WMI EC brightness control detection (v3) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nouveau@lists.freedesktop.org, intel-gfx , "Rafael J . Wysocki" , amd-gfx@lists.freedesktop.org, platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org, dri-devel@lists.freedesktop.org, Daniel Vetter , David Airlie , Len Brown Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Hi, On 8/26/22 00:21, Daniel Dadap wrote: > On 8/25/22 9:37 AM, Hans de Goede wrote: >> On some new laptop designs a new Nvidia specific WMI interface is present >> which gives info about panel brightness control and may allow controlling >> the brightness through this interface when the embedded controller is used >> for brightness control. >> >> When this WMI interface is present and indicates that the EC is used, >> then this interface should be used for brightness control. >> >> Changes in v2: >> - Use the new shared nvidia-wmi-ec-backlight.h header for the >>    WMI firmware API definitions >> - ACPI_VIDEO can now be enabled on non X86 too, >>    adjust the Kconfig changes to match this. >> >> Changes in v3: >> - Use WMI_BRIGHTNESS_GUID define >> >> Acked-by: Rafael J. Wysocki >> Signed-off-by: Hans de Goede >> --- >>   drivers/acpi/Kconfig           |  1 + >>   drivers/acpi/video_detect.c    | 37 ++++++++++++++++++++++++++++++++++ >>   drivers/gpu/drm/gma500/Kconfig |  2 ++ >>   drivers/gpu/drm/i915/Kconfig   |  2 ++ >>   include/acpi/video.h           |  1 + >>   5 files changed, 43 insertions(+) >> >> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig >> index 7802d8846a8d..44ad4b6bd234 100644 >> --- a/drivers/acpi/Kconfig >> +++ b/drivers/acpi/Kconfig >> @@ -212,6 +212,7 @@ config ACPI_VIDEO >>       tristate "Video" >>       depends on BACKLIGHT_CLASS_DEVICE >>       depends on INPUT >> +    depends on ACPI_WMI || !X86 >>       select THERMAL >>       help >>         This driver implements the ACPI Extensions For Display Adapters >> diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c >> index cc9d0d91e268..4dc7fb865083 100644 >> --- a/drivers/acpi/video_detect.c >> +++ b/drivers/acpi/video_detect.c >> @@ -32,6 +32,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -75,6 +76,36 @@ find_video(acpi_handle handle, u32 lvl, void *context, void **rv) >>       return AE_OK; >>   } >>   +/* This depends on ACPI_WMI which is X86 only */ >> +#ifdef CONFIG_X86 > > > This could probably also provide the { return false; } stub which you have for non-x86 if the kernel is built without nvidia-wmi-ec-backight, e.g.: > > #if defined(CONFIG_X86) && (defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT) || defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT_MODULE)) > > Although I suppose that would break things if somebody has a kernel that originally had NVIDIA_WMI_EC_BACKLIGHT=n in Kconfig, and then builds the nvidia-wmi-ec-backlight driver out-of-tree later. I don't know whether that's intended to be a supported use case, so I guess it is fine either way. The video-detect code is about detecting what interface should be used. So far it does this independently of the driver implementing that interface actually being enabled or not. If someone has a system which needs the nvidia-wmi-ec-backlight driver, but it is disabled then they / their distro should enable that driver, rather then trying to fallback on e.g. acpi_video. Taking which drivers are enabled into account would both make the code more complicated and would also explode the test matrix. All of this is already somewhat fragile, so lets not make it extra complicated :) Regards, Hans > > >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    struct wmi_brightness_args args = { >> +        .mode = WMI_BRIGHTNESS_MODE_GET, >> +        .val = 0, >> +        .ret = 0, >> +    }; >> +    struct acpi_buffer buf = { (acpi_size)sizeof(args), &args }; >> +    acpi_status status; >> + >> +    status = wmi_evaluate_method(WMI_BRIGHTNESS_GUID, 0, >> +                     WMI_BRIGHTNESS_METHOD_SOURCE, &buf, &buf); >> +    if (ACPI_FAILURE(status)) >> +        return false; >> + >> +    /* >> +     * If brightness is handled by the EC then nvidia-wmi-ec-backlight >> +     * should be used, else the GPU driver(s) should be used. >> +     */ >> +    return args.ret == WMI_BRIGHTNESS_SOURCE_EC; >> +} >> +#else >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    return false; >> +} >> +#endif >> + >>   /* Force to use vendor driver when the ACPI device is known to be >>    * buggy */ >>   static int video_detect_force_vendor(const struct dmi_system_id *d) >> @@ -541,6 +572,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { >>   static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>   { >>       static DEFINE_MUTEX(init_mutex); >> +    static bool nvidia_wmi_ec_present; >>       static bool native_available; >>       static bool init_done; >>       static long video_caps; >> @@ -553,6 +585,7 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>           acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, >>                       ACPI_UINT32_MAX, find_video, NULL, >>                       &video_caps, NULL); >> +        nvidia_wmi_ec_present = nvidia_wmi_ec_supported(); >>           init_done = true; >>       } >>       if (native) >> @@ -570,6 +603,10 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>       if (acpi_backlight_dmi != acpi_backlight_undef) >>           return acpi_backlight_dmi; >>   +    /* Special cases such as nvidia_wmi_ec and apple gmux. */ >> +    if (nvidia_wmi_ec_present) >> +        return acpi_backlight_nvidia_wmi_ec; >> + >>       /* On systems with ACPI video use either native or ACPI video. */ >>       if (video_caps & ACPI_VIDEO_BACKLIGHT) { >>           /* >> diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig >> index 0cff20265f97..807b989e3c77 100644 >> --- a/drivers/gpu/drm/gma500/Kconfig >> +++ b/drivers/gpu/drm/gma500/Kconfig >> @@ -7,6 +7,8 @@ config DRM_GMA500 >>       select ACPI_VIDEO if ACPI >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       help >>         Say yes for an experimental 2D KMS framebuffer driver for the >>         Intel GMA500 (Poulsbo), Intel GMA600 (Moorestown/Oak Trail) and >> diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig >> index 7ae3b7d67fcf..3efce05d7b57 100644 >> --- a/drivers/gpu/drm/i915/Kconfig >> +++ b/drivers/gpu/drm/i915/Kconfig >> @@ -23,6 +23,8 @@ config DRM_I915 >>       # but for select to work, need to select ACPI_VIDEO's dependencies, ick >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       select ACPI_VIDEO if ACPI >>       select ACPI_BUTTON if ACPI >>       select SYNC_FILE >> diff --git a/include/acpi/video.h b/include/acpi/video.h >> index 0625806d3bbd..91578e77ac4e 100644 >> --- a/include/acpi/video.h >> +++ b/include/acpi/video.h >> @@ -48,6 +48,7 @@ enum acpi_backlight_type { >>       acpi_backlight_video, >>       acpi_backlight_vendor, >>       acpi_backlight_native, >> +    acpi_backlight_nvidia_wmi_ec, >>   }; >>     #if IS_ENABLED(CONFIG_ACPI_VIDEO) > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1ED18ECAAD4 for ; Mon, 29 Aug 2022 11:59:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229848AbiH2L7A (ORCPT ); Mon, 29 Aug 2022 07:59:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231271AbiH2L6g (ORCPT ); Mon, 29 Aug 2022 07:58:36 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF3EA844D2 for ; Mon, 29 Aug 2022 04:43:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661773312; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=NGen50uW2vgSYbocddnt6rDebysUnVb1sCZ2XHQO2WW4AZFT38kux8zyv7f0+hxUbqJ1Ga RZ1O+zYxBfGTjO7tlZc6LazcHalxcOVl3IP3iB6xjreLULW18qwQPr4pa9VajOXxQi/hMy rjyzndmR9pwDTWGMlQ/YT0FiGtSvutQ= Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-493-t186dx77MT-XXPBBhFiMyw-1; Mon, 29 Aug 2022 07:41:42 -0400 X-MC-Unique: t186dx77MT-XXPBBhFiMyw-1 Received: by mail-ed1-f69.google.com with SMTP id y12-20020a056402358c00b00448898f1c33so938883edc.7 for ; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=ZL0lysVE1MGCeCf10yQLaERsc2Vm0Q/toh6zGNIk8tVU8qCuiWgmfTUgOplrrgL0oi +JHu370LLvws1grgftuLBzms79B1qCRcQYLHIdv6IMnqDWa5CSKkX3edNhOd4MiSRdTW oi0K35cMDJERlR2S3cIeHs5KrdyB/3zK0HigHuQxMtlduDIx9Sw4zPCSnvorL6tp7U6R U3mZ3mWYgl2TlKMMYrX7PmC7UQ4SLb++5l5kcyU6DuuZuLspW/mmrN8j0QBvSbv5Mu9E lHT+WxJf9w7eMMQE4cTxBrsVoCp3AfXKUn37iLpbtbGslhM19R7SoEMuou4LKJuT4uK8 GXZQ== X-Gm-Message-State: ACgBeo17JMEbFjjtsbYtSxWJuH56Cmu9aBefKuHRJeU/fDsODIoRiK5U CRk2yX08O5Xdapt3ClQrCxUqX9zYpJjMItkwb6290a95xHiYRR79jHaEvWrK2WWtvOEXobFJN1t soekD0RIcrEdqt+6gkDcgrA== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677749ejc.227.1661773301001; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR4EiH7klPrajd4w6phluOAxxP5+QSPfK7S4vRyR/vwmU8/fqFSjch/glWZJuzPXXquQHg2DRA== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677719ejc.227.1661773300758; Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Received: from [10.40.98.142] ([78.108.130.194]) by smtp.gmail.com with ESMTPSA id og4-20020a1709071dc400b0073ddfe1ea69sm4355852ejc.111.2022.08.29.04.41.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Message-ID: Date: Mon, 29 Aug 2022 13:41:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH v5 17/31] ACPI: video: Add Nvidia WMI EC brightness control detection (v3) Content-Language: en-US To: Daniel Dadap , Ben Skeggs , Karol Herbst , Lyude , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Alex Deucher , =?UTF-8?Q?Christian_K=c3=b6nig?= , Xinhui , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Mark Gross , Andy Shevchenko Cc: nouveau@lists.freedesktop.org, Daniel Vetter , David Airlie , intel-gfx , dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, Len Brown , linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org, "Rafael J . Wysocki" References: <20220825143726.269890-1-hdegoede@redhat.com> <20220825143726.269890-18-hdegoede@redhat.com> From: Hans de Goede In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org Hi, On 8/26/22 00:21, Daniel Dadap wrote: > On 8/25/22 9:37 AM, Hans de Goede wrote: >> On some new laptop designs a new Nvidia specific WMI interface is present >> which gives info about panel brightness control and may allow controlling >> the brightness through this interface when the embedded controller is used >> for brightness control. >> >> When this WMI interface is present and indicates that the EC is used, >> then this interface should be used for brightness control. >> >> Changes in v2: >> - Use the new shared nvidia-wmi-ec-backlight.h header for the >>    WMI firmware API definitions >> - ACPI_VIDEO can now be enabled on non X86 too, >>    adjust the Kconfig changes to match this. >> >> Changes in v3: >> - Use WMI_BRIGHTNESS_GUID define >> >> Acked-by: Rafael J. Wysocki >> Signed-off-by: Hans de Goede >> --- >>   drivers/acpi/Kconfig           |  1 + >>   drivers/acpi/video_detect.c    | 37 ++++++++++++++++++++++++++++++++++ >>   drivers/gpu/drm/gma500/Kconfig |  2 ++ >>   drivers/gpu/drm/i915/Kconfig   |  2 ++ >>   include/acpi/video.h           |  1 + >>   5 files changed, 43 insertions(+) >> >> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig >> index 7802d8846a8d..44ad4b6bd234 100644 >> --- a/drivers/acpi/Kconfig >> +++ b/drivers/acpi/Kconfig >> @@ -212,6 +212,7 @@ config ACPI_VIDEO >>       tristate "Video" >>       depends on BACKLIGHT_CLASS_DEVICE >>       depends on INPUT >> +    depends on ACPI_WMI || !X86 >>       select THERMAL >>       help >>         This driver implements the ACPI Extensions For Display Adapters >> diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c >> index cc9d0d91e268..4dc7fb865083 100644 >> --- a/drivers/acpi/video_detect.c >> +++ b/drivers/acpi/video_detect.c >> @@ -32,6 +32,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -75,6 +76,36 @@ find_video(acpi_handle handle, u32 lvl, void *context, void **rv) >>       return AE_OK; >>   } >>   +/* This depends on ACPI_WMI which is X86 only */ >> +#ifdef CONFIG_X86 > > > This could probably also provide the { return false; } stub which you have for non-x86 if the kernel is built without nvidia-wmi-ec-backight, e.g.: > > #if defined(CONFIG_X86) && (defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT) || defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT_MODULE)) > > Although I suppose that would break things if somebody has a kernel that originally had NVIDIA_WMI_EC_BACKLIGHT=n in Kconfig, and then builds the nvidia-wmi-ec-backlight driver out-of-tree later. I don't know whether that's intended to be a supported use case, so I guess it is fine either way. The video-detect code is about detecting what interface should be used. So far it does this independently of the driver implementing that interface actually being enabled or not. If someone has a system which needs the nvidia-wmi-ec-backlight driver, but it is disabled then they / their distro should enable that driver, rather then trying to fallback on e.g. acpi_video. Taking which drivers are enabled into account would both make the code more complicated and would also explode the test matrix. All of this is already somewhat fragile, so lets not make it extra complicated :) Regards, Hans > > >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    struct wmi_brightness_args args = { >> +        .mode = WMI_BRIGHTNESS_MODE_GET, >> +        .val = 0, >> +        .ret = 0, >> +    }; >> +    struct acpi_buffer buf = { (acpi_size)sizeof(args), &args }; >> +    acpi_status status; >> + >> +    status = wmi_evaluate_method(WMI_BRIGHTNESS_GUID, 0, >> +                     WMI_BRIGHTNESS_METHOD_SOURCE, &buf, &buf); >> +    if (ACPI_FAILURE(status)) >> +        return false; >> + >> +    /* >> +     * If brightness is handled by the EC then nvidia-wmi-ec-backlight >> +     * should be used, else the GPU driver(s) should be used. >> +     */ >> +    return args.ret == WMI_BRIGHTNESS_SOURCE_EC; >> +} >> +#else >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    return false; >> +} >> +#endif >> + >>   /* Force to use vendor driver when the ACPI device is known to be >>    * buggy */ >>   static int video_detect_force_vendor(const struct dmi_system_id *d) >> @@ -541,6 +572,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { >>   static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>   { >>       static DEFINE_MUTEX(init_mutex); >> +    static bool nvidia_wmi_ec_present; >>       static bool native_available; >>       static bool init_done; >>       static long video_caps; >> @@ -553,6 +585,7 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>           acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, >>                       ACPI_UINT32_MAX, find_video, NULL, >>                       &video_caps, NULL); >> +        nvidia_wmi_ec_present = nvidia_wmi_ec_supported(); >>           init_done = true; >>       } >>       if (native) >> @@ -570,6 +603,10 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>       if (acpi_backlight_dmi != acpi_backlight_undef) >>           return acpi_backlight_dmi; >>   +    /* Special cases such as nvidia_wmi_ec and apple gmux. */ >> +    if (nvidia_wmi_ec_present) >> +        return acpi_backlight_nvidia_wmi_ec; >> + >>       /* On systems with ACPI video use either native or ACPI video. */ >>       if (video_caps & ACPI_VIDEO_BACKLIGHT) { >>           /* >> diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig >> index 0cff20265f97..807b989e3c77 100644 >> --- a/drivers/gpu/drm/gma500/Kconfig >> +++ b/drivers/gpu/drm/gma500/Kconfig >> @@ -7,6 +7,8 @@ config DRM_GMA500 >>       select ACPI_VIDEO if ACPI >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       help >>         Say yes for an experimental 2D KMS framebuffer driver for the >>         Intel GMA500 (Poulsbo), Intel GMA600 (Moorestown/Oak Trail) and >> diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig >> index 7ae3b7d67fcf..3efce05d7b57 100644 >> --- a/drivers/gpu/drm/i915/Kconfig >> +++ b/drivers/gpu/drm/i915/Kconfig >> @@ -23,6 +23,8 @@ config DRM_I915 >>       # but for select to work, need to select ACPI_VIDEO's dependencies, ick >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       select ACPI_VIDEO if ACPI >>       select ACPI_BUTTON if ACPI >>       select SYNC_FILE >> diff --git a/include/acpi/video.h b/include/acpi/video.h >> index 0625806d3bbd..91578e77ac4e 100644 >> --- a/include/acpi/video.h >> +++ b/include/acpi/video.h >> @@ -48,6 +48,7 @@ enum acpi_backlight_type { >>       acpi_backlight_video, >>       acpi_backlight_vendor, >>       acpi_backlight_native, >> +    acpi_backlight_nvidia_wmi_ec, >>   }; >>     #if IS_ENABLED(CONFIG_ACPI_VIDEO) > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EEEF2ECAAD4 for ; Mon, 29 Aug 2022 13:02:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CEB0010E1F7; Mon, 29 Aug 2022 13:02:34 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2DD6E10F15A for ; Mon, 29 Aug 2022 11:41:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661773312; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=NGen50uW2vgSYbocddnt6rDebysUnVb1sCZ2XHQO2WW4AZFT38kux8zyv7f0+hxUbqJ1Ga RZ1O+zYxBfGTjO7tlZc6LazcHalxcOVl3IP3iB6xjreLULW18qwQPr4pa9VajOXxQi/hMy rjyzndmR9pwDTWGMlQ/YT0FiGtSvutQ= Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-493-8tUa0_yEPe-wNgPiYNgFdw-1; Mon, 29 Aug 2022 07:41:42 -0400 X-MC-Unique: 8tUa0_yEPe-wNgPiYNgFdw-1 Received: by mail-ed1-f69.google.com with SMTP id h6-20020aa7de06000000b004483647900fso3141563edv.21 for ; Mon, 29 Aug 2022 04:41:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc; bh=3l2HRNkVfIlxa2ShqNnx3ZVFXVGd+8W6TGzJQVH9z/E=; b=BG2cdWEF91y2Dft1X3y13+0KF7zh/GN2cIzeyGlf5RFGRiJ7gGvlxkA9wAslE6T5Ub jzMdkER41mtpF+saTvpDUjUAaOHoG9B7c7A1J4vKLra7XQx7BghYvXe8/kACOEm78Kx4 vdzWsKjRjdaBjtKzeeBaVpFAMUKa79EHorFAYK9oB2BtxqBeapAVzD4G3D21ZkMD8nO3 axeSBkQJCwFjhpOs+xErQYMv+09BolpCQQwA68f2IzDWOmJa630em94qRt56SAumWPDv 1LAD/XMyoYjeti1OKdWVArxCXJ0f5uDTE2/igFXuc3nYAvI/AVZvdchj7AVFqRrBWNJV HjjQ== X-Gm-Message-State: ACgBeo237iKO8m3H78scr+u52H49P1zvdBxzeejl91f1sokJKd8meK45 yoYt1yU3YAcOT99pu2O8tQ1niCVnsgMHBTHQ+/LdREhKXaN910MN0Ay5hq22BluZh1hGP4yzKgS 9rZB9vzAeU+BFnYJll/k3BoPy4A== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677745ejc.227.1661773300987; Mon, 29 Aug 2022 04:41:40 -0700 (PDT) X-Google-Smtp-Source: AA6agR4EiH7klPrajd4w6phluOAxxP5+QSPfK7S4vRyR/vwmU8/fqFSjch/glWZJuzPXXquQHg2DRA== X-Received: by 2002:a17:907:75c1:b0:72f:248d:5259 with SMTP id jl1-20020a17090775c100b0072f248d5259mr13677719ejc.227.1661773300758; Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Received: from [10.40.98.142] ([78.108.130.194]) by smtp.gmail.com with ESMTPSA id og4-20020a1709071dc400b0073ddfe1ea69sm4355852ejc.111.2022.08.29.04.41.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 29 Aug 2022 04:41:40 -0700 (PDT) Message-ID: Date: Mon, 29 Aug 2022 13:41:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 Subject: Re: [PATCH v5 17/31] ACPI: video: Add Nvidia WMI EC brightness control detection (v3) To: Daniel Dadap , Ben Skeggs , Karol Herbst , Lyude , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Alex Deucher , =?UTF-8?Q?Christian_K=c3=b6nig?= , Xinhui , "Rafael J . Wysocki" , Mika Westerberg , Lukas Wunner , Mark Gross , Andy Shevchenko References: <20220825143726.269890-1-hdegoede@redhat.com> <20220825143726.269890-18-hdegoede@redhat.com> From: Hans de Goede In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Mailman-Approved-At: Mon, 29 Aug 2022 13:02:32 +0000 X-BeenThere: amd-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nouveau@lists.freedesktop.org, intel-gfx , "Rafael J . Wysocki" , amd-gfx@lists.freedesktop.org, platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org, dri-devel@lists.freedesktop.org, Daniel Vetter , David Airlie , Len Brown Errors-To: amd-gfx-bounces@lists.freedesktop.org Sender: "amd-gfx" Hi, On 8/26/22 00:21, Daniel Dadap wrote: > On 8/25/22 9:37 AM, Hans de Goede wrote: >> On some new laptop designs a new Nvidia specific WMI interface is present >> which gives info about panel brightness control and may allow controlling >> the brightness through this interface when the embedded controller is used >> for brightness control. >> >> When this WMI interface is present and indicates that the EC is used, >> then this interface should be used for brightness control. >> >> Changes in v2: >> - Use the new shared nvidia-wmi-ec-backlight.h header for the >>    WMI firmware API definitions >> - ACPI_VIDEO can now be enabled on non X86 too, >>    adjust the Kconfig changes to match this. >> >> Changes in v3: >> - Use WMI_BRIGHTNESS_GUID define >> >> Acked-by: Rafael J. Wysocki >> Signed-off-by: Hans de Goede >> --- >>   drivers/acpi/Kconfig           |  1 + >>   drivers/acpi/video_detect.c    | 37 ++++++++++++++++++++++++++++++++++ >>   drivers/gpu/drm/gma500/Kconfig |  2 ++ >>   drivers/gpu/drm/i915/Kconfig   |  2 ++ >>   include/acpi/video.h           |  1 + >>   5 files changed, 43 insertions(+) >> >> diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig >> index 7802d8846a8d..44ad4b6bd234 100644 >> --- a/drivers/acpi/Kconfig >> +++ b/drivers/acpi/Kconfig >> @@ -212,6 +212,7 @@ config ACPI_VIDEO >>       tristate "Video" >>       depends on BACKLIGHT_CLASS_DEVICE >>       depends on INPUT >> +    depends on ACPI_WMI || !X86 >>       select THERMAL >>       help >>         This driver implements the ACPI Extensions For Display Adapters >> diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c >> index cc9d0d91e268..4dc7fb865083 100644 >> --- a/drivers/acpi/video_detect.c >> +++ b/drivers/acpi/video_detect.c >> @@ -32,6 +32,7 @@ >>   #include >>   #include >>   #include >> +#include >>   #include >>   #include >>   #include >> @@ -75,6 +76,36 @@ find_video(acpi_handle handle, u32 lvl, void *context, void **rv) >>       return AE_OK; >>   } >>   +/* This depends on ACPI_WMI which is X86 only */ >> +#ifdef CONFIG_X86 > > > This could probably also provide the { return false; } stub which you have for non-x86 if the kernel is built without nvidia-wmi-ec-backight, e.g.: > > #if defined(CONFIG_X86) && (defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT) || defined(CONFIG_NVIDIA_WMI_EC_BACKLIGHT_MODULE)) > > Although I suppose that would break things if somebody has a kernel that originally had NVIDIA_WMI_EC_BACKLIGHT=n in Kconfig, and then builds the nvidia-wmi-ec-backlight driver out-of-tree later. I don't know whether that's intended to be a supported use case, so I guess it is fine either way. The video-detect code is about detecting what interface should be used. So far it does this independently of the driver implementing that interface actually being enabled or not. If someone has a system which needs the nvidia-wmi-ec-backlight driver, but it is disabled then they / their distro should enable that driver, rather then trying to fallback on e.g. acpi_video. Taking which drivers are enabled into account would both make the code more complicated and would also explode the test matrix. All of this is already somewhat fragile, so lets not make it extra complicated :) Regards, Hans > > >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    struct wmi_brightness_args args = { >> +        .mode = WMI_BRIGHTNESS_MODE_GET, >> +        .val = 0, >> +        .ret = 0, >> +    }; >> +    struct acpi_buffer buf = { (acpi_size)sizeof(args), &args }; >> +    acpi_status status; >> + >> +    status = wmi_evaluate_method(WMI_BRIGHTNESS_GUID, 0, >> +                     WMI_BRIGHTNESS_METHOD_SOURCE, &buf, &buf); >> +    if (ACPI_FAILURE(status)) >> +        return false; >> + >> +    /* >> +     * If brightness is handled by the EC then nvidia-wmi-ec-backlight >> +     * should be used, else the GPU driver(s) should be used. >> +     */ >> +    return args.ret == WMI_BRIGHTNESS_SOURCE_EC; >> +} >> +#else >> +static bool nvidia_wmi_ec_supported(void) >> +{ >> +    return false; >> +} >> +#endif >> + >>   /* Force to use vendor driver when the ACPI device is known to be >>    * buggy */ >>   static int video_detect_force_vendor(const struct dmi_system_id *d) >> @@ -541,6 +572,7 @@ static const struct dmi_system_id video_detect_dmi_table[] = { >>   static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>   { >>       static DEFINE_MUTEX(init_mutex); >> +    static bool nvidia_wmi_ec_present; >>       static bool native_available; >>       static bool init_done; >>       static long video_caps; >> @@ -553,6 +585,7 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>           acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, >>                       ACPI_UINT32_MAX, find_video, NULL, >>                       &video_caps, NULL); >> +        nvidia_wmi_ec_present = nvidia_wmi_ec_supported(); >>           init_done = true; >>       } >>       if (native) >> @@ -570,6 +603,10 @@ static enum acpi_backlight_type __acpi_video_get_backlight_type(bool native) >>       if (acpi_backlight_dmi != acpi_backlight_undef) >>           return acpi_backlight_dmi; >>   +    /* Special cases such as nvidia_wmi_ec and apple gmux. */ >> +    if (nvidia_wmi_ec_present) >> +        return acpi_backlight_nvidia_wmi_ec; >> + >>       /* On systems with ACPI video use either native or ACPI video. */ >>       if (video_caps & ACPI_VIDEO_BACKLIGHT) { >>           /* >> diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig >> index 0cff20265f97..807b989e3c77 100644 >> --- a/drivers/gpu/drm/gma500/Kconfig >> +++ b/drivers/gpu/drm/gma500/Kconfig >> @@ -7,6 +7,8 @@ config DRM_GMA500 >>       select ACPI_VIDEO if ACPI >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       help >>         Say yes for an experimental 2D KMS framebuffer driver for the >>         Intel GMA500 (Poulsbo), Intel GMA600 (Moorestown/Oak Trail) and >> diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig >> index 7ae3b7d67fcf..3efce05d7b57 100644 >> --- a/drivers/gpu/drm/i915/Kconfig >> +++ b/drivers/gpu/drm/i915/Kconfig >> @@ -23,6 +23,8 @@ config DRM_I915 >>       # but for select to work, need to select ACPI_VIDEO's dependencies, ick >>       select BACKLIGHT_CLASS_DEVICE if ACPI >>       select INPUT if ACPI >> +    select X86_PLATFORM_DEVICES if ACPI >> +    select ACPI_WMI if ACPI >>       select ACPI_VIDEO if ACPI >>       select ACPI_BUTTON if ACPI >>       select SYNC_FILE >> diff --git a/include/acpi/video.h b/include/acpi/video.h >> index 0625806d3bbd..91578e77ac4e 100644 >> --- a/include/acpi/video.h >> +++ b/include/acpi/video.h >> @@ -48,6 +48,7 @@ enum acpi_backlight_type { >>       acpi_backlight_video, >>       acpi_backlight_vendor, >>       acpi_backlight_native, >> +    acpi_backlight_nvidia_wmi_ec, >>   }; >>     #if IS_ENABLED(CONFIG_ACPI_VIDEO) >