电量计max17048移植记录

本文记录了MAX17048电量计在Linux系统中的移植过程,包括电源结构体定义、AC电源注册、GPIO初始化、中断处理以及电量显示不准确的解决方法。在移植过程中,作者遇到电源图标未响应AC插拔、电量显示延迟及充满显示90%等问题,并逐一进行了解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从第一次选定maxium17048到移植成功折腾了不少时间,这期间也对相关模块逐个熟悉起来,再次记录,以供后续参考。


1. 最开始,FAE提供了max17048的驱动文件,只有一个C文件,这个文件实现了读取电量计寄存器中SOC, vcell等功能。下面是设备结构体。

struct max17049_chip {
struct i2c_client *client;
struct delayed_work work;
struct delayed_work hand_work;
struct power_supply fgbattery;

/* State Of Connect */
int online;
/* battery voltage */
int vcell; //单块电池的电压
/* battery capacity */
int soc; //storage of capacity
/* State Of Charge */
int status; //charging, discharge, unknown,full等,可以指定。
};

事实上,这个结构体只是定义了一种供电方式(power_supply),即电池。四个变量online,vcell,soc,status用来指示电池的参数或状态。如果我们要实现AC电源供电,要另外实现。LINUX提供了一个结构体——struct power_supply。这个结构体是供电方式的一种抽象,它可以实例化一个电池,一个AC电源或是USB供电。有供电方式就注册哪种,当然也可以三个一起注册。

如:

struct power_supply fgbattery //表示添加电池供电

struct power_supply ac //表示添加AC供电

struct power_supply usb //表示添加usb供电


把这个驱动文件扔到/kernel/driver/power,然后修改下Kconfig和Makefile,选上该模块编译通过了!!!

下载到目标板之后电量显示出来了。但是存在一个问题,拔插AC电源的时候,本来应该变化的电源图标(android界面右上角)却没有变化。

系统根本没有响应

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值