2022-06-15 Android Linux 触发中断时根据i2c设备的中断寄存器调用不同的处理函数,regmap_add_irq_chip、regmap_irq_get_virq等

一、下面这款I2C设备,只有一个PMIC_INT_L中断pin脚,当接入充电器、拔插充电器、按键按下松开等都是由这个中断pin触发。这里提出一个需求,接入充电器的时候调用一个处理函数,拔插充电器的时候调用另外一个处理函数。如何做到呢?这里就会用到regmap_add_irq_chip、regmap_irq_get_virq等封装好的函数。

二、这里就来分析一下接入充电器、拔插充电器的处理过程。

   1、中断脚是连接到cpu的gpio0a3.

   2、dts 里面定义这个pin脚

   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

猜你喜欢

转载自blog.csdn.net/qq_37858386/article/details/125298804