其他分享
首页 > 其他分享> > c-request_irq中的dev_id参数是什么?

c-request_irq中的dev_id参数是什么?

作者:互联网

在函数声明中

int request_irq(unsigned int irq,
                irqreturn_t (*handler)(int, void *, struct pt_regs *),
                unsigned long irqflags,
                const char *devname,
                void *dev_id);

dev_id是“ in”参数还是“ out”参数?
我们从哪里得到这个号码?

解决方法:

Dev_id是输入参数,并且必须是全局唯一的.通常,设备数据结构的地址用作Dev_id.
如果不共享中断线,则其值为NULL.仅当共享中断线时,它才有意义.共享时,此参数唯一地标识共享IRQ上的中断处理程序.

但是最近为了更快地处理中断,Linux内核已移至request_threaded_irq.

例如,在Linux内核中,用于wm8903音频编解码器的i2c驱动程序以以下方式使用此API-使用request_threaded_irq()但使用dev_id相同.

设备结构为:

117 struct wm8903_priv {
118         struct wm8903_platform_data *pdata;
119         struct device *dev;
120         struct snd_soc_codec *codec;
121         struct regmap *regmap;
122 
123         int sysclk;
124         int irq;
125 
126         int fs;
127         int deemph;
128 
129         int dcs_pending;
130         int dcs_cache[4];
131 
132         /* Reference count */
133         int class_w_users;
134 
135         struct snd_soc_jack *mic_jack;
136         int mic_det;
137         int mic_short;
138         int mic_last_report;
139         int mic_delay;
140 
141 #ifdef CONFIG_GPIOLIB
142         struct gpio_chip gpio_chip;
143 #endif
144 };

处理程序定义一个指向该结构的指针:

2029         struct wm8903_priv *wm8903; //this is the dev_id parameter

然后调用request_threaded_irq(),

 ret = request_threaded_irq(i2c->irq, NULL, wm8903_irq,
2156                                            trigger | IRQF_ONESHOT,
2157                                            "wm8903", wm8903);

lxr code

标签:interrupt,embedded-linux,linux-device-driver,c-3,linux
来源: https://codeday.me/bug/20191122/2055957.html