前两天,我的机器一直可以进行USB充电,而且都充满了。就没太在意USB充电的问题。
但是最近,经常发现USB充不了电。于是用cat /proc/driver/deb2416x看一下寄存器配置,果然发现负责USB充电电流的寄存器2的值不对。
但是一直没找到哪个地方能设置这个值,因为这个值在模块初始化的时候会进行设置,之后代码里没有任何地方操作该寄存器。
问了下老大,他说应该是看门狗超时造成的。起初我不相信,因为其他的寄存器的值都是正确的。唯独寄存器2不对。但是其他寄存器都有恢复操作(在一个work里面进行设置,每20秒执行一次,也进行看门狗复位)。
其实,在这个work里面,也有对寄存器2的检查操作。但是检测的部分太少了,如果该寄存器的其他位改变了,那么还就真充不了电了。
先看看如何改代码
--- a/drivers/power/bq2416x_charger.c
+++ b/drivers/power/bq2416x_charger.c
@@ -353,16 +353,18 @@ static int bq2416x_check_reg02(struct bq2416x_device_info *di, int force)
}
}
else {
- if ((!(Reg2Val & 0x4)) || force) {
- //Reg2Val &= ~(1<<7);
-