[QUESTION]
做TP手势唤醒功能的时候,系统深度休眠后中断无法唤醒。
[ANSWER]
配置在深度休眠状态下可被唤醒的中断需要注意如下:
1.申请中断时请置上IRQF_NO_SUSPEND选项,并且需要在suspend函数中设置中断为 电平触发,在resume函数中再恢复边沿触发。
例如:
suspend函数中
irq_set_irq_type(this_client->irq,IRQF_TRIGGER_LOW | IRQF_NO_SUSPEND | IRQF_ONESHOT);
resume函数中:
irq_set_irq_type(this_client->irq,IRQF_TRIGGER_FALLING | IRQF_NO_SUSPEND | IRQF_ONESHOT);
2.由于休眠状态下,clock时钟一般为32K,所以需要保证中断的保持时间;比如电平中断建议持续时间要超过100ms
这个需要TP厂商修改固件实现
3.pinmap文件中的TP中断引脚需配置成在睡眠状态的IE(输入时能)
例如:
把pinmap文件中的
{REG_PIN_SIMDA2, BIT_PIN_SLP_AP|BIT_PIN_NULL|BITS_PIN_DS(1)|BITS_PIN_AF(3)|BIT_PIN_WPU|BIT_PIN_SLP_WPU|BIT_PIN_SLP_Z},//CTP_INT
改为
{REG_PIN_SIMDA2, BIT_PIN_SLP_AP|BIT_PIN_NULL|BITS_PIN_DS(1)|BITS_PIN_AF(3)|BIT_PIN_WPU|BIT_PIN_SLP_WPU|BIT_PIN_SLP_IE},//CTP_INT