承接上文《龙芯2K300蜂鸟板适配慧勤智远兼容屏》,成功点亮屏幕之后,我发现了一个问题,那就是屏幕太亮了!
问题所在
一般屏幕的背光亮度,是可以通过PWM来调节的,但是原来的设备树ls2k300_mini_dp.dts
对于背光控制引脚是这样写的:
lcd_backlight: backlight {
compatible = "gpio-backlight";
gpios = <&gpio 84 GPIO_ACTIVE_HIGH>;
default-on;
};
只能通过以下的方式开关背光:
# 关闭背光
echo 0 > /sys/devices/platform/backlight/backlight/backlight/brightness
# 打开背光
echo 1 > /sys/devices/platform/backlight/backlight/backlight/brightness
而无法调节背光亮度。
更加不爽的是,查阅《蜂鸟派引脚功能复用表》可知,
背光引脚GPIO84
并非PWM引脚,连第二复用都不是,那就没法使用常规的硬件PWM方式来控制背光亮度了!
尝试sysfs操作gpio
删除设备树中lcd_backlight: backlight
这个节点,重新编译烧录内核,尝试使用gpio模拟PWM的方式,看看使用PWM控制背光是否可行:
echo 84 > /sys/class/gpio/export
# Set direction to output
echo out > /sys/class/gpio/gpio84/direction
# Then toggle the GPIO pin in a loop with calculated delays
while true; do
echo 1 > /sys/class/gpio/gpio84/value
usleep 1
echo 0 > /sys/class/gpio/gpio84/value
usleep 1
done
验证可用,但是CPU飙到33%,而且任何操作都导致屏幕闪烁(触屏、执行命令等)。
使用pwm-gpio驱动
开启内核编译选项:
CONFIG_PWM_GPIO=y
修改设备树lcd_backlight: backlight
这个节点, 注释掉backlight = <&lcd_backlight>;
lcd_backlight: backlight {
#pwm-cells = <3>;
compatible = "pwm-gpio";
gpios = <&gpio 84 GPIO_ACTIVE_HIGH>;
pwm-names = "backlight";
};
panel: dvo-connector@0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "panel-lvds", "auo,b101ean01";
// backlight = <&lcd_backlight>;
// ...
}
编译烧录好内核后,配置PWM:
# 导出PWM通道
echo 0 > /sys/class/pwm/pwmchip0/export
# 设置PWM参数
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
可以看到亮度是原来的一半,CPU保持0%
,也没有闪屏问题,虽然肯定比pwm效率低些就是了。
说些什么吧!