| @@ -36,6 +36,7 @@ · 35 unmodified lines |
| 36 | 36 | |
| 37 | 37 | #include "intel_backlight.h" |
| 38 | 38 | #include "intel_display_types.h" |
| 39 | +#include "intel_dp.h" |
| 39 | 40 | #include "intel_dp_aux_backlight.h" |
| 40 | 41 | |
| 41 | 42 | /* TODO: |
| @@ -106,6 +107,8 @@ intel_dp_aux_supports_hdr_backlight(struct intel_connector *connector) · 64 unmodified lines |
| 106 | 107 | int ret; |
| 107 | 108 | u8 tcon_cap[4]; |
| 108 | 109 | |
| 110 | + intel_dp_wait_source_oui(intel_dp); |
| 111 | + |
| 109 | 112 | ret = drm_dp_dpcd_read(aux, INTEL_EDP_HDR_TCON_CAP0, tcon_cap, sizeof(tcon_cap)); |
| 110 | 113 | if (ret != sizeof(tcon_cap)) |
| 111 | 114 | return false; |
| @@ -204,6 +207,8 @@ intel_dp_aux_hdr_enable_backlight(const struct intel_crtc_state *crtc_state, · 92 unmodified lines |
| 204 | 207 | int ret; |
| 205 | 208 | u8 old_ctrl, ctrl; |
| 206 | 209 | |
| 210 | + intel_dp_wait_source_oui(intel_dp); |
| 211 | + |
| 207 | 212 | ret = drm_dp_dpcd_readb(&intel_dp->aux, INTEL_EDP_HDR_GETSET_CTRL_PARAMS, &old_ctrl); |
| 208 | 213 | if (ret != 1) { |
| 209 | 214 | drm_err(&i915->drm, "Failed to read current backlight control mode: %d\n", ret); |
| @@ -293,6 +298,13 @@ intel_dp_aux_vesa_enable_backlight(const struct intel_crtc_state *crtc_state, · 83 unmodified lines |
| 293 | 298 | struct intel_panel *panel = &connector->panel; |
| 294 | 299 | struct intel_dp *intel_dp = enc_to_intel_dp(connector->encoder); |
| 295 | 300 | |
| 301 | + if (!panel->backlight.edp.vesa.info.aux_enable) { |
| 302 | + u32 pwm_level = intel_backlight_invert_pwm_level(connector, |
| 303 | + panel->backlight.pwm_level_max); |
| 304 | + |
| 305 | + panel->backlight.pwm_funcs->enable(crtc_state, conn_state, pwm_level); |
| 306 | + } |
| 307 | + |
| 296 | 308 | drm_edp_backlight_enable(&intel_dp->aux, &panel->backlight.edp.vesa.info, level); |
| 297 | 309 | } |
| 298 | 310 | |
| @@ -304,6 +316,10 @@ static void intel_dp_aux_vesa_disable_backlight(const struct drm_connector_state · 5 unmodified lines |
| 304 | 316 | struct intel_dp *intel_dp = enc_to_intel_dp(connector->encoder); |
| 305 | 317 | |
| 306 | 318 | drm_edp_backlight_disable(&intel_dp->aux, &panel->backlight.edp.vesa.info); |
| 319 | + |
| 320 | + if (!panel->backlight.edp.vesa.info.aux_enable) |
| 321 | + panel->backlight.pwm_funcs->disable(old_conn_state, |
| 322 | + intel_backlight_invert_pwm_level(connector, 0)); |
| 307 | 323 | } |
| 308 | 324 | |
| 309 | 325 | static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector, enum pipe pipe) |
| @@ -321,6 +337,15 @@ static int intel_dp_aux_vesa_setup_backlight(struct intel_connector *connector, · 11 unmodified lines |
| 321 | 337 | if (ret < 0) |
| 322 | 338 | return ret; |
| 323 | 339 | |
| 340 | + if (!panel->backlight.edp.vesa.info.aux_enable) { |
| 341 | + ret = panel->backlight.pwm_funcs->setup(connector, pipe); |
| 342 | + if (ret < 0) { |
| 343 | + drm_err(&i915->drm, |
| 344 | + "Failed to setup PWM backlight controls for eDP backlight: %d\n", |
| 345 | + ret); |
| 346 | + return ret; |
| 347 | + } |
| 348 | + } |
| 324 | 349 | panel->backlight.max = panel->backlight.edp.vesa.info.max; |
| 325 | 350 | panel->backlight.min = 0; |
| 326 | 351 | if (current_mode == DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD) { |
| @@ -340,12 +365,7 @@ intel_dp_aux_supports_vesa_backlight(struct intel_connector *connector) · 13 unmodified lines |
| 340 | 365 | struct intel_dp *intel_dp = intel_attached_dp(connector); |
| 341 | 366 | struct drm_i915_private *i915 = dp_to_i915(intel_dp); |
| 342 | 367 | |
| 343 | | − /* TODO: We currently only support AUX only backlight configurations, not backlights which |
| 344 | | − * require a mix of PWM and AUX controls to work. In the mean time, these machines typically |
| 345 | | − * work just fine using normal PWM controls anyway. |
| 346 | | − */ |
| 347 | | − if ((intel_dp->edp_dpcd[1] & DP_EDP_BACKLIGHT_AUX_ENABLE_CAP) && |
| 348 | | − drm_edp_backlight_supported(intel_dp->edp_dpcd)) { |
| 368 | + if (drm_edp_backlight_supported(intel_dp->edp_dpcd)) { |
| 349 | 369 | drm_dbg_kms(&i915->drm, "AUX Backlight Control Supported!\n"); |
| 350 | 370 | return true; |
| 351 | 371 | } |