定义文件:drivers\base\platform.c 一、调用流程 中断号获取函数platform_get_irq()调用流程如下: platform_get_irq()->of_irq_get()->of_irq_parse_one()## 解析dts中中断相关属性,填充结构体of_phandle_args中的args[]参数irq_create_of_mapping()->of_phandle_args_to_fwspec()## 将of_phandle_args-...
中断号获取函数platform_get_irq()调用流程如下: platform_get_irq()-> of_irq_get()-> of_irq_parse_one() ## 解析dts中中断相关属性,填充结构体of_phandle_args中的args[]参数 irq_create_of_mapping()-> of_phandle_args_to_fwspec() ## 将of_phandle_args->args[]赋值给fwspec->param[],给tran...
1)、irq:要申请的中断号,可通过platform_get_irq()获取,见“Linux内核中断之获取中断号”。 2)、handler:中断处理函数,发生中断时,先处理中断处理函数,然后返回IRQ_WAKE_THREAD唤醒中断处理线程。中断处理函数尽可能简单。 中断处理函数定义:typedef irqreturn_t (*irq_handler_t)(int, void *); 中断返回值如下...
驱动中通常会使用platform_get_irq或irq_of_parse_and_map接口,去根据设备树的信息去创建映射关系(硬件中断号到linux irq中断号映射); struct irq_domain用于完成映射工作,因此在irq_create_fwspec_mapping接口中,会先去找到匹配的irq domain,再去回调该irq domain中的函数集,通常irq domain都是在中断控制器驱动中初...
/* 通过平台设备platform_device获得IRQ * platform_get_irq其实是调用platform_get_resource(dev, IORESOURCE_IRQ, num) */ irq = platform_get_irq(pdev, 0); if(irq < 0) { dev_err(&pdev->dev,"no irq for device\n"); return-ENOENT; ...
#include<linux/platform_device.h>intplatform_get_irq(structplatform_device*dev,unsignedintnum); 例,在arch/arm/mach-at91/board-sam9261ek.c板文件中,为DM9000网卡定义了如下resource: staticstructresourcedm9000_resource[]={[0]={.start=AT91_CHIPSELECT_2,.end=AT91_CHIPSELECT_2+3,.flags=IORESOURCE_...
platform_match_id函数中第一个参数为驱动提供的id_table,第二个参数则是待匹配的平台设备。当待匹配的平台设备的name字段的值等于驱动提供的id_table中的值时,会将当前匹配的项赋值给platform_device中的id_entry,返回一个非空指针。若没有成功匹配,则返回空指针。 倘若我们的驱动没有提供前三种方式的其中一种,...
extern int platform_get_irq_byname(struct platform_device *, char *); extern int platform_add_devices(struct platform_device **, int); extern struct platform_device *platform_device_register_simple(char *, unsigned int, struct resource *, unsigned int); ...
调用platform_get_irq()为设备分配中断号: 在usb_add_hcd()中会调用usb_hcd_request_irqs(): 从上图可知,其会调用request_irq()这个重磅函数为ohci host控制器分配中断,中断处理函数为usb_hcd_irq (): irqreturn_t usb_hcd_irq (int irq, void *__hcd) ...
unsigned long flags; //定义资源的类型,比如MEM,IO,IRQ,DMA类型 struct resource *parent, *sibling, *child; //资源链表指针 }; 通过调用函数platform_add_devices()向系统中添加该设备了,该函数内部调用platform_device_register( )进行设备注册。要注意的是,这里的platform_device设备的注册过程必须在相应设备驱...