kitakar5525 / chromeos-kernel-linux-surface

linux-surface kernel for chromiumos.
GNU General Public License v3.0
18 stars 1 forks source link

chromeos-5.4: backlight not adjustable #23

Closed kitakar5525 closed 3 years ago

kitakar5525 commented 4 years ago

Somehow backlight not adjustable on Surface 3 with both general and minimal config of chromeos-5.4.

Affected:

Works on Arch Linux with 5.4.50-1-lts with its kernel config.

I recommend using chromeos-4.19 kernels for now...

kitakar5525 commented 4 years ago

If I compare dmesg log:

# 5.4.50-general-surface-k5-06734-g912c6036578d
kern  :warn  : [  240.209676] i915 0000:00:02.0: cannot find GPIO chip gpio_crystalcove, deferring
kern  :debug : [  240.209688] i915 0000:00:02.0: No GPIO consumer panel found
kern  :err   : [  240.209851] [drm:vlv_dsi_init [i915]] *ERROR* Failed to own gpio for panel control
kern  :err   : [  240.209967] [drm:pwm_setup_backlight [i915]] *ERROR* Failed to get the PMIC PWM chip
kern  :info  : [  240.240304] [drm] Initialized i915 1.6.0 20200114 for 0000:00:02.0 on minor 1
kern  :info  : [  240.242837] ACPI: Video Device [GFX0] (multi-head: yes  rom: no  post: no)
# Arch's 5.4.50-1-lts
kern  :warn  : [    2.226362] i915 0000:00:02.0: cannot find GPIO chip gpio_crystalcove, deferring
kern  :err   : [    2.226504] [drm:vlv_dsi_init [i915]] *ERROR* Failed to own gpio for panel control
kern  :info  : [    2.238280] [drm] Initialized i915 1.6.0 20190822 for 0000:00:02.0 on minor 0
kern  :info  : [    2.241094] ACPI: Video Device [GFX0] (multi-head: yes  rom: no  post: no)

So, the difference is this line:

[drm:pwm_setup_backlight [i915]] ERROR Failed to get the PMIC PWM chip

kitakar5525 commented 3 years ago

OK, figured it out.

The chromiumos kernel backported upstream commit as 39c7a7c0 48624e7b ("UPSTREAM: drm/i915: DSI: select correct PWM controller to use based on the VBT").

Then, it should be followed by commit 2f093958 ("mfd: intel_soc_pmic: Rename pwm_backlight pwm-lookup to pwm_pmic_backlight"), but actually not backported.

I'll cherry-pick the commit 2f093958 to fix this issue in the next build.

kitakar5525 commented 3 years ago

By the way, I found another issue and its cause.

On Surface 3 (may affect also the other Bay/Cherry Trail devices), recent mainline Linux kernel (not chromeos kernel specific) causes delay between display off and on, with the following dmesg output:

kern  :err   : [   99.106779] i2c_designware 808622C1:05: controller timed out
kern  :err   : [   99.106828] i915 0000:00:02.0: [drm] *ERROR* Failed to xfer payload of size (1) to reg (1)
kern  :err   : [  100.120082] i2c_designware 808622C1:05: controller timed out
kern  :err   : [  100.120133] i915 0000:00:02.0: [drm] *ERROR* Failed to xfer payload of size (1) to reg (22)

This was introduced by commit 8cbf89db ("drm/i915/dsi: Parse the I2C element from the VBT MIPI sequence block (v3)") and chromiumos kernel backported this commit as 69fc6d06.

The backlight control works without the commit anyway. So, mipi_exec_i2c() should not be called on Surface 3 ? Until I find the right way to address the controller timed out issue, I'll revert this commit for faster display off/on transition.

kitakar5525 commented 3 years ago

Backlight issue fixed by commit https://github.com/kitakar5525/linux-kernel/commit/7e2dc21a9512a7e126ba99abb81bf5b73c1ae9ed.

Display off/on delay mitigated by commit https://github.com/kitakar5525/linux-kernel/commit/6072d02801657b83638b5d7223275543666420bf.