Backlight not working on Samsung Galaxy Book 2 Pro
I have a Samsung Galaxy Book 2 Pro Intel Evo (NP950XED-KA2US, based on 12th gen Intel Core i5-1240P). I can't get backlight adjustment to work in Linux - it is always stuck at maximum. I tried to change the enable_dpcd_backlight parameter of i915 (tried -1, 0, 1, and 2), and tried kernels 5.15.0-25, 5.15.0-41, 5.18.12, and 5.19.0rc7, with no luck. (I also tried kernel 5.10.120, but, with that one, there were no backlight controls and /sys/class/backlight was empty.)
In all cases, software seems to think that backlight is working correctly, so, if I try to change it either through the Ubuntu brightness widget or with brightness hotkeys (Fn+F2, Fn+F3), and then inspect /sys/class/backlight/intel_backlight/actual_brightness, it will show the intended value (e.g. 960 if I try to set it to minimum, or 96000 if I try to set it to maximum), it just does not have any effect on the actual screen.
Typical dmesg output during an adjustment attempt (with drm.debug=0x116):
Jul 18 23:46:31 eugene-950XED kernel: [drm:intel_backlight_device_update_status [i915]] updating intel_backlight, brightness=16875/65535
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_backlight_device_update_status [i915]] set backlight level = 16875
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_power_well_enable [i915]] enabling DC_off
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:gen9_set_dc_state.part.0 [i915]] Setting DC state from 02 to 00
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:icl_verify_procmon_ref_values [i915]] Combo PHY A Voltage/Process Info : 0.85V dot0 (low-voltage)
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:icl_combo_phys_init [i915]] Combo PHY A already enabled, won't reprogram it.
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:icl_verify_procmon_ref_values [i915]] Combo PHY B Voltage/Process Info : 0.85V dot0 (low-voltage)
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:icl_combo_phys_init [i915]] Combo PHY B already enabled, won't reprogram it.
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_pps_vdd_on_unlocked [i915]] Turning [ENCODER:235:DDI A/PHY A] VDD on
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_pps_vdd_on_unlocked [i915]] PP_STATUS: 0x80000008 PP_CONTROL: 0x0000006f
Jul 18 23:46:31 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_write [drm_display_helper]] AUX A/DDI A/PHY A: 0x00722 AUX <- (ret= 2) 41 eb
At boot time, I see this
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:parse_lfp_backlight [i915]] VBT backlight PWM modulation frequency 200 Hz, active high, min brightness 6, level 255, controller 0
...
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_dp_init_connector [i915]] Adding eDP connector on [ENCODER:235:DDI A/PHY A]
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:pps_init_delays [i915]] cur t1_t3 1 t8 1 t9 1 t10 2000 t11_t12 6000
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:pps_init_delays [i915]] vbt t1_t3 2000 t8 10 t9 2000 t10 2000 t11_t12 6000
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:pps_init_delays [i915]] panel power up delay 200, power down delay 200, power cycle delay 600
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:pps_init_delays [i915]] backlight on delay 1, off delay 200
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:pps_init_registers [i915]] panel power sequencer register settings: PP_ON 0x7d00001, PP_OFF 0x7d00001, PP_DIV 0x60
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_power_well_enable [i915]] enabling AUX_A
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_pps_vdd_on_unlocked [i915]] Turning [ENCODER:235:DDI A/PHY A] VDD on
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_pps_vdd_on_unlocked [i915]] PP_STATUS: 0x80000008 PP_CONTROL: 0x0000006f
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_probe [drm_display_helper]] AUX A/DDI A/PHY A: 0x00000 AUX -> (ret= 1) 14
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_read [drm_display_helper]] AUX A/DDI A/PHY A: 0x00000 AUX -> (ret= 15) 14 0a c2 c1 00 00 01 c0 02 00 00 00 3f 09 80
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_probe [drm_display_helper]] AUX A/DDI A/PHY A: 0x00000 AUX -> (ret= 1) 14
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_read [drm_display_helper]] AUX A/DDI A/PHY A: 0x02200 AUX -> (ret= 15) 14 0a c2 c1 00 00 01 c0 02 00 00 00 3f 09 80
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_read_dpcd_caps [drm_display_helper]] AUX A/DDI A/PHY A: DPCD: 14 0a c2 c1 00 00 01 c0 02 00 00 00 3f 09 80
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_probe [drm_display_helper]] AUX A/DDI A/PHY A: 0x00000 AUX -> (ret= 1) 14
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_read [drm_display_helper]] AUX A/DDI A/PHY A: 0x00400 AUX -> (ret= 12) 00 60 ad 00 00 00 00 00 00 01 00 04
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_read_desc [drm_display_helper]] AUX A/DDI A/PHY A: DP sink: OUI 00-60-ad dev-ID HW-rev 0.1 SW-rev 0.4 quirks 0x0000
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_probe [drm_display_helper]] AUX A/DDI A/PHY A: 0x00000 AUX -> (ret= 1) 14
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_read [drm_display_helper]] AUX A/DDI A/PHY A: 0x00700 AUX -> (ret= 3) 05 fd ff
...
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_panel_init [i915]] [CONNECTOR:236:eDP-1] DRRS type: none
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:get_vbt_pwm_freq [i915]] VBT defined backlight frequency 200 Hz
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_backlight_setup [i915]] Connector eDP-1 backlight initialized, disabled, brightness 0/96000
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_bios_port_aux_ch [i915]] using AUX B for port B (VBT)
...
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_dump_plane_state [i915]] [PLANE:40:plane 2A] fb: [NOFB], visible: no
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_dump_plane_state [i915]] [PLANE:49:plane 3A] fb: [NOFB], visible: no
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_dump_plane_state [i915]] [PLANE:58:plane 4A] fb: [NOFB], visible: no
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_dump_plane_state [i915]] [PLANE:67:plane 5A] fb: [NOFB], visible: no
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_dump_plane_state [i915]] [PLANE:76:cursor A] fb: [NOFB], visible: no
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_atomic_commit [drm]] committing 00000000d5fde860
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_edp_backlight_off [i915]]
...
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:cnp_disable_backlight [i915]] set backlight PWM = 0
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_disable_transcoder [i915]] disabling pipe A
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:drm_dp_dpcd_write [drm_display_helper]] AUX A/DDI A/PHY A: 0x00600 AUX <- (ret= 1) 02
Jul 18 23:52:49 eugene-950XED kernel: i915 0000:00:02.0: [drm:intel_pps_off_unlocked [i915]] Turn [ENCODER:235:DDI A/PHY A] panel power off
...
The only other possibly relevant things I see in dmesg are several ACPI related errors, e.g.
[ 20.524682] ACPI BIOS Error (bug): Could not resolve symbol [_TZ.ETMD], AE_NOT_FOUND (20220331/psargs-330)