Question :

When you see the log "Flags mismatch irq ............", maybe you use the same irq number to register different interrupt handler .

irq number ---> handler_1

|

|--> handler_2

|

|--> handler_3

|

|--> handler_4

log

01-01 00:00:17.887 I/SMBCHG  (    0): ovp_handler_init: chip->cd_ac_acok_n_gpio_irq = 101
01-01 00:00:17.893 E/genirq ( 0): Flags mismatch irq 101. 00002003 (cd_ac_acok_n) vs. 00002003 (cd_acok_n_irq_1)
01-01 00:00:17.902 I/SMBCHG ( 0): ovp_handler_init: request irq cd_ac_acok_nerror.
void xxx_init(void)
{
...
...
chip->cd_ac_acok_n_gpio_irq = gpio_to_irq(chip->cd_ac_acok_n_gpio_number);
pr_err("chip->cd_ac_acok_n_gpio_irq = %d\n", chip->cd_ac_acok_n_gpio_irq);
rc = request_irq(chip->cd_ac_acok_n_gpio_irq,
cd_ac_acok_n_gpio_isr,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
"cd_acok_n_irq_1",
chip);
...
...
}
void yyy_init(void)
{
...
...
rc = request_irq(chip->cd_ac_acok_n_gpio_irq
handler_name,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
"cd_ac_acok_n",
chip);
...
...
}
...
...
/*
* Can't share interrupts unless both agree to and are
* the same type (level, edge, polarity). So both flag
* fields must have IRQF_SHARED set and the bits which
* set the trigger type must match. Also all must
* agree on ONESHOT.
*/
if (!((old->flags & new->flags) & IRQF_SHARED) ||
((old->flags ^ new->flags) & IRQF_TRIGGER_MASK) ||
((old->flags ^ new->flags) & IRQF_ONESHOT))
goto mismatch;
...
...
mismatch:
if (!(new->flags & IRQF_PROBE_SHARED)) {
pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n",
irq, new->flags, new->name, old->flags, old->name);
#ifdef CONFIG_DEBUG_SHIRQ
dump_stack();
#endif
}
...
...

android/kernel/msm-3.18/kernel/irq/manage.c

Solve :

If you want to use the same irq number to register different interrupt handler, please use IRQ_SHARED flags.

void xxx_init(void)
{
...
...
chip->cd_ac_acok_n_gpio_irq = gpio_to_irq(chip->cd_ac_acok_n_gpio_number);
pr_err("chip->cd_ac_acok_n_gpio_irq = %d\n", chip->cd_ac_acok_n_gpio_irq);
rc = request_irq(chip->cd_ac_acok_n_gpio_irq, cd_ac_acok_n_gpio_isr,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT | IRQF_SHARED ,
"cd_acok_n_irq_1",
chip);
...
...
}
void yyy_init(void)
{
...
...
rc = request_irq(chip->cd_ac_acok_n_gpio_irq
handler_name,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT | IRQF_SHARED,
"cd_ac_acok_n",
chip);
...
...
}

Extension 1 :

If you register isr successful, the system has related information in /proc/interrupts

adb root
adb shell
cat /proc/interrupts

The first column is irq number.

The second ~ fifth column is the number of some cpu that execute isr.

The sixth ~ 7th is the source of hardware.

The 8th is isr or handler name.

The below code respond to the last row of the above picture

irq_number = gpio_to_irq(48);
rc = request_irq(irq_number, // 55
isr_1,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT | IRQ_SHARED,
"cd_acok_n_irq",
chip); rc = request_irq(irq_number, // 55
isr_2,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT | IRQ_SHARED,
"cd_acok_n",
chip);

Reference :

http://blog.51cto.com/noican/1355357

"Flags mismatch irq" register interrupt handler error的更多相关文章

  1. mysql-5.6.20主从同步错误之Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND

    mysql-5.6.20主从同步错误之Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND 方法一:  1.Error_code: 1032; ha ...

  2. Sharc FLAGS I/O Register(flag0~3)

    Core FLAG Pins Multiplexing     This module also includes the multiplexers of the FLAG0-3 pins shown ...

  3. Interrupt handler

    1.处理器上的中断硬件关系图 2. 中断处理例程 3. 顶半部与底半部

  4. Linux kernel的中断子系统之(五):驱动申请中断API

    返回目录:<ARM-Linux中断系统>. 总结:二重点区分了抢占式内核和非抢占式内核的区别:抢占式内核可以在内核空间进行抢占,通过对中断处理进行线程化可以提高Linux内核实时性. 三介 ...

  5. Linux中断 - 驱动申请中断API

    一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threa ...

  6. Linux kernel中断子系统之(五):驱动申请中断API【转】

    转自:http://www.wowotech.net/linux_kenrel/request_threaded_irq.html 一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的 ...

  7. Linux内核实现透视---硬中断

    Linux的中断处理是驱动中比较重要的一部分内容,要清楚具体的实现才能更好的理解而不是靠记住别人理解后总结的规律,所以今天就打算从从源码来学习一下Linux内核对于中断处理过程,设计中断子系统的初始化 ...

  8. 曾经的足迹——对Linux CAN驱动的理解(1)

    在Ti的AM335X系列Cortext-A8芯片中,CAN模块采用D_CAN结构,实质即两路CAN接口. 在此分享一下对基于AM335X的Linux CAN驱动源码的理解.下面来分析它的驱动源码及其工 ...

  9. 中断API之setup_irq【转】

    转自:https://blog.csdn.net/tiantao2012/article/details/78957472 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

随机推荐

  1. mysql(一) 关联查询的方式

    mysql做关联查询时,一般使用join....on.....的语法. 但还有其它两种语法形式,三者的主要区别在于书写形式,其余方面并无太多差异. 如下三种形式: select * from trad ...

  2. 第52天:offset家族、scroll家族和client家族的区别

    一.offset家族 1.offsetWidth offsetHeight offsetLeft offsetTop offsetParent共同组成了offset家族,用来获取元素尺寸. offse ...

  3. wpf 验证方法

    效果图,当放鼠标到文本框上会显示出错的提示.

  4. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇—transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  5. poj2018——Best Cow Fences

    Description Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each fie ...

  6. POJ1816:Wild Words——题解

    http://poj.org/problem?id=1816 比较麻烦的trie. 首先你需要选择针对n还是m建立trie,这里我选择了针对n. 那么就需要面临卡空间的问题. 这里提供了一种链式前向星 ...

  7. Mac安装mysqldb

    一. 安装mysql (一)下载地址 https://pan.baidu.com/s/1slw50LZ 安装成功后,在系统偏好设置里有MySQL图标,可以启动或关闭MySQL 二. Mysql roo ...

  8. android源码了解dex加载流程

    源码版本:4.4.4_r1 http://www.cnblogs.com/lanrenxinxin/p/4712224.html http://wangzhixian.org/Others/DexCl ...

  9. Spring源码解析-autowiring自动装配的实现

    IoC容器提供了自动依赖装配的方式,为应用IoC容器提供很大的方便.在自动配置中,不需要显式的去指定Bean属性,只需要配置autowiring属性,IoC容器会根据这个属性配置,使用反射的方式查找属 ...

  10. eclipse中支持python

    1. 启动eclipse,help-> Install New Software; 2. 点击add 3. 设置Repository name: pydev Location: http://p ...