【总结】高通LED相关问题解析

转自:http://blog.csdn.net/qq_24614807/article/details/71809882

调试GPIO-leds背光灯出现的问题。(改版后,GPIO控制三色灯)
在进行MSM8909项目的时候,在调试gpio-led背光灯的时候,出现了一个要求,这个要求是需要对两个gpio口同时进行初始化,并且能在同一个dtsi的设备节点里以相同的label进行声明,并能让上层在对这两个led背光灯进行同时操作。
首先进行的想法是,如果能够在节点中对同一个label进行操作,那这样就能直接解决问题,但是在代码烧录到板子上去的时候,出现了问题是在adb shell中sys/class/leds中的节点不存在了,后经过分析,得出这是label出现了冲突,导致驱动无法注册。
之后经过询问,有了以下思路,就是在驱动注册gpio的过程中,通过在gpio中查询到的已经注册上的gpio号,也就是gpio920号,对后来需要进行注册的gpio进行相同的处理,也就是再调用一次初始化的函数,对这个新的,也就是gpio921号口进行初始化。同时,也需要对gpio口进行输入或者输出的设定。
设定之后,再进行调试的时候,发现sys/class/leds中的节点出现了,在adb shell中的sys/kernel/debug中的gpio发现,对gpio921的这个新定义的口虽然是注册成功了,但是,在并无法控制。后经过分析发现,是没有与gpio920进行同时赋值的问题,也就是在gpio920口拉高的时候,并没有将gpio921口进行拉高的操作。

本次调试中出现的leds节点的查询和调试方法:
adb shell中的sys/class/leds:可以查询到相应的leds节点。其中对应节点的所在的文件夹中可以通过节点对相应的设备的灯光进行操作。
adb shell中的sys/class/gpio:可以对没有定义的节点的进行操作,具体操作代码echo 920 > export
adb shell中的sys/kernel/debug 在进行cat gpio:可以查询到注册完成的gpio口的状态及其其所属于的设备

2016年11月7日(改版前,使用aw2013扩展芯片)
调试led三色灯aw2013扩展芯片出现的经验汇总(一)
1.在源代码中,在对GPIO进行初始化的时include/input/InputEventLabels.h候,应该要将GPIO的口拉低,在设置使用时,再将GPIO拉高。
2.在项目中的goto函数,由于goto函数有时候会出现比较多,因此,在goto函数的调用上,要根据在goto最先的函数应当要放在最后的这个原则。
3.在GPIO使用前,应该先定义和获取初始化的函数,之后再进行调用

2016年12月5号
在MSM8996项目调试中,出现的LED背光灯的问题
首先,MSM8996项目中的两颗LED背光灯,与其他接触过的板子的情况不一样,过去接触过的板子,主要是通过gpio口来对相应的灯进行控制,那么这样的问题就相对简单一些,也就是说通过gpio来控制,gpio对于灯的控制,首先是要通过对相应的gpio口的控制。
从原理图中看到,两颗led灯接在了pmi上,原始设置是RGB模式,也就是三色灯模式,项目要求将这两个灯的模式,设置成为类似于button-backlight的模式,也就是只通过一个节点的控制,控制这两个灯的同时亮暗。
在驱动中,通过查询相应的的函数的名称,找到了这几个函数:
qpnp_rgb_set
qpnp_led_set
qpnp_get_config_rgb
第一个函数主要是用来设置rgb模式中的使能还有相应的灯光的亮暗程度,也就是占空比等。
第二个函数主要是用来设置各个led的亮暗的,也就是说所有的有关于这个灯的问题,都需要通过这个函数设置亮读度。
第三个函数主要是来对相应的灯所对应的引脚使能。
在最初的处理过程中,在qpnp_rgb_set函数中,找到了这个函数:qpnp_led_masked_write,这个函数的作用就是把相应的信息写入到寄存器中。通过对两颗灯的比较,得出了在写入到两寄存中的使能信号的不同,将两个使能信号进行亦或计算之后,则将两个信号进行了同步使能。
后来在进行程序的验证的时候发现,使能的设置并没有和灯光亮度的设置是同步的,也就是说在echo值的时候,也仅仅只是对一个灯的brightness值进行操作。
之后在qpnp_led_set这个函数中找到设置相应灯光亮度值的地方,由于之后的灯光的使能和赋值都是通过工作队列的形式来进行,因此,设置在查找到对应的设备树节点的名称的时候,将两个灯光进行同时赋值。


猜你喜欢

转载自blog.csdn.net/antchen88/article/details/79202646
今日推荐