Add common helpers for MIPI DBI drivers to attach the connector LUMINANCE property and forward updates to their backlight backend when CONFIG_DRM_LUMINANCE is enabled.
Signed-off-by: Mario Limonciello <[email protected]> --- drivers/gpu/drm/drm_mipi_dbi.c | 36 ++++++++++++++++++++++++++++++++++ include/drm/drm_mipi_dbi.h | 7 ++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_mipi_dbi.c b/drivers/gpu/drm/drm_mipi_dbi.c index 25cf04d029f77..85e3b98a7ccb0 100644 --- a/drivers/gpu/drm/drm_mipi_dbi.c +++ b/drivers/gpu/drm/drm_mipi_dbi.c @@ -496,6 +496,42 @@ int drm_mipi_dbi_connector_helper_get_modes(struct drm_connector *connector) } EXPORT_SYMBOL(drm_mipi_dbi_connector_helper_get_modes); +int drm_mipi_dbi_connector_attach_luminance_property(struct drm_connector *connector) +{ + struct mipi_dbi_dev *dbidev = drm_to_mipi_dbi_dev(connector->dev); + struct backlight_device *backlight = dbidev->backlight; + + if (!IS_ENABLED(CONFIG_DRM_LUMINANCE) || !backlight) + return 0; + + return drm_connector_attach_luminance_property(connector, 0, + backlight->props.max_brightness, + backlight->props.brightness); +} +EXPORT_SYMBOL(drm_mipi_dbi_connector_attach_luminance_property); + +void drm_mipi_dbi_connector_set_luminance(const struct drm_connector_state *conn_state) +{ + struct mipi_dbi_dev *dbidev = + drm_to_mipi_dbi_dev(conn_state->connector->dev); + + if (!dbidev->backlight) + return; + + dbidev->backlight->props.brightness = conn_state->luminance; + backlight_update_status(dbidev->backlight); +} +EXPORT_SYMBOL(drm_mipi_dbi_connector_set_luminance); + +void drm_mipi_dbi_connector_disable_luminance(const struct drm_connector_state *conn_state) +{ + struct mipi_dbi_dev *dbidev = + drm_to_mipi_dbi_dev(conn_state->connector->dev); + + backlight_disable(dbidev->backlight); +} +EXPORT_SYMBOL(drm_mipi_dbi_connector_disable_luminance); + static int mipi_dbi_rotate_mode(struct drm_display_mode *mode, unsigned int rotation) { diff --git a/include/drm/drm_mipi_dbi.h b/include/drm/drm_mipi_dbi.h index d93e25fdc2e1e..8462c6bd6ca9e 100644 --- a/include/drm/drm_mipi_dbi.h +++ b/include/drm/drm_mipi_dbi.h @@ -263,9 +263,14 @@ void drm_mipi_dbi_crtc_helper_atomic_disable(struct drm_crtc *crtc, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state int drm_mipi_dbi_connector_helper_get_modes(struct drm_connector *connector); +int drm_mipi_dbi_connector_attach_luminance_property(struct drm_connector *connector); +void drm_mipi_dbi_connector_set_luminance(const struct drm_connector_state *conn_state); +void drm_mipi_dbi_connector_disable_luminance(const struct drm_connector_state *conn_state); #define DRM_MIPI_DBI_CONNECTOR_HELPER_FUNCS \ - .get_modes = drm_mipi_dbi_connector_helper_get_modes + .get_modes = drm_mipi_dbi_connector_helper_get_modes, \ + .set_luminance = drm_mipi_dbi_connector_set_luminance, \ + .disable_luminance = drm_mipi_dbi_connector_disable_luminance /* * Mode config -- 2.43.0
