我的NPI项目之Android电源系列(四) -- 关于剩余充满时间的问题的代码跟踪-max1720x_battery.c & qpnp-smb2.c

我的NPI项目之Android电源系列(三), 能够看出,healthd是通过读取/sys/class/power_supply/battery/time_to_full_now而进行充满剩余时间的。

在/sys/class/power_supply/battery/...目录下有很多文件,具体内容如下:

/sys/class/power_supply/ 从字面意思就能够理解,power_supply目录下的内容为该设备的供电来源,在我的项目中,Linux的内核子系统中注册了如下的供电类型,我们主要关注框出来的部分:

这里我们关注一下,Linux驱动设备模型下的power_supply类别下的battery设备的文件节点。而代码/qpnp-smb2.c就是这个battery电源类型的驱动所在。

但是,这个是板端的guage,虽然很准但是我们在驱动只是把它当作了一个过度。由于为了使用到电池中的guage,我们添加了一个smart_battery作为battery的后端实现。

我项目上的healthd代码中,就是通过另外一个文件节点用于读取电池信息的,这部分是这针对比较特殊的设备的。因为,我的项目中是同平台多设备的情况。而设备之间存在有差异。而这个比较特殊的文件为/sys/class/power_supply/smart_battery,对应的驱动为max1720x_battery.c (目前看代码是这个,后面还需要进一步确认),这个guage IC是内嵌在电池中的一个guage。

而/sys/class/battery所对应的是主板端的guage,在sdm660平台上,对应的是文件qpnp-smb2.c


static const struct power_supply_desc batt_psy_desc = {
	.name = "battery",
	.type = POWER_SUPPLY_TYPE_BATTERY,
	.properties = smb2_batt_props,
	.num_properties = ARRAY_SIZE(smb2_batt_props),
	.get_property = smb2_batt_get_prop,
	.set_property = smb2_batt_set_prop,
	.property_is_writeable = smb2_batt_prop_is_writeable,
};

该驱动实际上是高通pmic上的一个guage。

另外,我们平台的有多个型号的max1720/max1721/..., 于是就将公共的部分抽了出来commoncfg_max1720x.c 作为了max1720x_battery.c的后端。真正实现对IC寄存器的读写操作。

	case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW:
		ret = max1720x_read_verify_reg(max1720x_chipinfo, 0, MAX1720X_TTF, &data);
		if (ret < 0) {
			val->intval = max1720x_chipinfo->regs_cache.TTF;
			dev_err(&max1720x_chipinfo->client->dev,"battery full now read fail=%d, keep previous=%d\n", ret, val->intval);
			break;
		}
		/* Unit: 1 : 5.625 sec */
		val->intval = (data * 5625)/1000; /* reply unit is second */
		max1720x_chipinfo->regs_cache.TTF = val->intval;
        dev_dbg(&max1720x_chipinfo->client->dev,"%s %d value:%d ",__FUNCTION__,__LINE__,val->intval);
        dev_info(&max1720x_chipinfo->client->dev,"%s %d value:%d ",__FUNCTION__,__LINE__,val->intval);
        break;

再回到之前的问题上来,电池充电信息为什么会时对时不对。熄屏/亮屏过程中,可以看出从guage中读取的值确实有一个变化的趋势(电量在~45%),例如:

异常的电池时,读出来的时间小于60s,而又大于0s;这样就会出现,

我的NPI项目之Android电源系列(二) -- 关于剩余充满时间的问题-CSDN博客中的问题:

在电池电量为~85%的时候,插拔充电线后,guage有这样的变化规律,而出问题的设备,卡在了22(<60)的状态了;

现在针对这个问题,可以得出结论,是部分电池问题guage问题或者电池本身health问题,导致计算时间异常了。

后面,需要进行souring看看,把有问题的电池filter出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值