分类: Android平台
2013-01-30 13:30:31
*********************************************************************
关于13783开关机:
13783上的ON1B管脚是一个输入pin,在其上可以连接一个按键,记过设置后用于power on/off button。
首先该键可用作power/on键,当13783所在的pdk板处于供电状态,而13783对cpu处于断电状态时,也就是没有给cpu供电时,但此时13783的电源有电,此时只有13783由VATLAS电压维持的核心电路和RTC module正常工作。此时的检测电路可以监测ON1B管脚的电压(该脚由VATLAS上拉,47k的电阻太大了,上拉不够,应换为10k左右的)变化状况,当电压出现一个上升沿时,该上升沿会自动进行30ms的消抖,当此上升沿出现时,硬件检测电路会把他识别为一个turn on event,从而载入各regulator的默认参数,并按照默认的顺序依次启动(间隔2ms,避免大的突入电流)。
此键也可以用来关机使用,当ON1BRSTEN位(Register 15,第二个bit)置为高时,4s钟的按键可使13783给cpu断电,但是若RESTARTEN(Register 15,第一个bit)位置为高,13783会在1s钟之后重新给cpu供电,相当于来了一次reset,所以只有先把RESTARTEN位置为低,并且按键4s后,才相当于来了一次power off。
*********************************************************************
power management driver很主要有以下三方面作用:
1、开关所有的regular
2、为所有的regular设值
3、获得所有的regular的当前电流值
和电池的充电没有关系。充电是由PMIC Battery Driver来完成的。
static int pmic_power_probe(struct platform_device *pdev)
{
int irq, ret;
/* configure on/off button */
gpio_power_key_active();
irq = (int)pdev->dev.platform_data;
if (irq == 0) {
pr_info(KERN_INFO "PMIC Power has no platform data/n");
goto done;
}
set_irq_type(irq, IRQF_TRIGGER_RISING);
ret = request_irq(irq, power_key_int, 0, "power_key", 0);
if (ret)
pr_info(KERN_ERR "register on-off key interrupt failed/n");
set_irq_wake(irq, 1);
done:
pr_info(KERN_INFO "PMIC Power successfully probed/n");
return 0;
}
注册了on/off button的中断,中断函数为power_key_int,
中断函数为:
static irqreturn_t power_key_int(int irq, void *dev_id)
{
pr_info(KERN_INFO "on-off key pressed/n");
return 0;
}
可以在此函数内进行事件处理,判断之后进行power方面的操作。