--- /dev/null
+From 76cb763e6ea62e838ccc8f7a1ea4246d690fccc9 Mon Sep 17 00:00:00 2001
+From: Mario Limonciello <mario.limonciello@amd.com>
+Date: Thu, 9 May 2024 12:05:24 -0500
+Subject: drm/amd/display: Don't register panel_power_savings on OLED panels
+
+From: Mario Limonciello <mario.limonciello@amd.com>
+
+commit 76cb763e6ea62e838ccc8f7a1ea4246d690fccc9 upstream.
+
+OLED panels don't support the ABM, they shouldn't offer the
+panel_power_savings attribute to the user. Check whether aux BL
+control support was enabled to decide whether to offer it.
+
+Reported-by: Gergo Koteles <soyer@irl.hu>
+Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3359
+Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Tested-by: Gergo Koteles <soyer@irl.hu>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 29 ++++++++++++++++++----
+ 1 file changed, 25 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -6562,12 +6562,34 @@ static const struct attribute_group amdg
+ .attrs = amdgpu_attrs
+ };
+
++static bool
++amdgpu_dm_should_create_sysfs(struct amdgpu_dm_connector *amdgpu_dm_connector)
++{
++ if (amdgpu_dm_abm_level >= 0)
++ return false;
++
++ if (amdgpu_dm_connector->base.connector_type != DRM_MODE_CONNECTOR_eDP)
++ return false;
++
++ /* check for OLED panels */
++ if (amdgpu_dm_connector->bl_idx >= 0) {
++ struct drm_device *drm = amdgpu_dm_connector->base.dev;
++ struct amdgpu_display_manager *dm = &drm_to_adev(drm)->dm;
++ struct amdgpu_dm_backlight_caps *caps;
++
++ caps = &dm->backlight_caps[amdgpu_dm_connector->bl_idx];
++ if (caps->aux_support)
++ return false;
++ }
++
++ return true;
++}
++
+ static void amdgpu_dm_connector_unregister(struct drm_connector *connector)
+ {
+ struct amdgpu_dm_connector *amdgpu_dm_connector = to_amdgpu_dm_connector(connector);
+
+- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
+- amdgpu_dm_abm_level < 0)
++ if (amdgpu_dm_should_create_sysfs(amdgpu_dm_connector))
+ sysfs_remove_group(&connector->kdev->kobj, &amdgpu_group);
+
+ drm_dp_aux_unregister(&amdgpu_dm_connector->dm_dp_aux.aux);
+@@ -6674,8 +6696,7 @@ amdgpu_dm_connector_late_register(struct
+ to_amdgpu_dm_connector(connector);
+ int r;
+
+- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP &&
+- amdgpu_dm_abm_level < 0) {
++ if (amdgpu_dm_should_create_sysfs(amdgpu_dm_connector)) {
+ r = sysfs_create_group(&connector->kdev->kobj,
+ &amdgpu_group);
+ if (r)