"Flags mismatch irq" register interrupt handler error
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的更多相关文章
- 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 ...
- Sharc FLAGS I/O Register(flag0~3)
Core FLAG Pins Multiplexing This module also includes the multiplexers of the FLAG0-3 pins shown ...
- Interrupt handler
1.处理器上的中断硬件关系图 2. 中断处理例程 3. 顶半部与底半部
- Linux kernel的中断子系统之(五):驱动申请中断API
返回目录:<ARM-Linux中断系统>. 总结:二重点区分了抢占式内核和非抢占式内核的区别:抢占式内核可以在内核空间进行抢占,通过对中断处理进行线程化可以提高Linux内核实时性. 三介 ...
- Linux中断 - 驱动申请中断API
一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的驱动的时候,如何向Linux Kernel中的中断子系统注册中断处理函数?为了理解注册中断的接口,必须了解一些中断线程化(threa ...
- Linux kernel中断子系统之(五):驱动申请中断API【转】
转自:http://www.wowotech.net/linux_kenrel/request_threaded_irq.html 一.前言 本文主要的议题是作为一个普通的驱动工程师,在撰写自己负责的 ...
- Linux内核实现透视---硬中断
Linux的中断处理是驱动中比较重要的一部分内容,要清楚具体的实现才能更好的理解而不是靠记住别人理解后总结的规律,所以今天就打算从从源码来学习一下Linux内核对于中断处理过程,设计中断子系统的初始化 ...
- 曾经的足迹——对Linux CAN驱动的理解(1)
在Ti的AM335X系列Cortext-A8芯片中,CAN模块采用D_CAN结构,实质即两路CAN接口. 在此分享一下对基于AM335X的Linux CAN驱动源码的理解.下面来分析它的驱动源码及其工 ...
- 中断API之setup_irq【转】
转自:https://blog.csdn.net/tiantao2012/article/details/78957472 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
随机推荐
- 第二章 IoC
什么是IoC 如何配置IOC Bean的生命周期 多环境配置 条件化配置Bean 什么是IOC? IOC有两层含义, 1.控制反转:将对象实例的创建与销毁的权限交给Spring容器管理,而不再是调用对 ...
- ismember matlab
ismember 判断A中的元素在B中有没有出现 LIA = ismember(A,B) for arrays A and B returns an array of the same size as ...
- 当提交的表单类型为multipart/form-data时 后台的dopost则不能使用 setCharset来进行解码了 需要单独对字段使用 原始的new String(req.name("ISO-8859-1"),"utf-8")形式解码了
当提交的表单类型为multipart/form-data时 后台的dopost则不能使用 setCharset来进行解码了 需要单独对字段使用 原始的new String(req.name(" ...
- poj3164-Command Network
给出平面上一些点,和连接它们的带权有向边,求把所有点连起来的最小总权值. 分析 由于这里边是有向的(unidirectional),所以这是经典的最小树形图问题,可以说是最小树形图的模板题. 代码 这 ...
- 【bzoj4715】囚人的旋律 dp
题目描述 给你一个 $1\sim n$ 的排列 $a_i$ ,若 $i\le j$ 且 $a_i\ge a_j$ ,则 $i$ 到 $j$ 有一条边.现在给你这张图,求既是独立集(任意两个选定点都没有 ...
- hdu 1392 Surround the Trees (凸包)
Surround the Trees Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 1193: [HNOI2006]马步距离
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 915[Submit][Statu ...
- [BZOJ4942] [NOI2017]整数
题目背景 在人类智慧的山巅,有着一台字长为1048576位(此数字与解题无关)的超级计算机,著名理论计算机科 学家P博士正用它进行各种研究.不幸的是,这天台风切断了电力系统,超级计算机 无法工作,而 ...
- Spark2.1.0之初识Spark
随着近十年互联网的迅猛发展,越来越多的人融入了互联网——利用搜索引擎查询词条或问题:社交圈子从现实搬到了Facebook.Twitter.微信等社交平台上:女孩子们现在少了逛街,多了在各大电商平台上的 ...
- HDU5696:区间的价值——题解
http://acm.hdu.edu.cn/showproblem.php?pid=5696 题面是中文的我就不粘贴过来了…… ———————————————————————— 这题垃圾题!!神tm卡 ...