| * ImgTec Powerdown Controller (PDC) Interrupt Controller Binding |
| |
| This binding specifies what properties must be available in the device tree |
| representation of a PDC IRQ controller. This has a number of input interrupt |
| lines which can wake the system, and are passed on through output interrupt |
| lines. |
| |
| Required properties: |
| |
| - compatible: Specifies the compatibility list for the interrupt controller. |
| The type shall be <string> and the value shall include "img,pdc-intc". |
| |
| - reg: Specifies the base PDC physical address(s) and size(s) of the |
| addressable register space. The type shall be <prop-encoded-array>. |
| |
| - interrupt-controller: The presence of this property identifies the node |
| as an interrupt controller. No property value shall be defined. |
| |
| - #interrupt-cells: Specifies the number of cells needed to encode an |
| interrupt source. The type shall be a <u32> and the value shall be 2. |
| |
| - num-perips: Number of waking peripherals. |
| |
| - num-syswakes: Number of SysWake inputs. |
| |
| - interrupts: List of interrupt specifiers. The first specifier shall be the |
| shared SysWake interrupt, and remaining specifies shall be PDC peripheral |
| interrupts in order. |
| |
| * Interrupt Specifier Definition |
| |
| Interrupt specifiers consists of 2 cells encoded as follows: |
| |
| - <1st-cell>: The interrupt-number that identifies the interrupt source. |
| 0-7: Peripheral interrupts |
| 8-15: SysWake interrupts |
| |
| - <2nd-cell>: The level-sense information, encoded using the Linux interrupt |
| flags as follows (only 4 valid for peripheral interrupts): |
| 0 = none (decided by software) |
| 1 = low-to-high edge triggered |
| 2 = high-to-low edge triggered |
| 3 = both edge triggered |
| 4 = active-high level-sensitive (required for perip irqs) |
| 8 = active-low level-sensitive |
| |
| * Examples |
| |
| Example 1: |
| |
| /* |
| * TZ1090 PDC block |
| */ |
| pdc: pdc@02006000 { |
| // This is an interrupt controller node. |
| interrupt-controller; |
| |
| // Three cells to encode interrupt sources. |
| #interrupt-cells = <2>; |
| |
| // Offset address of 0x02006000 and size of 0x1000. |
| reg = <0x02006000 0x1000>; |
| |
| // Compatible with Meta hardware trigger block. |
| compatible = "img,pdc-intc"; |
| |
| // Three peripherals are connected. |
| num-perips = <3>; |
| |
| // Four SysWakes are connected. |
| num-syswakes = <4>; |
| |
| interrupts = <18 4 /* level */>, /* Syswakes */ |
| <30 4 /* level */>, /* Peripheral 0 (RTC) */ |
| <29 4 /* level */>, /* Peripheral 1 (IR) */ |
| <31 4 /* level */>; /* Peripheral 2 (WDT) */ |
| }; |
| |
| Example 2: |
| |
| /* |
| * An SoC peripheral that is wired through the PDC. |
| */ |
| rtc0 { |
| // The interrupt controller that this device is wired to. |
| interrupt-parent = <&pdc>; |
| |
| // Interrupt source Peripheral 0 |
| interrupts = <0 /* Peripheral 0 (RTC) */ |
| 4> /* IRQ_TYPE_LEVEL_HIGH */ |
| }; |
| |
| Example 3: |
| |
| /* |
| * An interrupt generating device that is wired to a SysWake pin. |
| */ |
| touchscreen0 { |
| // The interrupt controller that this device is wired to. |
| interrupt-parent = <&pdc>; |
| |
| // Interrupt source SysWake 0 that is active-low level-sensitive |
| interrupts = <8 /* SysWake0 */ |
| 8 /* IRQ_TYPE_LEVEL_LOW */>; |
| }; |