PWM 与 GPIO 背光驱动

PWM 与 GPIO 背光驱动

1. PWM Backlight

pwm_bl.c是RK3588常用路径:

1
2
3
4
5
6
platform probe
-> parse brightness-levels/default index
-> get PWM/regulator/enable GPIO
-> calculate period/duty mapping
-> register backlight device
-> update initial status

2. DTS

典型:

1
2
3
4
5
6
7
8
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwmX channel period flags>;
brightness-levels = <...>;
default-brightness-level = <...>;
power-supply = <&...>;
enable-gpios = <&gpio ...>;
};

Panel通过backlight phandle关联。

3. Duty计算

用户brightness先映射到brightness-levels[],再按scale和PWM period得到duty cycle。

需避免:

  • 乘法溢出;
  • levels非单调;
  • index越界;
  • 0亮度仍输出duty;
  • polarity反向。

4. 上电顺序

常见enable:

1
2
3
4
enable regulator
-> assert GPIO
-> configure PWM duty/period
-> enable PWM

关闭通常反向,并满足panel datasheet延迟。实际顺序可由driver/platform callback调整。

5. PWM极性

Active-high/low由PWM flags和硬件定义共同决定。配置错误会导致:

  • 0最亮;
  • 默认全亮;
  • suspend漏光;
  • enable瞬间闪白。

6. GPIO Backlight

gpio_backlight.c仅支持开/关级别,适合无亮度调节的简单板。它注册backlight class并控制enable GPIO。

7. LED Backlight

led_bl.c可把LED class设备聚合为backlight。适用于多通道LED,但需协调LED trigger和backlight ownership。

8. RK3588 DTS

本树tablet、EVB及vehicle显示DTS中存在大量compatible = "pwm-backlight"节点。SoC公共节点并不代表每块板都启用,需检查最终DTB的PWM、regulator和status。

9. DRM Panel协作

正确时序通常为:

1
2
3
4
panel prepare
-> bridge/PHY enable
-> panel enable
-> backlight enable

关机反向。Backlight过早开启会显示未初始化帧。

10. Suspend/Resume

Driver保存requested brightness,通过Core suspended state让effective brightness为0。Resume恢复前需保证PWM clock和regulator已准备。

11. 调试

1
2
3
ls /sys/class/backlight
cat /sys/class/backlight/*/{brightness,actual_brightness,max_brightness,bl_power}
cat /sys/kernel/debug/pwm

示波器确认频率、duty和极性比只看sysfs更可靠。

12. 可靠性

PWM频率过低会闪烁,过高可能超出controller/背光芯片能力。Brightness曲线应按光学感知校准,而不是简单线性假设。

文章互动

阅读 --

留言

0 条留言

正在加载留言…