You are not logged in.
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 quietNew situation, this time without nomodeset:
# nano /etc/default/grub
# grub-mkconfig -o /boot/grub/grub.cfg
# mkinitcpio -p linux
# rebootNow 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: disconnectedNew 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: disconnectedLast edited by cdwijs (2025-07-18 11:03:36)
Offline
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 quietNext I've dumped all the registers https://pastebin.com/fiRvhHS9
# pacman -S intel-gpu-tools
# intel_reg dump --all > intel_reg_dump.txtNext 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 0xc0000000My 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): 0x00000000I 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): 0x00000000I 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): 0xc0000000For reference I've also created a pastebin of my dmesg here: https://pastebin.com/5s8uGDLN
What else can I try?
Offline