Convert the Intel display drivers (i915 and xe) to the DRM backlight infrastructure so brightness can be controlled through the connector LUMINANCE property. Link the backlight device to the eDP connector on registration and unlink it on unregistration; the DRM core owns the embedded backlight state and its property.
Signed-off-by: Mario Limonciello <[email protected]> --- drivers/gpu/drm/i915/display/intel_backlight.c | 4 ++++ drivers/gpu/drm/i915/display/intel_display.c | 7 ++++++- drivers/gpu/drm/i915/display/intel_dp.c | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/display/intel_backlight.c b/drivers/gpu/drm/i915/display/intel_backlight.c index b128896cb1c2d..b0cd4dc3adc00 100644 --- a/drivers/gpu/drm/i915/display/intel_backlight.c +++ b/drivers/gpu/drm/i915/display/intel_backlight.c @@ -9,6 +9,7 @@ #include <linux/string_helpers.h> #include <acpi/video.h> +#include <drm/drm_backlight.h> #include <drm/drm_file.h> #include <drm/drm_print.h> #include <drm/intel/pci_config.h> @@ -1004,6 +1005,8 @@ int intel_backlight_device_register(struct intel_connector *connector) "[CONNECTOR:%d:%s] backlight device %s registered\n", connector->base.base.id, connector->base.name, name); + drm_backlight_link(&connector->base, bd); + out: kfree(name); @@ -1015,6 +1018,7 @@ void intel_backlight_device_unregister(struct intel_connector *connector) struct intel_panel *panel = &connector->panel; if (panel->backlight.device) { + drm_backlight_link(&connector->base, NULL); backlight_device_unregister(panel->backlight.device); panel->backlight.device = NULL; } diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 9dfd095f325f7..d53e5f4bdf57d 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -7496,10 +7496,12 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state) struct intel_display *display = to_intel_display(state); struct intel_uncore *uncore = to_intel_uncore(display->drm); struct intel_crtc_state *new_crtc_state, *old_crtc_state; + struct drm_connector_state *new_conn_state; + struct drm_connector *connector; struct intel_crtc *crtc; struct intel_power_domain_mask put_domains[I915_MAX_PIPES] = {}; struct ref_tracker *wakeref = NULL; - int power_async_delay; + int power_async_delay, i; for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state) intel_atomic_dsb_prepare(state, crtc); @@ -7608,6 +7610,9 @@ static void intel_atomic_commit_tail(struct intel_atomic_state *state) /* Now enable the clocks, plane, pipe, and connectors that we set up. */ display->modeset.funcs->commit_modeset_enables(state); + for_each_new_connector_in_state(&state->base, connector, new_conn_state, i) + drm_atomic_helper_connector_apply_luminance(new_conn_state); + intel_display_power_dc3co_compute(state); /* FIXME probably need to sequence this properly */ diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c index 113d767e62e9c..2381a80a4e671 100644 --- a/drivers/gpu/drm/i915/display/intel_dp.c +++ b/drivers/gpu/drm/i915/display/intel_dp.c @@ -43,6 +43,7 @@ #include <drm/display/drm_dsc_helper.h> #include <drm/display/drm_hdmi_helper.h> #include <drm/drm_atomic_helper.h> +#include <drm/drm_backlight.h> #include <drm/drm_crtc.h> #include <drm/drm_edid.h> #include <drm/drm_fixed.h> -- 2.43.0
