如何设置通过PMU的gpio来唤醒系统

假设你要设置pmu(axp209)  的gpio3来唤醒系统。
1、修改linux-3.0/drivers/power/axp_power_axp-sply.h,这个文件里面定义了一个AXP20_NOTIFIER_ON这个变量,我们要加上跟GPIO3相关的内容上去:
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
AXP20_IRQ_USBIN |
        AXP20_IRQ_USBRE |
      //AXP20_IRQ_USBLO |
      //AXP20_IRQ_ACOV |
      AXP20_IRQ_ACIN |
      AXP20_IRQ_ACRE |
      //AXP20_IRQ_TEMOV |
      //AXP20_IRQ_TEMLO |
      AXP20_IRQ_BATIN |
      AXP20_IRQ_BATRE |
      //AXP20_IRQ_PEKLO |
      //AXP20_IRQ_PEKSH |
      AXP20_IRQ_CHAST |
      AXP20_IRQ_PEKFE |
      AXP20_IRQ_CHAOV |
      AXP20_IRQ_GPIO3TG | //add by laotie121022 这个是我新添加i的
      AXP20_IRQ_PEKRE ;
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
AXP20_IRQ_USBIN |
        AXP20_IRQ_USBRE |
      //AXP20_IRQ_USBLO |
      //AXP20_IRQ_ACOV |
      AXP20_IRQ_ACIN |
      AXP20_IRQ_ACRE |
      //AXP20_IRQ_TEMOV |
      //AXP20_IRQ_TEMLO |
      AXP20_IRQ_BATIN |
      AXP20_IRQ_BATRE |
      //AXP20_IRQ_PEKLO |
      //AXP20_IRQ_PEKSH |
      AXP20_IRQ_CHAST |
      AXP20_IRQ_PEKFE |
      AXP20_IRQ_CHAOV |
      AXP20_IRQ_GPIO3TG | //add by laotie121022 这个是我新添加i的
      AXP20_IRQ_PEKRE ;
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
AXP20_IRQ_USBIN |
        AXP20_IRQ_USBRE |
      //AXP20_IRQ_USBLO |
      //AXP20_IRQ_ACOV |
      AXP20_IRQ_ACIN |
      AXP20_IRQ_ACRE |
      //AXP20_IRQ_TEMOV |
      //AXP20_IRQ_TEMLO |
      AXP20_IRQ_BATIN |
      AXP20_IRQ_BATRE |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
AXP20_IRQ_USBIN |
        AXP20_IRQ_USBRE |
      //AXP20_IRQ_USBLO |
      //AXP20_IRQ_ACOV |
      AXP20_IRQ_ACIN |
      AXP20_IRQ_ACRE |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
const uint64_t AXP20_NOTIFIER_ON =
//AXP20_IRQ_USBOV |
const uint64_t AXP20_NOTIFIER_ON =
AXP20_IRQ_USBIN |
AXP20_IRQ_USBRE |
AXP20_IRQ_ACIN |
AXP20_IRQ_ACRE |
AXP20_IRQ_BATIN |
AXP20_IRQ_BATRE |
AXP20_IRQ_CHAST |
AXP20_IRQ_PEKFE |
AXP20_IRQ_CHAOV |
AXP20_IRQ_GPIO3TG |    //这个就是我们添加的
AXP20_IRQ_PEKRE ;

2、修改axp20-sply-cou.c(如果你使用ocv驱动就是axp20-sply.c)
static int axp_battery_event(struct notifier_block *nb, unsigned long event,void*data){
}
if((bool)data==0){
}
else{
//add by laotie121022 <<<
if((event) & AXP20_IRQ_GPIO3TG>>32) { //如果是这个时间,需要模拟一个powe键
axp_keydown(charger);
}

if((event) & AXP20_IRQ_GPIO3TG>>32) {
axp_keyup(charger);
}

//add end >>>
}

static int axp_battery_event(struct notifier_block *nb, unsigned long event,void*data){
if((bool)data==0){
   其他代码省略
}else{
//add by laotie121022 <<<
if((event) & AXP20_IRQ_GPIO3TG>>32) { //如果是这个时间,需要模拟一个powe键
axp_keydown(charger);
}

if((event) & AXP20_IRQ_GPIO3TG>>32) {
axp_keyup(charger);
}

//add end >>>
}
//add by laotie121022 <<<
if((event) & AXP20_IRQ_GPIO3TG>>32) { //这些是要添加的代码
axp_keydown(charger);
}
if((event) & AXP20_IRQ_GPIO3TG>>32) {
axp_keyup(charger);
}
if((event) & AXP20_IRQ_GPIO3TG>>32) {
axp_keyup(charger);
}
if((event) & AXP20_IRQ_GPIO3TG>>32) {
axp_keyup(charger);
}
if((event) & AXP20_IRQ_GPIO3TG>>32) {
axp_keyup(charger);
}

}
在axp_earlysuspend加入:

在axp_earlysuspend的最后加入一些代码:
static void axp_earlysuspend(struct early_suspend *h)
{
static void axp_earlysuspend(struct early_suspend *h)
{
其他代码省略
axp_read(axp_charger->master,0x44, &tmp);
tmp |= 0x08;//GPIO3 中断使能
axp_write(axp_charger->master,0x44, tmp);
axp_set_bits(axp_charger->master,0x95,0x44);//95H 设置GPIO3为wakeup功能

}

在axp_lateresume的最后加入一些代码:
static void axp_lateresume(struct early_suspend *h)
{
其他代码省略
axp_read(axp_charger->master,0x44, &tmp);
tmp &= ~0x08;
axp_write(axp_charger->master,0x44, tmp);
axp_clr_bits(axp_charger->master,0x95,0x44); 


}

3、修改axp-mfd.h

把#define AXP20_IRQ_GPIO3TG     ( 1 << 35)
改为
#define AXP20_IRQ_GPIO3TG     ( (uint64_t)1 << 35)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值