很早提的问题了,看到还没结贴,自己过来把这个空白给填上吧。
首先,这是NUC972的板子,它有8路ADC,现在要一路一路的分离出来作为单一通道来用。自带内核中没有单一通道的节点,要自己去注册添加实现open read函数。
在内核目录linux-3.10.x/drivers/input/nuvoton/nuc970adc.c ,在结构体 struct nuc970_adc{}中添加 struct device *dev; struct power_supply bat; 要使用到一路就添加一个新的结构体成员(名称自取);
接下来是注册; 注册的话是在static int nuc970adc_probe(struct platform_device *pdev)这函数中增加
#ifdef CONFIG_BATTREY_NUC970ADCA
nuc970_adc->used_state = (1<<4);
nuc970_adc->bat1.name = "NUC970 Battery(ADC1)"; //j节点名称
nuc970_adc->bat1.type = POWER_SUPPLY_TYPE_BATTERY;
nuc970_adc->bat1.properties = nuc970adc_battery_props;
nuc970_adc->bat1.num_properties = ARRAY_SIZE(nuc970adc_battery_props);
nuc970_adc->bat1.get_property = nuc970adc_battery_get_property_AD1;//回调函数(关键是这个)
if ( power_supply_register(nuc970_adc->dev1, &nuc970_adc->bat1)) {
printk("----------------------------------------------------power failed\n");
goto fail5;
}
#endif
ifdef 后的选项要在对应的Kconfig中添加,并在内核配置时选中,
注册完了,就开始编写自己的回调函数;源码中回调函数有个可参考的例子static int nuc970adc_battery_get_property(),可以复制过来 ,然后修改通道(根据上面我发的图中,找到通道的配置位置),
最后重新编译内核,运行,在/sys/class/power_supply/中就可以找到节点,并可以程序打开读写!
大概描述下,不足之处还请各位大神指出,不明白的地方可以留言,我会尽我所能!
|