[Why] If backlight registration fails then it's ignored. This could hide a fatal problem to a user.
[How] Pass error codes up from backlight registration failures. Signed-off-by: Mario Limonciello (AMD) <[email protected]> --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index de9b29ad6cab..430b7d3d8930 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -5478,7 +5478,7 @@ static const struct backlight_ops amdgpu_dm_backlight_ops = { .update_status = amdgpu_dm_backlight_update_status, }; -static void +static int amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) { struct drm_device *drm = aconnector->base.dev; @@ -5489,15 +5489,16 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) int min, max; int real_brightness; int init_brightness; + int r; if (aconnector->bl_idx == -1) - return; + return 0; if (!acpi_video_backlight_use_native()) { drm_info(drm, "Skipping amdgpu DM backlight registration\n"); /* Try registering an ACPI video backlight device instead. */ acpi_video_register_backlight(); - return; + return 0; } caps = &dm->backlight_caps[aconnector->bl_idx]; @@ -5531,22 +5532,26 @@ amdgpu_dm_register_backlight_device(struct amdgpu_dm_connector *aconnector) dm->brightness[aconnector->bl_idx] = props.brightness; if (IS_ERR(dm->backlight_dev[aconnector->bl_idx])) { - drm_err(drm, "DM: Backlight registration failed!\n"); + r = PTR_ERR(dm->backlight_dev[aconnector->bl_idx]); + drm_err(drm, "DM: Backlight registration failed: %d\n", r); dm->backlight_dev[aconnector->bl_idx] = NULL; - } else { - /* - * dm->brightness[x] can be inconsistent just after startup until - * ops.get_brightness is called. - */ - real_brightness = - amdgpu_dm_backlight_ops.get_brightness(dm->backlight_dev[aconnector->bl_idx]); + return r; + } - if (real_brightness != init_brightness) { - dm->actual_brightness[aconnector->bl_idx] = real_brightness; - dm->brightness[aconnector->bl_idx] = real_brightness; - } - drm_dbg_driver(drm, "DM: Registered Backlight device: %s\n", bl_name); + /* + * dm->brightness[x] can be inconsistent just after startup until + * ops.get_brightness is called. + */ + real_brightness = + amdgpu_dm_backlight_ops.get_brightness(dm->backlight_dev[aconnector->bl_idx]); + + if (real_brightness != init_brightness) { + dm->actual_brightness[aconnector->bl_idx] = real_brightness; + dm->brightness[aconnector->bl_idx] = real_brightness; } + drm_dbg_driver(drm, "DM: Registered Backlight device: %s\n", bl_name); + + return 0; } static int initialize_plane(struct amdgpu_display_manager *dm, @@ -8078,7 +8083,9 @@ amdgpu_dm_connector_late_register(struct drm_connector *connector) return r; } - amdgpu_dm_register_backlight_device(amdgpu_dm_connector); + r = amdgpu_dm_register_backlight_device(amdgpu_dm_connector); + if (r) + return r; if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) || (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) { -- 2.54.0
