retval= irq_chip_pm_get(&desc->irq_data);if(retval <0)returnretval; #核心代码,设置irq对应的irqaction*act retval=__setup_irq(irq, desc, act);if(retval) irq_chip_pm_put(&desc->irq_data);returnretval; }staticint__setup_irq(unsignedintirq,structirq_desc *desc,structirqaction *new) {...
irq_chip_pm_put(&desc->irq_data); return retval; } static int __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) { struct irqaction *old, **old_ptr; unsigned long flags, thread_mask = 0; int ret, nested, shared = 0; #中断描述符为null,则退出 if (!
machine driver的初始化过程会包括中断系统的初始化,在machine driver的中断初始化函数中,会调用本文定义的这些接口对各个IRQ number对应的中断描述符进行irq chip、触发类型的设定。 Notes:根据中断号,irq_to_desc返回irq_desc;根据irq_desc,irq_desc_get_chip返回irq_chip,irq_desc_get_irq_data返回irq_data。 ir...
(1)调用中断描述符的底层irq chip driver进行mask,ack等callback函数,进行interrupt flow control。 (2)调用该中断描述符上的action list中的specific handler(我们用这个术语来区分具体中断handler和high level的handler)。这个步骤不一定会执行,这是和中断描述符的当前状态相关,实际上,interrupt flow control是软件(设...
(1)调用中断描述符的底层irq chip driver进行mask,ack等callback函数,进行interrupt flow control。 (2)调用该中断描述符上的action list中的specific handler(我们用这个术语来区分具体中断handler和high level的handler)。这个步骤不一定会执行,这是和中断描述符的当前状态相关,实际上,interrupt flow control是软件(设...
The IRQ chip interface defines only two callbacks which are executed in non-atomic contex - irq_bus_lock/irq_bus_sync_unlock, so lets move PM runtime calls there. Tested-by: Tony Lindgren <t...@atomide.com> Tested-by: Austin Schuh <aus...@peloton-tech.com> ...
2009 retval等于q_chip_pm_get - Enable power for an IRQ chip*@data: Pointer to interrupt specific data* Enable the power to the IRQ chip referenced by the interrupt data* structure.2010 如果retval小于0则 2011 释放内存 2012 返回:retval 2015 retval等于注册中断 ...
}staticintget_key(void){intkey =0;if(!is_key_buf_empty()){ key = g_keys[r]; r = NEXT_POS(r); }returnkey; }staticDECLARE_WAIT_QUEUE_HEAD(gpio_key_wait);staticvoidkey_timer_expire(unsignedlongdata){structgpio_key*gpio_key=data;intval;intkey; ...
irq_start); irq_base = irq_start; } gic->domain = irq_domain_add_legacy(node, gic_irqs, irq_base, hwirq_base, &gic_irq_domain_ops, gic); if (WARN_ON(!gic->domain)) return; gic_chip.flags |= gic_arch_extn.flags; gic_dist_init(gic); gic_cpu_init(gic); gic_pm_init(gic...
pm_runtime_get_sync(data->dev); }static void imx_irqsteer_irq_bus_sync_unlock(struct irq_data *d) { struct irqsteer_data *data = d->chip_data;pm_runtime_put_autosuspend(data->dev); }static const struct irq_chip imx_irqsteer_irq_chip = {...