news 2026/5/27 16:38:02

[Linux外设驱动详解]PWM Backlight 驱动详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[Linux外设驱动详解]PWM Backlight 驱动详解

PWM Backlight 驱动详解

1. 概述

pwm_bl.c是 Linux 内核中基于 PWM 的背光控制驱动程序。该驱动通过 PWM(脉冲宽度调制)信号来控制 LCD 屏幕的背光亮度,是嵌入式系统中常用的背光控制方案。

文件位置:linux-4.19.125/drivers/video/backlight/pwm_bl.c

主要功能:

  • 通过 PWM 占空比控制背光亮度
  • 支持设备树(Device Tree)配置
  • 支持 CIE 1931 亮度曲线算法
  • 支持亮度等级线性插值
  • 支持电源管理和休眠/唤醒

2. 驱动架构

2.1 核心数据结构

structpwm_bl_data{structpwm_device*pwm;// PWM 设备structdevice*dev;// 设备指针unsignedintperiod;// PWM 周期(纳秒)unsignedintlth_brightness;// 最低亮度阈值unsignedint*levels;// 亮度等级表bool enabled;// 使能状态structregulator*power_supply;// 电源 regulatorstructgpio_desc*enable_gpio;// 使能 GPIOunsignedintscale;// 亮度缩放因子bool legacy;// 旧版 API 标志unsignedintpost_pwm_on_delay;// PWM 开启后延迟unsignedintpwm_off_delay;// PWM 关闭前延迟int(*notify)(structdevice*,intbrightness);// 亮度变化前通知void(*notify_after)(structdevice*,intbrightness);// 亮度变化后通知int(*check_fb)(structdevice*,structfb_info*);// framebuffer 检查void(*exit)(structdevice*);// 退出回调};

2.2 背光操作接口

staticconststructbacklight_opspwm_backlight_ops={.update_status=pwm_backlight_update_status,// 更新背光状态.check_fb=pwm_backlight_check_fb,// 检查 framebuffer};

3. 核心功能实现

3.1 电源控制

开启背光 (pwm_backlight_power_on)
staticvoidpwm_backlight_power_on(structpwm_bl_data*pb,intbrightness){// 1. 检查是否已开启if(pb->enabled)return;// 2. 使能电源 regulatorregulator_enable(pb->power_supply);// 3. 启用 PWMpwm_enable(pb->pwm);// 4. 延迟(如果配置)if(pb->post_pwm_on_delay)msleep(pb->post_pwm_on_delay);// 5. 设置使能 GPIOif(pb->enable_gpio)gpiod_set_value_cansleep(pb->enable_gpio,1);pb->enabled=true;}
关闭背光 (pwm_backlight_power_off)
staticvoidpwm_backlight_power_off(structpwm_bl_data*pb){if(!pb->enabled)return;// 1. 关闭使能 GPIOif(pb->enable_gpio)gpiod_set_value_cansleep(pb->enable_gpio,0);// 2. 延迟(如果配置)if(pb->pwm_off_delay)msleep(pb->pwm_off_delay);// 3. 配置 PWM 并禁用pwm_config(pb->pwm,0,pb->period);pwm_disable(pb->pwm);// 4. 禁用电源 regulatorregulator_disable(pb->power_supply);pb->enabled=false;}

3.2 占空比计算

staticintcompute_duty_cycle(structpwm_bl_data
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 12:37:14

深度拆解 `std::unordered_map` 的‘渐进式再哈希’:如何避免在插入海量数据时产生的瞬时卡顿?

各位技术同仁,大家好。今天我们将深入探讨一个在高性能计算和系统编程中至关重要的话题:哈希表的动态扩容机制,特别是如何避免在海量数据插入时可能出现的瞬时卡顿。我们将聚焦于C标准库中的std::unordered_map,并着重拆解一个高级…

作者头像 李华
网站建设 2026/5/24 7:09:38

一款可以阻止网络钓鱼诈骗的解决方案?收藏这篇就够了

“你继承了一笔财富。要转账,我需要你的银行账户凭证。” 你是否也遇见过此类的电话诈骗话术。 根据2022年数据泄露调查报告,25%的数据泄露涉及网络钓鱼。 这是怎么发生的?参与网络钓鱼的欺诈者一般都是心理方面的高手。他们知道如何营造紧…

作者头像 李华
网站建设 2026/5/23 11:44:47

从 Web 安全到二进制:转行网络安全的进阶方向选择

从 Web 安全到二进制:转行网络安全的进阶方向选择 引言 转行网络安全一段时间后,很多同学会陷入 “方向迷茫”—— 一直做 Web 安全,感觉技术瓶颈明显,想进阶却不知道选什么方向;看到别人做二进制安全、工控安全&…

作者头像 李华
网站建设 2026/5/20 12:37:15

论文AI率过高怎么办?大学生必看的降AI率指南(超简单)

一、为什么我查重过了,AI率却超标?【认知盲区】 你是不是也遇到过这种情况:论文查重率明明控制在10%以内,导师却指着检测报告问:"这AI生成痕迹太明显了吧?" 很多同学都忽略了:查重≠…

作者头像 李华
网站建设 2026/5/20 12:37:40

No.940 ‘基于S7-200 PLC和组态王的车辆出入库管理系统停车场控制系统

No.940 基于S7-200 PLC和组态王的车辆出入库管理系统停车场控制系统 刚接手停车场改造项目那会儿,甲方甩过来个奇葩需求:要在老仓库区搞智能车辆管理系统,还得用西门子S7-200 PLC配组态王。这组合搁现在看着有点复古,但胜在稳定耐…

作者头像 李华