首先,根据测试所汇报的情况,了解了目前的情况是在充电的条件下,先亮绿灯,再亮红灯。
通过最初的分析,在往节点写值的时候,亮灯的情况是正常的,也就是说三色灯的节点是可控的,由此,理论上是可以排除驱动上面的问题,但是仍然无法解决和分析到问题。
在查看相关设备树文件msm-pmi8994后发现,相应的linux-default-trigger是有一些问题的,这些问题的造成主要是由于linux-default-trigger设置的是底层驱动在特定的情况下出现的作出的反应。同时,在上层,也同时在对LED灯进行控制,则造成了逻辑上的错误。
但是由于客户的要求是充电的时候亮起红灯,因此并没有完全分析出问题,并且怀疑是上层写值的时候出现了写值失败的问题,但是为了能够排除在驱动中其他地方对于灯的操作的影响,则需要对将底层驱动给上层提供的接口的写权限去除。
设置在qpnp中的LED闪烁的问题
在驱动中,已经出现了对应创建blink节点的相关代码,但是并没有出现blink节点。
一般的LED灯节点,基本在创建节点的时候,是在led-class.c这个文件中进行创建的,这个文件创建的是brightness和trigger等节点,之后,根据在设备树说明文件中查询到的相关例子,看到在PWM模式下需要进行闪烁,要将PWM模式切换到LPG模式,同时在正常亮起的条件下再转换为PWM模式。因此,需要往原节点中添加以下代码:
pwms:
qcom,pwm-us:
qcom,duty-pcts -->此项为占空比
qcom,start-idx -->始终为1(预测)
qcom,ramp-step-ms -->每个亮起循环的周期
根据分析得出,当设备树进行解析的时候,出现了qcom,use-blink这个字段的时候,在驱动中定义的添加的节点会出现。