一、下面这款I2C设备,只有一个PMIC_INT_L中断pin脚,当接入充电器、拔插充电器、按键按下松开等都是由这个中断pin触发。这里提出一个需求,接入充电器的时候调用一个处理函数,拔插充电器的时候调用另外一个处理函数。如何做到呢?这里就会用到regmap_add_irq_chip、regmap_irq_get_virq等封装好的函数。
二、这里就来分析一下接入充电器、拔插充电器的处理过程。
1、中断脚是连接到cpu的gpio0a3.
2、dts 里面定义这个pin脚
扫描二维码关注公众号,回复:
14278197 查看本文章
![](/qrcode.jpg)
3、调用regmap_add_irq_chip 注册这个中断
4、regmap_irq_chip 就是用来定义中断寄存器的地址、个数。
5、特别来看一下接入充电器、拔插充电器的中断标志位。
6、 用regmap_irq_get_virq获取中断号,用devm_request_threaded_irq注册对应的中断处理函数
7、充电器插拔产生的中断处理函数分别是rk817_plug_in_isr,rk817_plug_out_isr。
8、执行cat /proc/interrupts 查看硬件中断是否注册成功.
9、拔充电器的时候,对应的中断数有变化。
三、最后看一下插拔充电的器的log