分享好友 最新资讯首页 最新资讯分类 切换频道
Android 按键灯亮灭时间 手机按键灯在哪里设置手机时间在哪里设置「Android 按键灯亮灭时间 手机按键灯在哪里设置」
2025-04-06 12:58


一、按键灯的简介


    最近调试一下按键灯,今天抽空顺便把的流程分析了一下。按键灯也是一种led,它的使用规则如命名一样,当按键按


下亮灯,如果一定时间不操作的话,一会会灭灯。其实这里的按键灯亮灭策略通常不是驱动来完成的,而是有用户空间来


控制。正如一句老话“驱动注重的不是策略,而是机制”;所以我们在编写驱动只需要完成led的点亮和熄灭功能即可。当


然在实际使用中我们会发现不是所有驱动都如此,有时候平台中也会添加一定的策略,这个本章不作分析。 调试按键灯,


当然首先从硬件开始。按键灯的原理图如下:


Android 按键灯亮灭时间 手机按键灯在哪里设置_Android 按键灯亮灭时间



Android 按键灯亮灭时间 手机按键灯在哪里设置_#endif_02

从原理图中我们发现,button-backlight是由两路ISINK控制的,ISNIK是一种类似于PWM的控制器,它可以发出类似PWM的信号,可以通过寄存器的配置

调整其占空比等参数,进入调节输出电流,从而控制led的亮度。


二、按键灯的驱动实现


1. 设备和驱动的匹配


//驱动文件中定义platform_driver


file:kernel-3.18/drivers/misc/mediatek/leds/leds_drv.c


//驱动模块的加载


//dts中定义leds 的相关节点如:red,green,blue,keyboard-backlight,button-backlight等(后面会用到)


file:kernel-3.18/arch/arm/boot/dts/rlk6737m_35g_c_m0.dts


//dts中定义和platform_device相关的节点信息


  上述dts中定义按键灯leds节点配置,内核起来后会解析dts生成相关的设备,并与驱动中的driver匹配,如果匹配成功就执行下面的probe


2.leds probe 函数实现


file:kernel-3.18/drivers/misc/mediatek/leds/leds_drv.c


//后面会用到的一些结构的定义


file:kernel-3.18/drivers/misc/mediatek/leds/mt6735/leds_sw.h


file:kernel-3.18/drivers/misc/mediatek/leds/mt6735/leds.c


3.从dts中获取各种led的配置信息


4. 创建相关的设备节点


//device_create_with_groups的实现


file:kernel-3.18/drivers/base/core.c


//device_create_groups_vargs 的实现


//device_add的实现


device_add_attrs的实现这里将会调用device_add_groups,class->dev_groups 作为参数呗传入,此时节点/sys/class/leds/xxx/brightness 已经被


创建 这里的xxx 对应驱动中的red,green,button_backlight,


lcd-backlight ... 已经创建


5、属性节点的读写方法定义


file:kernel-3.18/drivers/leds/led-class.c


再看led_groups的定义如下:


当用户空间读取属性节点时候,会直接输入当前亮度值


定义brightness属性的变量


6.button-backlight 亮灯的实现


通过上面节点的 /sys/class/leds/button-backlight/brightness 写方法brightness_store的定义可知,当brightness节点被用户空间写入后,将触发


执行__led_set_brightness,我们可以通过用户空间传入的参数调节灯的亮度,这里这里的传入参数范围0~255 


这里的__led_set_brightness如下定义:


file:kernel-3.18/drivers/leds/leds.h


这个函数最终会调用led_cdev->brightness_set,而 led_cdev->brightness_set在leds_drv.c 中已经被赋值过如下:


file:kernel-3.18/drivers/misc/mediatek/leds/leds_drv.c


file:kernel-3.18/drivers/misc/mediatek/leds/mt6735/leds.c


mt_mt65xx_led_set_cust的实现


file:kernel-3.18/drivers/misc/mediatek/leds/mt6735/leds.c


也就是说当用户对属性节点 /sys/class/leds/button-backlight/brightness 写入时最终调用mt_brightness_set_pmic函数,


mt_brightness_set_pmic的实现如下:


file:kernel-3.18/drivers/misc/mediatek/leds/mt6735/leds.c


上述pmic_set_register_value的操作就是对ISINK具体寄存器的操作,本文不作深入研究


三、总结


通过上述的分析,我们大致可以看出在mtk平台上leds系列的驱动流程大致如下,先在dts中定义各个led节点的配置,配


置如mode,name,data 预留给driver调用,然后创建common drver (通用驱动)对各个led统一管理,在通用驱动中各个不


同类型led 通过数组区分,common driver对各个led进行统一的设备注册,属性节点创建等。当然led的种类繁多还有充


电指示灯,呼吸灯等,在加上每种灯硬件配置不一样驱动实现方式也不同,这个需要另行分析了。








最新文章
1枚比特币=10万美元? 比特币会暴涨,也会暴跌
12月5日,比特币价格首次突破10万美元,再创历史新高。自特朗普胜选以来,比特币涨幅已达40%,市值逼近2万亿美元,相当于两个或
“南方小土豆”的美味:苏式熏鱼
近日,哈尔滨的“南方小土豆”词条频频登上热搜,其特指来北方玩雪身穿浅色的羽绒服,头戴可爱帽子,再坐上行李箱脚都够不着地的
延续奇幻热潮,TVB奇幻喜剧《双生陌生人》于5月2日埋堆堆APP全网独播
2020年的TVB最佳剧集《反黑路人甲》斩获高口碑和高收视,狂扫多个奖项。相隔2年,监制林志华带领观众熟悉的班底成员,炮制全新剧
4Plas 尼龙6 4MID 9B23300高强度
供应 PA6 4MID 9B22330 H 生产商: 4Plas供应 PA6 4MID 9B23100 生产商: 4Plas供应 PA6 4MID 9B23300 UV 生产商: 4Plas供应 PA6 4
出海这件事是怎么火上加火的
文 | 习木方编辑 | 杨旭然相对于以前“大型企业走出去”的国家战略,或者一些大量现金买买买的方式,这一轮新兴企业的出海,
黑龙江省第十五届运动会—女子篮球比赛圆满落幕
是一群无畏的斗士,使劲浑身解术,只为夺得头筹,坚定脚印,将无穷的潜力聚集,执着的背影在那一刻结成永恒,你是站在追光之外的
【入门攻略】《三角洲行动》药品指南
而高强度的伤害,比如遭遇敌方集火、爆炸物功能、从高处坠落等,则可能会导致一些异常状态。例如:身体各部位出现伤口,就会陷入
从爱情见证物到废弃物,销毁婚纱照火了
(IC photo / 图)这年头,关于爱情的生意,开始逐渐突破人们的想象力。比如最近,一项新兴业务就吸引了大众的注意。都知道结婚
真我彻底发飙?“顶尖性能”手机才卖2465元,6500mAh+120W+IP69
谈到“性价比”三个字,相信不少网友都会首先想到小米这个品牌,然而,现在的小米不再是极致性价比的代名词,而是把性价比的衣钵
三国谋定天下:白板大黄猪逆转满红大乐马!教科书式的倒反天罡!
在此特别鸣谢游戏ID名为“北境丨搁浅”的玩家朋友,给本文提供了宝贵的创作素材。北境丨搁浅自己都想不到,他用白板的大乔、黄盖