Backlight 与 LCD Class 框架
1. Backlight对象
backlight_device包含:
- class device;
backlight_ops;- properties;
- update lock;
- notifier;
- parent和driver data。
Properties包括brightness、max_brightness、power、fb_blank、state和type。
2. 注册
1 | backlight_device_register/devm_backlight_device_register |
Managed注册简化内存释放,但remove前仍应关闭输出。
3. Ops
update_status():应用brightness/power/blank;get_brightness():读取硬件实际值;check_fb():决定某framebuffer事件是否关联;- controls_device等辅助。
4. 有效亮度
Core综合:
- requested brightness;
- power;
- fb blank;
- suspended state;
- thermal/driver限制。
若blank/power要求关闭,有效brightness应为0,即使sysfs brightness仍保留用户请求。
5. Sysfs
典型属性:
- brightness;
- actual_brightness;
- max_brightness;
- bl_power;
- type;
- scale。
写brightness调用backlight_update_status(),driver必须校验范围。
6. Notifier
Backlight状态变化可发notifier,panel/graphics clients也可调用强制更新。Callback不能在update lock下形成循环依赖。
7. LCD Class
lcd_device是较旧的面板电源/contrast抽象,ops包括set/get power、contrast、mode。现代面板通常使用DRM panel framework,LCD class主要服务legacy驱动。
本版本LCD Core有两个历史边界:
contrastsysfs写路径不统一校验max_contrast,driver仍需自行防越界;- fb notifier除blank外,对其它事件调用
set_mode时缺少严格的FB_EVENT_MODE_CHANGE过滤,legacy driver的callback必须谨慎验证输入。
8. Blank与DRM
历史fbdev通过FB blank事件影响backlight;现代DRM connector/panel在atomic enable/disable中控制panel和backlight。
两条路径同时操作时需避免:
- 一边enable另一边blank;
- suspend重复关闭;
- brightness恢复顺序错误。
9. PM
Suspend:
1 | mark suspended |
Resume先恢复power/PWM,再按保存brightness update。
10. 热管理
亮度可能被thermal cooling或LED framework限制。Sysfs requested和actual brightness不同是正常现象。
11. 安全
Backlight不是机密接口,但恶意高频写可造成闪烁、PWM负载和面板寿命问题。限制普通容器访问sysfs,并对更新做合理串行。
12. RK3588
大量板级panel节点引用backlight = <&backlight>,常见实现为pwm-backlight。Backlight class在本目录,panel/connector通常在DRM。
通过名称或OF节点查找到backlight对象后,非devm调用方需用put_device(&bd->dev)释放引用;本版本没有独立的backlight_put() API。
正在加载留言…