[PATCH] drm/amdgpu: simplify ATIF backlight handling
Alex Deucher
alexdeucher at gmail.com
Thu May 7 16:09:23 UTC 2020
Ping?
On Tue, May 5, 2020 at 3:48 PM Alex Deucher <alexdeucher at gmail.com> wrote:
>
> Just register the a pointer to the backlight device and use
> that. Unifies the DC and non-DC handling.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 73 ++++++++++--------------
> 1 file changed, 30 insertions(+), 43 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> index 956cbbda4793..913c8f0513bd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c
> @@ -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,23 +807,32 @@ int amdgpu_acpi_init(struct amdgpu_device *adev)
> adev->atif = atif;
>
> if (atif->notifications.brightness_change) {
> - struct drm_encoder *tmp;
> -
> - /* Find the encoder controlling the brightness */
> - list_for_each_entry(tmp, &adev->ddev->mode_config.encoder_list,
> - head) {
> - struct amdgpu_encoder *enc = to_amdgpu_encoder(tmp);
> -
> - if ((enc->devices & (ATOM_DEVICE_LCD_SUPPORT)) &&
> - enc->enc_priv) {
> - struct amdgpu_encoder_atom_dig *dig = enc->enc_priv;
> - if (dig->bl_dev) {
> - atif->encoder_for_bl = enc;
> - break;
> +#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 */
> + list_for_each_entry(tmp, &adev->ddev->mode_config.encoder_list,
> + head) {
> + struct amdgpu_encoder *enc = to_amdgpu_encoder(tmp);
> +
> + if ((enc->devices & (ATOM_DEVICE_LCD_SUPPORT)) &&
> + enc->enc_priv) {
> + struct amdgpu_encoder_atom_dig *dig = enc->enc_priv;
> + if (dig->bl_dev) {
> + 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
> --
> 2.25.4
>
More information about the amd-gfx
mailing list