Question about shared interrupts in devicetree

Mark Rutland mark.rutland at arm.com
Tue Apr 7 07:29:29 EDT 2015


On Sat, Apr 04, 2015 at 10:40:13PM +0100, Stefan Wahren wrote:
> Hi,

Hi,

> i'm currently working on drivers (regulator and power switch) for a power
> subsystem of a ARM9 processor (Freescale i.MX28). There are interrupts for the
> power subsystem which share the same interrupt line. This interrupt line is
> needed by both drivers (regulator and power switch).
> 
> Now the question what is the right way (tm) to specify the interrupt in the
> devicetree and fetch the irq number during driver probe?

If the interrupts are generated by the subsystem as a whole, then A
would be more correct. If you can read some shared register to determine
the particular sub-block which generated the interrupt, A would
certainly be the right way of describing the HW.

If the subsystem is just a logical grouping, and the two units generate
separate interrupts which simply get muxed together (with nothing
special done at the subsystem level), then B would seem more correct, as
the two units are effectively independent.

It really depends on way the HW is organised, and how the HW _could_ be
organised if reused, so this is a grey area generally.

It looks like it would be possible to support both styles if we need to
(by checking the node first, then its parent), if we go for one option
and later discover we need the other.

Thanks,
Mark.

> 
> Option A (define interrupt in parent node):
> 
>   power: power at 80044000 {
> 	compatible = "fsl,imx28-power", "syscon";
> 	reg = <0x80044000 0x2000>;
> 	interrupts = <6>;
> 
> 	reg_vddd: regulator at 1 {
> 		compatible = "fsl,imx28-vddd";
> 	};
> 
> 	pswitch: pswitch at 5 {
> 		compatible = "fsl,mxs-pswitch";
> 		linux,code = <116>;
> 	};
>   }
> 
>   int irq = irq_of_parse_and_map(parent, 0);
> 
> Option B (define interrupt for each child node):
> 
>   power: power at 80044000 {
> 	compatible = "fsl,imx28-power", "syscon";
> 	reg = <0x80044000 0x2000>;
> 
> 	reg_vddd: regulator at 1 {
> 		compatible = "fsl,imx28-vddd";
> 		interrupts = <6>;
> 	};
> 
> 	pswitch: pswitch at 5 {
> 		compatible = "fsl,mxs-pswitch";
> 		linux,code = <116>;
> 		interrupts = <6>;
> 	};
>   }
> 
>   int irq = platform_get_irq(pdev, 0);
> 
> Best regards
> Stefan
> --
> To unsubscribe from this list: send the line "unsubscribe devicetree" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 



More information about the Kernelnewbies mailing list