drm/radeon: Don't register backlight when another backlight should be used (v3)
authorHans de Goede <hdegoede@redhat.com>
Fri, 15 Apr 2022 20:24:21 +0000 (22:24 +0200)
committerHans de Goede <hdegoede@redhat.com>
Thu, 25 Aug 2022 08:56:20 +0000 (10:56 +0200)
Before this commit when we want userspace to use the acpi_video backlight
device we register both the GPU's native backlight device and acpi_video's
firmware acpi_video# backlight device. This relies on userspace preferring
firmware type backlight devices over native ones.

Registering 2 backlight devices for a single display really is
undesirable, don't register the GPU's native backlight device when
another backlight device should be used.

Changes in v2:
- To avoid linker errors when amdgpu is builtin and video_detect.c is in
  a module, select ACPI_VIDEO and its deps if ACPI is enabled.
  When ACPI is disabled, ACPI_VIDEO is also always disabled, ensuring
  the stubs from acpi/video.h will be used.

Changes in v3:
- Use drm_info(drm_dev, "...") to log messages
- ACPI_VIDEO can now be enabled on non X86 too,
  adjust the Kconfig changes to match this.

Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/gpu/drm/Kconfig
drivers/gpu/drm/radeon/atombios_encoders.c
drivers/gpu/drm/radeon/radeon_legacy_encoders.c

index a9139c6c3a091ae7e97f17712965958f624c2958..8cafe63c98fcbd875e2e537e1d8c65eb1c23d7a3 100644 (file)
@@ -248,6 +248,13 @@ config DRM_RADEON
        select HWMON
        select BACKLIGHT_CLASS_DEVICE
        select INTERVAL_TREE
+       # radeon depends on ACPI_VIDEO when ACPI is enabled, for select to work
+       # ACPI_VIDEO's dependencies must also be selected.
+       select INPUT if ACPI
+       select ACPI_VIDEO if ACPI
+       # On x86 ACPI_VIDEO also needs ACPI_WMI
+       select X86_PLATFORM_DEVICES if ACPI && X86
+       select ACPI_WMI if ACPI && X86
        help
          Choose this option if you have an ATI Radeon graphics card.  There
          are both PCI and AGP versions.  You don't need to choose this to
index c93040e60d040b96bc6131e46e28690430fd8dd4..2b01edea8fe8a9afdda5dcc2e6c729a4c5970033 100644 (file)
@@ -32,6 +32,8 @@
 #include <drm/drm_file.h>
 #include <drm/radeon_drm.h>
 
+#include <acpi/video.h>
+
 #include "atom.h"
 #include "radeon_atombios.h"
 #include "radeon.h"
@@ -209,6 +211,11 @@ void radeon_atom_backlight_init(struct radeon_encoder *radeon_encoder,
        if (!(rdev->mode_info.firmware_flags & ATOM_BIOS_INFO_BL_CONTROLLED_BY_GPU))
                return;
 
+       if (!acpi_video_backlight_use_native()) {
+               drm_info(dev, "Skipping radeon atom DIG backlight registration\n");
+               return;
+       }
+
        pdata = kmalloc(sizeof(struct radeon_backlight_privdata), GFP_KERNEL);
        if (!pdata) {
                DRM_ERROR("Memory allocation failed\n");
index 1a66fb969ee750a617b200df3d033f63c6e5d048..0cd32c65456c2b29f12bc072b42cb7dce271c982 100644 (file)
@@ -33,6 +33,8 @@
 #include <drm/drm_util.h>
 #include <drm/radeon_drm.h>
 
+#include <acpi/video.h>
+
 #include "radeon.h"
 #include "radeon_asic.h"
 #include "radeon_legacy_encoders.h"
@@ -387,6 +389,11 @@ void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
                return;
 #endif
 
+       if (!acpi_video_backlight_use_native()) {
+               drm_info(dev, "Skipping radeon legacy LVDS backlight registration\n");
+               return;
+       }
+
        pdata = kmalloc(sizeof(struct radeon_backlight_privdata), GFP_KERNEL);
        if (!pdata) {
                DRM_ERROR("Memory allocation failed\n");