C 请求irq中的dev_id参数是什么?

C 请求irq中的dev_id参数是什么?,c,linux,linux-device-driver,embedded-linux,interrupt,C,Linux,Linux Device Driver,Embedded Linux,Interrupt,在函数声明中 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是“输入”参数还是“输出”参数? 我们从何处获

在函数声明中

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
是“输入”参数还是“输出”参数?
我们从何处获取此数字?

Dev\u id
是一个输入参数,必须是全局唯一的。通常,设备数据结构的地址用作
开发id

如果中断线未共享,则其值为
NULL
。只有在共享中断线时,它才具有相关性。共享时,此参数唯一标识共享IRQ上的
中断处理程序

但是最近为了更快地处理中断,linux内核已经转向了
request\u threaded\u irq

例如,在linux内核中,wm8903音频编解码器的i2c驱动程序以以下方式使用此API-使用
request\u threaded\u irq()
,但使用的开发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
然后调用
请求\u线程化\u irq
()


我更新了我的ans,请参阅详细信息。
 ret = request_threaded_irq(i2c->irq, NULL, wm8903_irq,
2156                                            trigger | IRQF_ONESHOT,
2157                                            "wm8903", wm8903);