162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright 2022 Unisoc Inc.
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/gpio/sprd,gpio-eic.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: Unisoc EIC controller
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Orson Zhai <orsonzhai@gmail.com>
1262306a36Sopenharmony_ci  - Baolin Wang <baolin.wang7@gmail.com>
1362306a36Sopenharmony_ci  - Chunyan Zhang <zhang.lyra@gmail.com>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cidescription: |
1662306a36Sopenharmony_ci  The EIC is the abbreviation of external interrupt controller, which can
1762306a36Sopenharmony_ci  be used only in input mode. The Spreadtrum platform has 2 EIC controllers,
1862306a36Sopenharmony_ci  one is in digital chip, and another one is in PMIC. The digital chip EIC
1962306a36Sopenharmony_ci  controller contains 4 sub-modules, i.e. EIC-debounce, EIC-latch, EIC-async and
2062306a36Sopenharmony_ci  EIC-sync. But the PMIC EIC controller contains only one EIC-debounce sub-
2162306a36Sopenharmony_ci  module.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci  The EIC-debounce sub-module provides up to 8 source input signal
2462306a36Sopenharmony_ci  connections. A debounce mechanism is used to capture the input signals'
2562306a36Sopenharmony_ci  stable status (millisecond resolution) and a single-trigger mechanism
2662306a36Sopenharmony_ci  is introduced into this sub-module to enhance the input event detection
2762306a36Sopenharmony_ci  reliability. In addition, this sub-module's clock can be shut off
2862306a36Sopenharmony_ci  automatically to reduce power dissipation. Moreover the debounce range
2962306a36Sopenharmony_ci  is from 1ms to 4s with a step size of 1ms. The input signal will be
3062306a36Sopenharmony_ci  ignored if it is asserted for less than 1 ms.
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci  The EIC-latch sub-module is used to latch some special power down signals
3362306a36Sopenharmony_ci  and generate interrupts, since the EIC-latch does not depend on the APB
3462306a36Sopenharmony_ci  clock to capture signals.
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci  The EIC-async sub-module uses a 32kHz clock to capture the short signals
3762306a36Sopenharmony_ci  (microsecond resolution) to generate interrupts by level or edge trigger.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  The EIC-sync is similar with GPIO's input function, which is a synchronized
4062306a36Sopenharmony_ci  signal input register. It can generate interrupts by level or edge trigger
4162306a36Sopenharmony_ci  when detecting input signals.
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciproperties:
4462306a36Sopenharmony_ci  compatible:
4562306a36Sopenharmony_ci    oneOf:
4662306a36Sopenharmony_ci      - enum:
4762306a36Sopenharmony_ci          - sprd,sc9860-eic-debounce
4862306a36Sopenharmony_ci          - sprd,sc9860-eic-latch
4962306a36Sopenharmony_ci          - sprd,sc9860-eic-async
5062306a36Sopenharmony_ci          - sprd,sc9860-eic-sync
5162306a36Sopenharmony_ci          - sprd,sc2731-eic
5262306a36Sopenharmony_ci      - items:
5362306a36Sopenharmony_ci          - enum:
5462306a36Sopenharmony_ci              - sprd,ums512-eic-debounce
5562306a36Sopenharmony_ci          - const: sprd,sc9860-eic-debounce
5662306a36Sopenharmony_ci      - items:
5762306a36Sopenharmony_ci          - enum:
5862306a36Sopenharmony_ci              - sprd,ums512-eic-latch
5962306a36Sopenharmony_ci          - const: sprd,sc9860-eic-latch
6062306a36Sopenharmony_ci      - items:
6162306a36Sopenharmony_ci          - enum:
6262306a36Sopenharmony_ci              - sprd,ums512-eic-async
6362306a36Sopenharmony_ci          - const: sprd,sc9860-eic-async
6462306a36Sopenharmony_ci      - items:
6562306a36Sopenharmony_ci          - enum:
6662306a36Sopenharmony_ci              - sprd,ums512-eic-sync
6762306a36Sopenharmony_ci          - const: sprd,sc9860-eic-sync
6862306a36Sopenharmony_ci      - items:
6962306a36Sopenharmony_ci          - enum:
7062306a36Sopenharmony_ci              - sprd,sc2730-eic
7162306a36Sopenharmony_ci          - const: sprd,sc2731-eic
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci  reg:
7462306a36Sopenharmony_ci    minItems: 1
7562306a36Sopenharmony_ci    maxItems: 3
7662306a36Sopenharmony_ci    description:
7762306a36Sopenharmony_ci      EIC controller can support maximum 3 banks which has its own
7862306a36Sopenharmony_ci      address base.
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci  gpio-controller: true
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci  "#gpio-cells":
8362306a36Sopenharmony_ci    const: 2
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci  interrupt-controller: true
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci  "#interrupt-cells":
8862306a36Sopenharmony_ci    const: 2
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_ci  interrupts:
9162306a36Sopenharmony_ci    maxItems: 1
9262306a36Sopenharmony_ci    description:
9362306a36Sopenharmony_ci      The interrupt shared by all GPIO lines for this controller.
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cirequired:
9662306a36Sopenharmony_ci  - compatible
9762306a36Sopenharmony_ci  - reg
9862306a36Sopenharmony_ci  - gpio-controller
9962306a36Sopenharmony_ci  - "#gpio-cells"
10062306a36Sopenharmony_ci  - interrupt-controller
10162306a36Sopenharmony_ci  - "#interrupt-cells"
10262306a36Sopenharmony_ci  - interrupts
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ciadditionalProperties: false
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ciexamples:
10762306a36Sopenharmony_ci  - |
10862306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci    soc {
11162306a36Sopenharmony_ci        #address-cells = <2>;
11262306a36Sopenharmony_ci        #size-cells = <2>;
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci        eic_debounce: gpio@40210000 {
11562306a36Sopenharmony_ci            compatible = "sprd,sc9860-eic-debounce";
11662306a36Sopenharmony_ci            reg = <0 0x40210000 0 0x80>;
11762306a36Sopenharmony_ci            gpio-controller;
11862306a36Sopenharmony_ci            #gpio-cells = <2>;
11962306a36Sopenharmony_ci            interrupt-controller;
12062306a36Sopenharmony_ci            #interrupt-cells = <2>;
12162306a36Sopenharmony_ci            interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
12262306a36Sopenharmony_ci        };
12362306a36Sopenharmony_ci    };
12462306a36Sopenharmony_ci...
125