[PATCH v2 20/29] platform/x86: acer-wmi: Move backlight DMI quirks to acpi/video_detect.c
Daniel Dadap
ddadap at nvidia.com
Tue Jul 12 20:24:14 UTC 2022
I'll ask around to see if there's some DMI property we can match in
order to detect whether a system is expected to use the EC backlight
driver: if so, maybe we can avoid the WMI interactions in patch 16/29 of
this series. Although I suppose even if there were a DMI property, we'd
still need to call the WMI-wrapped ACPI method to check whether the
system is currently configured to drive the backlight through the EC,
unless the system somehow exports a different DMI table depending on the
current backlight control configuration, which I imagine to be unlikely.
This change looks fine to me, although I suppose somebody who maintains
the acer-wmi driver should comment. The bugzilla links are a nice touch.
On 7/12/22 14:39, Hans de Goede wrote:
> Move the backlight DMI quirks to acpi/video_detect.c, so that
> the driver no longer needs to call acpi_video_set_dmi_backlight_type().
>
> acpi_video_set_dmi_backlight_type() is troublesome because it may end up
> getting called after other backlight drivers have already called
> acpi_video_get_backlight_type() resulting in the other drivers
> already being registered even though they should not.
>
> Note that even though the DMI quirk table name was video_vendor_dmi_table,
> 5/6 quirks were actually quirks to use the GPU native backlight.
>
> These 5 quirks also had a callback in their dmi_system_id entry which
> disabled the acer-wmi vendor driver; and any DMI match resulted in:
>
> acpi_video_set_dmi_backlight_type(acpi_backlight_vendor);
>
> which disabled the acpi_video driver, so only the native driver was left.
> The new entries for these 5/6 devices correctly marks these as needing
> the native backlight driver.
>
> Also note that other changes in this series change the native backlight
> drivers to no longer unconditionally register their backlight. Instead
> these drivers now do this check:
>
> if (acpi_video_get_backlight_type(false) != acpi_backlight_native)
> return 0; /* bail */
>
> which without this patch would have broken these 5/6 "special" quirks.
>
> Since I had to look at all the commits adding the quirks anyways, to make
> sure that I understood the code correctly, I've also added links to
> the various original bugzillas for these quirks to the new entries.
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
> drivers/acpi/video_detect.c | 53 ++++++++++++++++++++++++++
> drivers/platform/x86/acer-wmi.c | 66 ---------------------------------
> 2 files changed, 53 insertions(+), 66 deletions(-)
>
> diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
> index a514adaec14d..cd51cb0d7821 100644
> --- a/drivers/acpi/video_detect.c
> +++ b/drivers/acpi/video_detect.c
> @@ -147,6 +147,15 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
> DMI_MATCH(DMI_BOARD_NAME, "X360"),
> },
> },
> + {
> + /* https://bugzilla.redhat.com/show_bug.cgi?id=1128309 */
> + .callback = video_detect_force_vendor,
> + /* Acer KAV80 */
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "KAV80"),
> + },
> + },
> {
> .callback = video_detect_force_vendor,
> /* Asus UL30VT */
> @@ -427,6 +436,41 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
> DMI_MATCH(DMI_BOARD_NAME, "JV50"),
> },
> },
> + {
> + /* https://bugzilla.redhat.com/show_bug.cgi?id=1012674 */
> + .callback = video_detect_force_native,
> + /* Acer Aspire 5741 */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5741"),
> + },
> + },
> + {
> + /* https://bugzilla.kernel.org/show_bug.cgi?id=42993 */
> + .callback = video_detect_force_native,
> + /* Acer Aspire 5750 */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5750"),
> + },
> + },
> + {
> + /* https://bugzilla.kernel.org/show_bug.cgi?id=42833 */
> + .callback = video_detect_force_native,
> + /* Acer Extensa 5235 */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "Extensa 5235"),
> + },
> + },
> + {
> + .callback = video_detect_force_native,
> + /* Acer TravelMate 4750 */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4750"),
> + },
> + },
> {
> /* https://bugzilla.kernel.org/show_bug.cgi?id=207835 */
> .callback = video_detect_force_native,
> @@ -437,6 +481,15 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
> DMI_MATCH(DMI_BOARD_NAME, "BA51_MV"),
> },
> },
> + {
> + /* https://bugzilla.kernel.org/show_bug.cgi?id=36322 */
> + .callback = video_detect_force_native,
> + /* Acer TravelMate 5760 */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> + DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 5760"),
> + },
> + },
> {
> .callback = video_detect_force_native,
> /* ASUSTeK COMPUTER INC. GA401 */
> diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
> index 9c6943e401a6..c08eeb1e0e05 100644
> --- a/drivers/platform/x86/acer-wmi.c
> +++ b/drivers/platform/x86/acer-wmi.c
> @@ -643,69 +643,6 @@ static const struct dmi_system_id non_acer_quirks[] __initconst = {
> {}
> };
>
> -static int __init
> -video_set_backlight_video_vendor(const struct dmi_system_id *d)
> -{
> - interface->capability &= ~ACER_CAP_BRIGHTNESS;
> - pr_info("Brightness must be controlled by generic video driver\n");
> - return 0;
> -}
> -
> -static const struct dmi_system_id video_vendor_dmi_table[] __initconst = {
> - {
> - .callback = video_set_backlight_video_vendor,
> - .ident = "Acer TravelMate 4750",
> - .matches = {
> - DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> - DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4750"),
> - },
> - },
> - {
> - .callback = video_set_backlight_video_vendor,
> - .ident = "Acer Extensa 5235",
> - .matches = {
> - DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> - DMI_MATCH(DMI_PRODUCT_NAME, "Extensa 5235"),
> - },
> - },
> - {
> - .callback = video_set_backlight_video_vendor,
> - .ident = "Acer TravelMate 5760",
> - .matches = {
> - DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> - DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 5760"),
> - },
> - },
> - {
> - .callback = video_set_backlight_video_vendor,
> - .ident = "Acer Aspire 5750",
> - .matches = {
> - DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> - DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5750"),
> - },
> - },
> - {
> - .callback = video_set_backlight_video_vendor,
> - .ident = "Acer Aspire 5741",
> - .matches = {
> - DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
> - DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5741"),
> - },
> - },
> - {
> - /*
> - * Note no video_set_backlight_video_vendor, we must use the
> - * acer interface, as there is no native backlight interface.
> - */
> - .ident = "Acer KAV80",
> - .matches = {
> - DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
> - DMI_MATCH(DMI_PRODUCT_NAME, "KAV80"),
> - },
> - },
> - {}
> -};
> -
> /* Find which quirks are needed for a particular vendor/ model pair */
> static void __init find_quirks(void)
> {
> @@ -2482,9 +2419,6 @@ static int __init acer_wmi_init(void)
>
> set_quirks();
>
> - if (dmi_check_system(video_vendor_dmi_table))
> - acpi_video_set_dmi_backlight_type(acpi_backlight_vendor);
> -
> if (acpi_video_get_backlight_type() != acpi_backlight_vendor)
> interface->capability &= ~ACER_CAP_BRIGHTNESS;
>
More information about the dri-devel
mailing list