You are not logged in.

#1 2025-07-18 10:57:15

cdwijs
Member
Registered: 2010-04-24
Posts: 310

pipo mini PC intel i915 backlight always on, or always off, no control

I can't control the backlight of my pipo mini PC. Depending of the kernel options it's either always on, or always off.

In this situation it's always on:

# uname -a
Linux revomax 6.15.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Sun, 06 Jul 2025 11:14:36 +0000 x86_64 GNU/Linux
# ls /sys/class/backlight/
(no output)
# dmesg | grep drm
[    1.013355] ACPI: bus type drm_connector registered
[    1.032886] simple-framebuffer simple-framebuffer.0: [drm] Registered 1 planes with drm panic
[    1.032908] [drm] Initialized simpledrm 1.0.0 for simple-framebuffer.0 on minor 0
[    1.040412] simple-framebuffer simple-framebuffer.0: [drm] fb0: simpledrmdrmfb frame buffer device
[    7.996771] systemd[1]: Starting Load Kernel Module drm...
[    8.107916] systemd[1]: modprobe@drm.service: Deactivated successfully.
[    8.108612] systemd[1]: Finished Load Kernel Module drm.
# cat /etc/mkinitcpio.conf
MODULES=(i915 pwm-lpss-platform)
BINARIES=()
FILES=()
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck)
# lsmod | grep i915
(no output)
# cat /boot/grub/grub.cfg
linux	/vmlinuz-linux root=UUID=5cf4026d-f300-4fee-91fe-a62a4a637382 rw nomodeset i2c_touchscreen_props=MSSL1680:touchscreen-min-x=2:touchscreen-min-y=15:touchscreen-size-x=1467:touchscreen-size-y=880:touchscreen-swapped-x-y:touchscreen-inverted-x loglevel=3 quiet
# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-linux root=UUID=5cf4026d-f300-4fee-91fe-a62a4a637382 rw nomodeset i2c_touchscreen_props=MSSL1680:touchscreen-min-x=2:touchscreen-min-y=15:touchscreen-size-x=1467:touchscreen-size-y=880:touchscreen-swapped-x-y:touchscreen-inverted-x loglevel=3 quiet

New situation, this time without nomodeset:

# nano /etc/default/grub
# grub-mkconfig -o /boot/grub/grub.cfg
# mkinitcpio -p linux
# reboot

Now the mini PC reboots, the backlight turns off just after the message "loading initial ramdisk". I can login via ssh.

Now I see actual_brightness under /proc, but that doesn't react to writes to brightness, and the screen stays black:

# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-linux root=UUID=5cf4026d-f300-4fee-91fe-a62a4a637382 rw i2c_touchscreen_props=MSSL1680:touchscreen-min-x=2:touchscreen-min-y=15:touchscreen-size-x=1467:touchscreen-size-y=880:touchscreen-swapped-x-y:touchscreen-inverted-x loglevel=3 quiet
# ls /sys/class/backlight/
intel_backlight
cat /sys/class/backlight/intel_backlight/actual_brightness 
0
# echo 1 > /sys/class/backlight/intel_backlight/brightness 
[root@revomax cedric]# cat /sys/class/backlight/intel_backlight/actual_brightness 
0
# echo 100 > /sys/class/backlight/intel_backlight/brightness 
[root@revomax cedric]# cat /sys/class/backlight/intel_backlight/actual_brightness 
0
# dmesg | grep drm
[    1.013426] ACPI: bus type drm_connector registered
[    1.033211] simple-framebuffer simple-framebuffer.0: [drm] Registered 1 planes with drm panic
[    1.033224] [drm] Initialized simpledrm 1.0.0 for simple-framebuffer.0 on minor 0
[    1.038263] simple-framebuffer simple-framebuffer.0: [drm] fb0: simpledrmdrmfb frame buffer device
[    3.583522] i915 0000:00:02.0: [drm] Found cherryview (device ID 22b0) integrated display version 8.00 stepping N/A
[    3.705235] [drm] Initialized i915 1.6.0 for 0000:00:02.0 on minor 1
[    3.713604] i915 0000:00:02.0: [drm] HDaudio controller not detected, using LPE audio instead
[    4.093034] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[    5.273310] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[    5.671484] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[    7.833718] systemd[1]: Starting Load Kernel Module drm...
[    7.930036] systemd[1]: modprobe@drm.service: Deactivated successfully.
[    7.930872] systemd[1]: Finished Load Kernel Module drm.
#  lsmod | grep i915
i915                 4763648  3
i2c_algo_bit           24576  1 i915
drm_buddy              24576  1 i915
video                  81920  2 int3406_thermal,i915
ttm                   118784  1 i915
intel_gtt              28672  1 i915
drm_display_helper    274432  1 i915
cec                    90112  2 drm_display_helper,i915
# lsinitcpio /boot/initramfs-linux.img | grep i915
usr/lib/firmware/i915/
usr/lib/firmware/i915/adlp_dmc.bin.zst
usr/lib/firmware/i915/adlp_dmc_ver2_16.bin.zst
usr/lib/firmware/i915/adlp_guc_69.0.3.bin.zst
<snip>
usr/lib/firmware/i915/
usr/lib/firmware/i915/tgl_huc_7.9.3.bin.zst
# for f in /sys/class/drm/*/status; do echo "$f: $(cat $f)"; done
/sys/class/drm/card1-DP-1/status: disconnected
/sys/class/drm/card1-DP-2/status: disconnected
/sys/class/drm/card1-DP-3/status: disconnected
/sys/class/drm/card1-DSI-1/status: connected
/sys/class/drm/card1-HDMI-A-1/status: disconnected
/sys/class/drm/card1-HDMI-A-2/status: disconnected
/sys/class/drm/card1-HDMI-A-3/status: disconnected

New situation, inspired by https://bbs.archlinux.org/viewtopic.php?id=305056
Remove i915 from /etc/mkinitcpio.conf, add nvidia_drm.modeset=1 video=DSI-1:1280x800@60e to the kernel cmdline.

# nano /etc/mkinitcpio.conf
# cat /etc/mkinitcpio.conf
MODULES=(pwm-lpss-platform)
BINARIES=()
FILES=()
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck)
# mkinitcpio -p linux

# nano /etc/default/grub
# grub-mkconfig -o /boot/grub/grub.cfg
# reboot 

Now the mini PC reboots, the backlight turns off just after the message "loading initial ramdisk". I can login via ssh.

# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-linux root=UUID=5cf4026d-f300-4fee-91fe-a62a4a637382 rw nvidia_drm.modeset=1 video=DSI-1:1280x800@60e i2c_touchscreen_props=MSSL1680:touchscreen-min-x=2:touchscreen-min-y=15:touchscreen-size-x=1467:touchscreen-size-y=880:touchscreen-swapped-x-y:touchscreen-inverted-x loglevel=3 quiet
# ls /sys/class/backlight/
intel_backlight
# cat /sys/class/backlight/intel_backlight/actual_brightness 
0
[root@revomax cedric]# echo 1 > /sys/class/backlight/intel_backlight/brightness 
[root@revomax cedric]# cat /sys/class/backlight/intel_backlight/actual_brightness 
0
[root@revomax cedric]# echo 100 > /sys/class/backlight/intel_backlight/brightness 
[root@revomax cedric]# cat /sys/class/backlight/intel_backlight/actual_brightness 
0
# dmesg | grep drm
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-linux root=UUID=5cf4026d-f300-4fee-91fe-a62a4a637382 rw nvidia_drm.modeset=1 video=DSI-1:1280x800@60e i2c_touchscreen_props=MSSL1680:touchscreen-min-x=2:touchscreen-min-y=15:touchscreen-size-x=1467:touchscreen-size-y=880:touchscreen-swapped-x-y:touchscreen-inverted-x loglevel=3 quiet
[    0.000000] The simpledrm driver will not be probed
[    0.059071] Kernel command line: BOOT_IMAGE=/vmlinuz-linux root=UUID=5cf4026d-f300-4fee-91fe-a62a4a637382 rw nvidia_drm.modeset=1 video=DSI-1:1280x800@60e i2c_touchscreen_props=MSSL1680:touchscreen-min-x=2:touchscreen-min-y=15:touchscreen-size-x=1467:touchscreen-size-y=880:touchscreen-swapped-x-y:touchscreen-inverted-x loglevel=3 quiet
[    1.025365] ACPI: bus type drm_connector registered
[    3.983007] i915 0000:00:02.0: [drm] Found cherryview (device ID 22b0) integrated display version 8.00 stepping N/A
[    3.990778] [drm] forcing DSI-1 connector on
[    4.032406] [drm] Initialized i915 1.6.0 for 0000:00:02.0 on minor 0
[    4.036897] i915 0000:00:02.0: [drm] HDaudio controller not detected, using LPE audio instead
[    4.444141] i915 0000:00:02.0: [drm] User-defined mode not supported: "1280x800": 60 83496 1280 1344 1480 1680 800 801 804 828 0x20 0x6
[    4.793778] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[    5.181084] i915 0000:00:02.0: [drm] User-defined mode not supported: "1280x800": 60 83496 1280 1344 1480 1680 800 801 804 828 0x20 0x6
[    5.585322] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[    5.585472] i915 0000:00:02.0: [drm] User-defined mode not supported: "1280x800": 60 83496 1280 1344 1480 1680 800 801 804 828 0x20 0x6
[    5.996475] i915 0000:00:02.0: [drm] Cannot find any crtc or sizes
[    7.084207] systemd[1]: Starting Load Kernel Module drm...
[    7.192808] systemd[1]: modprobe@drm.service: Deactivated successfully.
[    7.193706] systemd[1]: Finished Load Kernel Module drm.
[   14.450925] i915 0000:00:02.0: [drm] User-defined mode not supported: "1280x800": 60 83496 1280 1344 1480 1680 800 801 804 828 0x20 0x6
[   16.075663] i915 0000:00:02.0: [drm] User-defined mode not supported: "1280x800": 60 83496 1280 1344 1480 1680 800 801 804 828 0x20 0x6
[   18.130753] i915 0000:00:02.0: [drm] User-defined mode not supported: "1280x800": 60 83496 1280 1344 1480 1680 800 801 804 828 0x20 0x6
# Xorg does run:
# pstree | grep Xorg
        |-login---startx---xinit-+-Xorg---3*[{Xorg}]
# lsmod | grep i915
i915                 4763648  3
i2c_algo_bit           24576  1 i915
drm_buddy              24576  1 i915
ttm                   118784  1 i915
intel_gtt              28672  1 i915
drm_display_helper    274432  1 i915
video                  81920  2 int3406_thermal,i915
cec                    90112  2 drm_display_helper,i915
# for f in /sys/class/drm/*/status; do echo "$f: $(cat $f)"; done
/sys/class/drm/card0-DP-1/status: disconnected
/sys/class/drm/card0-DP-2/status: disconnected
/sys/class/drm/card0-DP-3/status: disconnected
/sys/class/drm/card0-DSI-1/status: connected
/sys/class/drm/card0-HDMI-A-1/status: disconnected
/sys/class/drm/card0-HDMI-A-2/status: disconnected
/sys/class/drm/card0-HDMI-A-3/status: disconnected

Last edited by cdwijs (2025-07-18 11:03:36)

Offline

#2 2025-07-18 15:16:49

cdwijs
Member
Registered: 2010-04-24
Posts: 310

Re: pipo mini PC intel i915 backlight always on, or always off, no control

I've booted with nomodeset in the cmdline. Now the backlight is on.

# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-linux root=UUID=5cf4026d-f300-4fee-91fe-a62a4a637382 rw nomodeset i2c_touchscreen_props=MSSL1680:touchscreen-min-x=2:touchscreen-min-y=15:touchscreen-size-x=1467:touchscreen-size-y=880:touchscreen-swapped-x-y:touchscreen-inverted-x loglevel=3 quiet

Next I've dumped all the registers https://pastebin.com/fiRvhHS9

# pacman -S intel-gpu-tools
# intel_reg dump --all > intel_reg_dump.txt

Next I found a script that changes the backlight while nomodeset is active: https://pastebin.com/fiRvhHS9

function getCurrentBrightness()
{
    local result=`intel_reg read BLC_PWM_PCH_CTL2 | awk '{print $3}'`
    #echo "Current register value is: ${result}"
    result=`echo $((16#${result:2}))`
    result=$((${result}-61407232));
    echo "${result}"
}

if ! [[ "${currentValueInt}" -ge "0" ]] ; then
 currentValueInt=0
elif ! [[ "937" -ge "${currentValueInt}" ]] ; then
 currentValueInt=937
fi
  currentValueInt=$((${currentValueInt}+61407232));
  valueToSet=0x`echo "obase=16; ${currentValueInt}" | bc`
  echo "Setting new value: ${valueToSet}"
  # set new value
  intel_reg write BLC_PWM_PCH_CTL2 "${valueToSet}"
  # enable manual brightnes control
  intel_reg write BLC_PWM_PCH_CTL1 0xc0000000

My register dump doesn't have these exact PWM registers:

# cat intel_reg_dump.txt | grep PWM
      PIPEA_BLC_PWM_CLT2 (0x00180000:0x00061250): 0x00000000
      PIPEA_BLC_PWM_CTL (0x00180000:0x00061254): 0x00000000
      PIPEB_BLC_PWM_CLT2 (0x00180000:0x00061350): 0x00000000
      PIPEB_BLC_PWM_CTL (0x00180000:0x00061354): 0x00000000

I can't read these registers by their name:

[root@revomax cedric]# intel_reg read PIPEA_BLC_PWM_CLT2
[root@revomax cedric]# intel_reg read PIPEA_BLC_PWM_CLT
[root@revomax cedric]# intel_reg read PIPEB_BLC_PWM_CLT2
[root@revomax cedric]# intel_reg read PIPEB_BLC_PWM_CLT
[root@revomax cedric]# 

I can read the registers when I use the addresses:

[root@revomax cedric]# intel_reg read 0x00180000:0x00061250
                         (0x00180000:0x00061250): 0x00000000
[root@revomax cedric]# intel_reg read 0x00180000:0x00061254
                         (0x00180000:0x00061254): 0x00000000
[root@revomax cedric]#  intel_reg read 0x00180000:0x00061350
                         (0x00180000:0x00061350): 0x00000000
[root@revomax cedric]#  intel_reg read 0x00180000:0x00061354
                         (0x00180000:0x00061354): 0x00000000

I can write the registers, and verify they now hold the new values, but the backlight stays on:

[root@revomax cedric]# currentValueInt=0
[root@revomax cedric]# currentValueInt=$((${currentValueInt}+61407232));
[root@revomax cedric]# valueToSet=0x`echo "obase=16; ${currentValueInt}" | bc`
[root@revomax cedric]# valueToSet=0x`echo "obase=16; ${currentValueInt}" | bc`
[root@revomax cedric]# echo "Setting new value: ${valueToSet}"
Setting new value: 0x3A90000
[root@revomax cedric]# intel_reg write 0x00180000:0x00061250 "${valueToSet}"
[root@revomax cedric]# intel_reg read 0x00180000:0x00061250
                         (0x00180000:0x00061250): 0x03a90000
[root@revomax cedric]# intel_reg write 0x00180000:0x00061254 0xc0000000
[root@revomax cedric]# intel_reg read 0x00180000:0x00061254
                         (0x00180000:0x00061254): 0xc0000000
[root@revomax cedric]# intel_reg write 0x00180000:0x00061350 "${valueToSet}"
[root@revomax cedric]# intel_reg read 0x00180000:0x00061350
                         (0x00180000:0x00061350): 0x03a90000
[root@revomax cedric]# intel_reg write  0x00180000:0x00061354 0xc0000000
[root@revomax cedric]#  intel_reg read 0x00180000:0x00061354 
                         (0x00180000:0x00061354): 0xc0000000

For reference I've also created a pastebin of my dmesg here: https://pastebin.com/5s8uGDLN

What else can I try?

Offline

Board footer

Powered by FluxBB