Re: Question about shared interrupts in devicetree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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@80044000 {
> 	compatible = "fsl,imx28-power", "syscon";
> 	reg = <0x80044000 0x2000>;
> 	interrupts = <6>;
> 
> 	reg_vddd: regulator@1 {
> 		compatible = "fsl,imx28-vddd";
> 	};
> 
> 	pswitch: pswitch@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@80044000 {
> 	compatible = "fsl,imx28-power", "syscon";
> 	reg = <0x80044000 0x2000>;
> 
> 	reg_vddd: regulator@1 {
> 		compatible = "fsl,imx28-vddd";
> 		interrupts = <6>;
> 	};
> 
> 	pswitch: pswitch@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@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]
  Powered by Linux