日期:2014-05-16  浏览次数:20711 次

关于S3C2410触摸屏与ADC驱动的冲突
我买了个开发板(2.4.18内核),本身带了触摸屏驱动,我想加上ADC驱动,但是当加上了ADC驱动,触摸屏不能用了。我好好的看这两个驱动,发现这两个驱动用了共同的中断号62。我到网上找了很久,有这样一种解决方案:
1、更改中断模式(一开始这两个驱动程序中才用的都是快速中断处理SA_INTERRUPT)成中断共享(SA_SHIRQ);
2、在中断服务程序的入口处,需要判断一下发生中断的设备。
具体的网页是:
http://topic.csdn.net/u/20080509/16/8dec027f-131b-496f-83e7-69474bb275a1.html
我也明白他的意思,但是当有中断发生时,怎么在驱动中判断是哪个设备产生的中断?应该怎么改我的驱动程序?

------解决方案--------------------
楼主,你贴代码吧,我告诉你怎么改。。
kernel 会调用所有注册在这个中断上的中断处理函数。
所以你需要自己在中断处理函数的入口判断一下, 这个中断是不是自己的,不是自己的就不要处理。
比如:

注册的时候:
irq = 4 ; //你自己的中断号
retval = request_irq(irq, fcpci_irq, IRQF_SHARED, "12345", 0);

处理的时候:

static irqreturn_t myirq (int irq, void *v, struct pt_regs *regs)
{
if(*v != 12345(自己随便定义一个唯一的标识) )
return IRQ_NONE;

}