On Tue, Jul 12, 2022 at 3:40 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > Typically the acpi_video driver will initialize before radeon, which > used to cause /sys/class/backlight/acpi_video0 to get registered and then > radeon would register its own radeon_bl# device later. After which > the drivers/acpi/video_detect.c code unregistered the acpi_video0 device > to avoid there being 2 backlight devices. > > This means that userspace used to briefly see 2 devices and the > disappearing of acpi_video0 after a brief time confuses the systemd > backlight level save/restore code, see e.g.: > https://bbs.archlinux.org/viewtopic.php?id=269920 > > To fix this the ACPI video code has been modified to make backlight class > device registration a separate step, relying on the drm/kms driver to > ask for the acpi_video backlight registration after it is done setting up > its native backlight device. > > Add a call to the new acpi_video_register_backlight() when radeon skips > registering its own backlight device because of e.g. the firmware_flags > or the acpi_video_get_backlight_type() return value. This ensures that > if the acpi_video backlight device should be used, it will be available > before the radeon drm_device gets registered with userspace. > > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Acked-by: Alex Deucher <alexander.deucher@xxxxxxx> > --- > drivers/gpu/drm/radeon/radeon_encoders.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c > index 46549d5179ee..c1cbebb51be1 100644 > --- a/drivers/gpu/drm/radeon/radeon_encoders.c > +++ b/drivers/gpu/drm/radeon/radeon_encoders.c > @@ -30,6 +30,8 @@ > #include <drm/drm_device.h> > #include <drm/radeon_drm.h> > > +#include <acpi/video.h> > + > #include "radeon.h" > #include "radeon_atombios.h" > #include "radeon_legacy_encoders.h" > @@ -167,7 +169,7 @@ static void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder, > return; > > if (radeon_backlight == 0) { > - return; > + use_bl = false; > } else if (radeon_backlight == 1) { > use_bl = true; > } else if (radeon_backlight == -1) { > @@ -193,6 +195,13 @@ static void radeon_encoder_add_backlight(struct radeon_encoder *radeon_encoder, > else > radeon_legacy_backlight_init(radeon_encoder, connector); > } > + > + /* > + * If there is no native backlight device (which may happen even when > + * use_bl==true) try registering an ACPI video backlight device instead. > + */ > + if (!rdev->mode_info.bl_encoder) > + acpi_video_register_backlight(); > } > > void > -- > 2.36.0 >