Commit 97d798b2 authored by Alex Deucher's avatar Alex Deucher
Browse files

drm/amdgpu: simplify ATIF backlight handling



Just register the a pointer to the backlight device and use
that. Unifies the DC and non-DC handling.

Acked-by: default avatarEvan Quan <evan.quan@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ba806f98
Loading
Loading
Loading
Loading
+30 −43
Original line number Diff line number Diff line
@@ -64,7 +64,9 @@ struct amdgpu_atif {
	struct amdgpu_atif_notifications notifications;
	struct amdgpu_atif_functions functions;
	struct amdgpu_atif_notification_cfg notification_cfg;
	struct amdgpu_encoder *encoder_for_bl;
#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
	struct backlight_device *bd;
#endif
	struct amdgpu_dm_backlight_caps backlight_caps;
};

@@ -444,45 +446,21 @@ static int amdgpu_atif_handler(struct amdgpu_device *adev,

		DRM_DEBUG_DRIVER("ATIF: %d pending SBIOS requests\n", count);

		if ((req.pending & ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST) &&
		    !amdgpu_device_has_dc_support(adev)) {
			struct amdgpu_encoder *enc = atif->encoder_for_bl;

			if (enc) {
				struct amdgpu_encoder_atom_dig *dig = enc->enc_priv;

				DRM_DEBUG_DRIVER("Changing brightness to %d\n",
						 req.backlight_level);

				amdgpu_display_backlight_set_level(adev, enc, req.backlight_level);

#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
				backlight_force_update(dig->bl_dev,
						       BACKLIGHT_UPDATE_HOTKEY);
#endif
			}
		}
#if defined(CONFIG_DRM_AMD_DC)
		if (req.pending & ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST) {
#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
		if ((req.pending & ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST) &&
		    amdgpu_device_has_dc_support(adev)) {
			struct amdgpu_display_manager *dm = &adev->dm;
			struct backlight_device *bd = dm->backlight_dev;

			if (bd) {
			if (atif->bd) {
				DRM_DEBUG_DRIVER("Changing brightness to %d\n",
						 req.backlight_level);

				/*
				 * XXX backlight_device_set_brightness() is
				 * hardwired to post BACKLIGHT_UPDATE_SYSFS.
				 * It probably should accept 'reason' parameter.
				 */
				backlight_device_set_brightness(bd, req.backlight_level);
			}
				backlight_device_set_brightness(atif->bd, req.backlight_level);
			}
#endif
#endif
		}

		if (req.pending & ATIF_DGPU_DISPLAY_EVENT) {
			if (adev->flags & AMD_IS_PX) {
				pm_runtime_get_sync(adev->ddev->dev);
@@ -829,6 +807,13 @@ int amdgpu_acpi_init(struct amdgpu_device *adev)
	adev->atif = atif;

	if (atif->notifications.brightness_change) {
#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
		if (amdgpu_device_has_dc_support(adev)) {
#if defined(CONFIG_DRM_AMD_DC)
			struct amdgpu_display_manager *dm = &adev->dm;
			atif->bd = dm->backlight_dev;
#endif
		} else {
			struct drm_encoder *tmp;

			/* Find the encoder controlling the brightness */
@@ -840,12 +825,14 @@ int amdgpu_acpi_init(struct amdgpu_device *adev)
				    enc->enc_priv) {
					struct amdgpu_encoder_atom_dig *dig = enc->enc_priv;
					if (dig->bl_dev) {
					atif->encoder_for_bl = enc;
						atif->bd = dig->bl_dev;
						break;
					}
				}
			}
		}
	}
#endif

	if (atif->functions.sbios_requests && !atif->functions.system_params) {
		/* XXX check this workraround, if sbios request function is