Open Firmware and interrupt trigger

Robert Thorhuus robert.thorhuus at ericsson.com
Thu Feb 24 08:18:50 EST 2011


Hello!

I'm quite new to linux and Open Firmware.

I have a PPC processor. To this I have a Compact Flash connected. The Compact Flash is using external interrupt 0 of the processor.
In my DTS file I have specified a Compact Flash node and within it I have an interrupt element:
interrupt = <0 2 0 0>;

Here I thought the first number was the ID of the interrupt and the second one should be a number indicating how the interrupt is triggered (high, low, raising, falling).

The interrupt is active low.

But I could not get it to work which ever value I chose.

Looking in the code I found this in function __devinit pata_of_platform_probe in file pata_of_platform.c:

	ret = of_irq_to_resource(dn, 0, &irq_res);
	if (ret == NO_IRQ)
		irq_res.start = irq_res.end = 0;
	else
		irq_res.flags = 0;

Here "flags" will be zero whatever I do in the DTS. As far as I can understand the flags are defined in interrupts.h:
#define IRQF_TRIGGER_NONE       0x00000000
#define IRQF_TRIGGER_RISING     0x00000001
#define IRQF_TRIGGER_FALLING    0x00000002
#define IRQF_TRIGGER_HIGH       0x00000004
#define IRQF_TRIGGER_LOW        0x00000008

So modifying the code to:
	else
		irq_res.flags = 2;

I get it to work.

Could someone please explain to me why the "flags" parameter is hardcoded zero or just point in a good direction.

Thank you

BR
Robert


More information about the Linuxppc-dev mailing list