从第一次选定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界面右上角)却没有变化。
系统根本没有响应