Re: request_irq return errno 38
From: Vijay Nikam <hidden>
Date: 2009-02-12 10:51:59
Thanks for your replies ... I checked the irq.c and irq.h and found the prototype of irq_of_parse_and_map() and found from the comment that it is a wrapper function contains a chain of irq_map_one() and irq_create_mapping() ... It means that I can use irq_create_mapping() to know the virq also the same suggessted by michael ... what is the difference between these two i.e. irq_create_mapping() and irq_of_parse_and_map() ... I mean in usage what could be the difference ? ? ? If used the irq_of_parse_and_map() then the paraments I need to pass are device_node *dev and index irq_of_parse_and_map(struct device_node *dev, int index) ... then how I can pass the required information i.e. dev and index ? ? ? Also how I can read the device tree binary file ? ? ? Kindly please acknowledge ... thank you ... Kind Regards, Vijay Nikam On 2/12/09, Brad Boyer [off-list ref] wrote:
On Wed, Feb 11, 2009 at 03:43:26PM +0530, Vijay Nikam wrote:quoted
I read in LDD book, they give directly irq no. they have given parallel port example, here they have set or said irq no. defaults to 7 and they have not done any irq_mapping so what is the difference ? ? ? I mean how I should know when to use irq_mapping and when not ? ? ? Also is it some difference between writng drivers on embedded Linux level and Linux PC (i386) ? ? ?The basic request_irq() function is generic, but the value of the arguments (especially the number for the IRQ line) is architecture specific in many ways. This is one difference between the i386 code and the powerpc code inside Linux. Most i386 hardware is standard PC hardware with very clearly defined interrupt sources. Because of this, the mapping from the numeric IRQ value to a real hardware interrupt source is defined pretty clearly. The powerpc architecture code has to support almost arbitrarily complex hardware, and the embedded world is the source of most of the complexity. Because of this, the powerpc code has to dynamically allocate those numeric IRQ sources and tie them to a specific hardware interrupt. There is functionality to take the information from your device tree and convert it to a virtual IRQ. That happens automatically for some types of devices like PCI cards, but your driver may have to do that mapping itself in other cases. I believe the appropriate API for this is the function irq_of_parse_and_map(). It takes a device node and index into the interrupt list for that device and gives a virtual IRQ number. Brad Boyer flar@allandria.com