Graphics
Intel® graphics drivers and software, compatibility, troubleshooting, performance, and optimization
22643 Discussions

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

Cedric_1337
Beginner
838 Views

   

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

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?

0 Kudos
3 Replies
AlHill
Super User
831 Views

Contact pipo for support of their device.

 

And no one is going to read a post as long as yours.

 

Doc (not an Intel employee or contractor)
[IDSA needs to be abandoned, uninstalled and forgotten]

0 Kudos
Cedric_1337
Beginner
826 Views

Thank you for the fast reply.

What is the best place to ask this question, assuming pipo doesn't support linux?

0 Kudos
AlHill
Super User
765 Views

Either you cannot contact pipo, or you already know that linux is not supported on your device,

well, for a graphics related issue, you are already in the right place.

Wait, and an Intel support engineer will be with you shortly.  Remember, this is the weekend.

 

Doc (not an Intel employee or contractor)
[IDSA needs to be abandoned, uninstalled and forgotten]

 

0 Kudos
Reply