Bug 205699

Summary: Backlight adjustment does nothing on Intel with Samsung OLED panel
Product: Drivers Reporter: Kyle Altendorf (sda)
Component: Video(Other)Assignee: drivers_video-other
Status: RESOLVED MOVED    
Severity: normal    
Priority: P1    
Hardware: Intel   
OS: Linux   
Kernel Version: 5.3.0, 5.4.0, etc Subsystem:
Regression: No Bisected commit-id:
Attachments: fix_max_backlight_calculations
customize_dpcd_brightness_control_for_specific_panel
fix_max_backlight_calculations

Description Kyle Altendorf 2019-11-29 02:13:49 UTC
Created attachment 286111 [details]
fix_max_backlight_calculations

When running Ubuntu with linux-image-5.3.0-23-generic, mainline 5.3.13, or latest 5.4+ my Lenovo ThinkPad P1 Gen 2 is unable to change the backlight brightness.  The buttons trigger the on-screen display and move the bar but the actual display brightness does not change.  With the kernel option i915.enable_dpcd_backlight=1 it does make the backlight change but erratically.  For example moving through the range you get stuff like off, medium bright, dim, bright, medium, off.  This does work in Ubuntu linux-image-4.15.0-1059-oem.  It seems the following commits in particular make the difference.

UBUNTU: SAUCE: i915: intel_dp_aux_backlight: Fix max backlight calculations
https://git.launchpad.net/~canonical-kernel/ubuntu/+source/linux-oem/+git/eoan/commit/?h=oem&id=ff39163c455f31005e2709a2006a7605b3d8a05f

UBUNTU: SAUCE: drm/i915: customize DPCD brightness control for specific panel
https://git.launchpad.net/~canonical-kernel/ubuntu/+source/linux-oem/+git/eoan/commit/?h=oem&id=cf7286b44a6e27967f5ed134c4492dd17bde118a

I ported the above commits to the latest linux mainline kernel and am running that.  This was in part because >= 5.3.12 fixes another issue with this hardware where the screen remains black after a resume (https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1854177).

https://github.com/altendky/linux/commit/395eb4b85f6a0f85061c0598247727de0d9316f6
https://github.com/altendky/linux/commit/c2dc38e6aadf3d979bea83e382a1b119574df7af

Built with:

git clean -fdx && cp /boot/config-5.3.0-23-generic .config && yes '' | make oldconfig && make clean && make -j `getconf _NPROCESSORS_ONLN` deb-pkg LOCALVERSION=-altendky-backlight

Note that the use of DEVICE_ID_ANY is likely bad and the correct ID for this panel should be identified.  I wanted to first confirm it worked before bothering to figure out which ID was needed there and how to get it.
Comment 1 Kyle Altendorf 2019-11-29 02:14:31 UTC
Created attachment 286113 [details]
customize_dpcd_brightness_control_for_specific_panel
Comment 2 Kyle Altendorf 2019-11-29 02:16:14 UTC
Created attachment 286115 [details]
fix_max_backlight_calculations
Comment 3 Kyle Altendorf 2019-11-29 02:18:27 UTC
I should note that I have naively ported these patches.  While I have done embedded C for years and some hardware design...  I am not familiar with Linux kernel development nor any details of controlling this hardware.
Comment 4 Kyle Altendorf 2019-11-29 02:28:22 UTC
:[  Also, this laptop has the Samsung OLED panel.