mtk6567平台,无线充电芯片需要3s才会正式给设备充电,也就是说在3s内被充电设备没有任何反应,用户体验比较差。
因此,在3s内需要做一个假充电机制,硬件接一个gpio做中断。
由于刚刚转做驱动,遇到了不少坑,在此记录一下,并给出最终解决办法。
1.中断注册失败
err = request_irq(wcharge_irq_num, wcharge_irq_handler, IRQF_TRIGGER_HIGH | IRQF_NO_SUSPEND, "wirelesscharge_gpio79_dect", NULL);
if (err) {
pr_info("-fail to request irq-%d-\n", __LINE__);
}
最终确认需要配置dws,
打开vendor\mediatek\proprietary\scripts\dct\DrvGen.exe
打开项目对应的codegen.dws,将gpio勾选成中断模式,Eint79 选择名字,debounce time,初始值等
重新编译kernel,
如需确认修改是否生效,则查看out/target/product/project_name/obj/KERNEL_OBJ/arch/arm.../cust.dtsi
2.休眠后中断不上报
原因是休眠后,中断会disable(不确认是否所有的中断都这样)
修改办法是在suspend函数中加入
irq_set_irq_wake(x_irq_num, 1); 该中断即可上报
中间还遇到了其它的坑,由于比较低级,就不记录在案了。
感谢部门老大给予的指导,感谢汇源同学给予的大力支持,在此感谢!
参考文章:
https://blog.csdn.net/wh_19910525/article/details/17302285