【USB设备】AC充电驱动调用梳理
2013-06-27 15:18
183 查看
1、
插上电源--触发中断调用
microP_work()
{
进入 已经链接
if( is_Mode_APROM())
{
if(IsP01ACUSBInOut())
{
micropSendNotify(P01_AC_USB_IN);
AX_MicroP_get_USBDetectStatus(AX_MicroP_get_USBDetectStatus(Batt_P01))
-->//判断是充电 还是 in remove FirmwareUpdating
-->
}
}
}
2、
P01_AC_USB_IN Notify在 AXC_batterySerivice.c中会call
注册函数如下:
register_microp_notifier(&batSer_microp_notifier);
static struct notifier_block batSer_microp_notifier = {
.notifier_call = batSer_microp_event_handler,
};
响应时 call如下函数:
3、static int batSer_microp_event_handler( struct notifier_block *this, unsigned long event, void *ptr)
{
printk( "[BAT][Bal] MicroP call back \r\n");
switch (event)
{
asus_bat_update_PadAcOnline();
printk( "[BAT][Bal]P01_AC_USB_IN\r\n");
if(true==DecideIfPadDockHaveExtChgAC())
{
Init_Microp_Vbus__Chg();
}
break;
}
}
其中得 asus_bat_update_PadAcOnline(); 函数定义在 asus_bat.c中
void asus_bat_update_PadAcOnline(void)
{
asus_bat_update_pad_ac_online();
}
其中得 asus_bat_update_pad_ac_online();函数定义咋在 asus_bat.c中
static void asus_bat_update_pad_ac_online(void)
{
power_supply_changed(&pad_ac_psy); //定义在 power_supply_core.c中 更改电源
printk("[BAT] pad ac online update\n");
return;
}
其中得参数 pad_ac_psy 定义在 在 asus_bat.c中
static struct power_supply pad_ac_psy = {
.name = "pad_ac",
.type = POWER_SUPPLY_TYPE_PAD_AC,
.properties = pad_ac_properties,
.num_properties = ARRAY_SIZE(pad_ac_properties),
.get_property = asus_bat_pad_ac_get_property,
};
用到得主要参数.get_property = asus_bat_pad_ac_get_property 定义在asus_bat.c中 设置标志位 无其他操作
上述3中 得函数 其中得函数DecideIfPadDockHaveExtChgAC 在AXC_batterySerivice.c中
static bool DecideIfPadDockHaveExtChgAC(void)
{
PadChgCable = AX_MicroP_get_USBDetectStatus(Batt_P01);
-->//判断是充电 还是 in remove FirmwareUpdating
-->某 返回true来调用下面得函数
}
上述3中 得函数 Init_Microp_Vbus__Chg 定义在AXC_batterySerivice.c中
void Init_Microp_Vbus__Chg(void)
{
gpCharger->EnableCharging(gpCharger,true);
set_microp_vbus(1) //使能Vbus -->AX_MicroP_setGPIOOutputPin(OUT_uP_VBUS_EN, level);
balance_this->fsm->onChargingStart(balance_this->fsm);
}
在1中定义得notify P01_AC_USB_IN 在 AXC_batterySerivice.c中会call
函数 NotifyBmsChgBegan 定义在AXC_batterySerivice.c中
static void NotifyBmsChgBegan(struct work_struct *work)
{
pm8921_bms_charging_began();
}
函数 pm8921_bms_charging_began();定义在 pm8921-bms.c中
void pm8921_bms_charging_began(void)
{
//计算电量
}
插上电源--触发中断调用
microP_work()
{
进入 已经链接
if( is_Mode_APROM())
{
if(IsP01ACUSBInOut())
{
micropSendNotify(P01_AC_USB_IN);
AX_MicroP_get_USBDetectStatus(AX_MicroP_get_USBDetectStatus(Batt_P01))
-->//判断是充电 还是 in remove FirmwareUpdating
-->
}
}
}
2、
P01_AC_USB_IN Notify在 AXC_batterySerivice.c中会call
注册函数如下:
register_microp_notifier(&batSer_microp_notifier);
static struct notifier_block batSer_microp_notifier = {
.notifier_call = batSer_microp_event_handler,
};
响应时 call如下函数:
3、static int batSer_microp_event_handler( struct notifier_block *this, unsigned long event, void *ptr)
{
printk( "[BAT][Bal] MicroP call back \r\n");
switch (event)
{
asus_bat_update_PadAcOnline();
printk( "[BAT][Bal]P01_AC_USB_IN\r\n");
if(true==DecideIfPadDockHaveExtChgAC())
{
Init_Microp_Vbus__Chg();
}
break;
}
}
其中得 asus_bat_update_PadAcOnline(); 函数定义在 asus_bat.c中
void asus_bat_update_PadAcOnline(void)
{
asus_bat_update_pad_ac_online();
}
其中得 asus_bat_update_pad_ac_online();函数定义咋在 asus_bat.c中
static void asus_bat_update_pad_ac_online(void)
{
power_supply_changed(&pad_ac_psy); //定义在 power_supply_core.c中 更改电源
printk("[BAT] pad ac online update\n");
return;
}
其中得参数 pad_ac_psy 定义在 在 asus_bat.c中
static struct power_supply pad_ac_psy = {
.name = "pad_ac",
.type = POWER_SUPPLY_TYPE_PAD_AC,
.properties = pad_ac_properties,
.num_properties = ARRAY_SIZE(pad_ac_properties),
.get_property = asus_bat_pad_ac_get_property,
};
用到得主要参数.get_property = asus_bat_pad_ac_get_property 定义在asus_bat.c中 设置标志位 无其他操作
上述3中 得函数 其中得函数DecideIfPadDockHaveExtChgAC 在AXC_batterySerivice.c中
static bool DecideIfPadDockHaveExtChgAC(void)
{
PadChgCable = AX_MicroP_get_USBDetectStatus(Batt_P01);
-->//判断是充电 还是 in remove FirmwareUpdating
-->某 返回true来调用下面得函数
}
上述3中 得函数 Init_Microp_Vbus__Chg 定义在AXC_batterySerivice.c中
void Init_Microp_Vbus__Chg(void)
{
gpCharger->EnableCharging(gpCharger,true);
set_microp_vbus(1) //使能Vbus -->AX_MicroP_setGPIOOutputPin(OUT_uP_VBUS_EN, level);
balance_this->fsm->onChargingStart(balance_this->fsm);
}
在1中定义得notify P01_AC_USB_IN 在 AXC_batterySerivice.c中会call
函数 NotifyBmsChgBegan 定义在AXC_batterySerivice.c中
static void NotifyBmsChgBegan(struct work_struct *work)
{
pm8921_bms_charging_began();
}
函数 pm8921_bms_charging_began();定义在 pm8921-bms.c中
void pm8921_bms_charging_began(void)
{
//计算电量
}
相关文章推荐
- 从USB设备插上到驱动probe调用流程分析
- 从USB设备插上到驱动probe调用流程分析
- 从USB设备插上到驱动probe调用流程分析
- 从USB设备插上到驱动probe调用流程分析
- USB学习二:从USB设备插上到驱动probe调用流程分析(转)
- Linux下usb驱动调用流程
- Windows CE下USB设备驱动开发的一些基础知识
- USB自定义设备驱动模块
- Linux下的硬件驱动——USB设备(下)
- 如何驱动一款USB设备
- Linux下的硬件驱动——USB设备(上)(驱动配置部分)
- mini2440 usb device controller 驱动的分析--gadget设备(二)---枚举
- Linux下的硬件驱动——USB设备(下)(驱动开发部分)
- 如何找到一个usb设备的具体驱动
- 解决win7 Windows USB无法驱动/驱动错误/该设备无法启动。(代码10)
- USB gadget设备驱动解析(3)——驱动结构分析
- Linux设备驱动之usb设备驱动详解
- 开发wince下的usb音频设备驱动总结
- Linux设备驱动之usb设备驱动详解
- USB设备驱动及测试1