- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you for the fast reply.
What is the best place to ask this question, assuming pipo doesn't support linux?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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]

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page