-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
irq-imgpdc: add ImgTec PDC irqchip driver
Add irqchip driver for the ImgTec PowerDown Controller (PDC) as found in the TZ1090. The PDC has a number of general system wakeup (SysWake) interrupts (which would for example be connected to a power button or an external peripheral), and a number of peripheral interrupts which can also wake the system but are connected straight to specific low-power peripherals (such as RTC or Infrared). It has a single interrupt output for SysWakes, and individual interrupt outputs for each peripheral. The driver demuxes the SysWake interrupt line, and passes the peripheral interrupts straight through. It also handles the set_wake interrupt operation to enable/disable the appropriate wake event bits. Signed-off-by: James Hogan <james.hogan@imgtec.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Cc: Grant Likely <grant.likely@linaro.org> Cc: Rob Herring <rob.herring@calxeda.com> Cc: Rob Landley <rob@landley.net> Cc: linux-metag@vger.kernel.org Cc: linux-doc@vger.kernel.org Cc: devicetree-discuss@lists.ozlabs.org
- Loading branch information
James Hogan
committed
Aug 21, 2013
1 parent
d668d9e
commit b6ef916
Showing
4 changed files
with
610 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
* 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@0x02006000 { | ||
// 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 */>; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.