summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/net/lantiq,pef2256.yaml
blob: 7da8370e2468925fcc5a0a83ab2adf909ab91793 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/lantiq,pef2256.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Lantiq PEF2256

maintainers:
  - Herve Codina <herve.codina@bootlin.com>

description:
  The Lantiq PEF2256, also known as Infineon PEF2256 or FALC56, is a framer and
  line interface component designed to fulfill all required interfacing between
  an analog E1/T1/J1 line and the digital PCM system highway/H.100 bus.

properties:
  compatible:
    items:
      - const: lantiq,pef2256

  reg:
    maxItems: 1

  clocks:
    items:
      - description: Master Clock
      - description: System Clock Receive
      - description: System Clock Transmit

  clock-names:
    items:
      - const: mclk
      - const: sclkr
      - const: sclkx

  interrupts:
    maxItems: 1

  reset-gpios:
    description:
      GPIO used to reset the device.
    maxItems: 1

  pinctrl:
    $ref: /schemas/pinctrl/pinctrl.yaml#
    additionalProperties: false

    patternProperties:
      '-pins$':
        type: object
        $ref: /schemas/pinctrl/pinmux-node.yaml#
        additionalProperties: false

        properties:
          pins:
            enum: [ RPA, RPB, RPC, RPD, XPA, XPB, XPC, XPD ]

          function:
            enum: [ SYPR, RFM, RFMB, RSIGM, RSIG, DLR, FREEZE, RFSP, LOS,
                    SYPX, XFMS, XSIG, TCLK, XMFB, XSIGM, DLX, XCLK, XLT,
                    GPI, GPOH, GPOL ]

        required:
          - pins
          - function

  lantiq,data-rate-bps:
    enum: [2048000, 4096000, 8192000, 16384000]
    default: 2048000
    description:
      Data rate (bit per seconds) on the system highway.

  lantiq,clock-falling-edge:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Data is sent on falling edge of the clock (and received on the rising
      edge). If 'clock-falling-edge' is not present, data is sent on the
      rising edge (and received on the falling edge).

  lantiq,channel-phase:
    $ref: /schemas/types.yaml#/definitions/uint32
    enum: [0, 1, 2, 3, 4, 5, 6, 7]
    default: 0
    description: |
      The pef2256 delivers a full frame (32 8-bit time-slots in E1 and 24 8-bit
      time-slots 8 8-bit signaling in E1/J1) every 125us. This lead to a data
      rate of 2048000 bit/s. When lantiq,data-rate-bps is more than 2048000
      bit/s, the data (all 32 8-bit) present in the frame are interleave with
      unused time-slots. The lantiq,channel-phase property allows to set the
      correct alignment of the interleave mechanism.
      For instance, suppose lantiq,data-rate-bps = 8192000 (ie 4*2048000), and
      lantiq,channel-phase = 2, the interleave schema with unused time-slots
      (nu) and used time-slots (XX) for TSi is
        nu nu XX nu nu nu XX nu nu nu XX nu
        <-- TSi --> <- TSi+1 -> <- TSi+2 ->
      With lantiq,data-rate-bps = 8192000, and lantiq,channel-phase = 1, the
      interleave schema is
        nu XX nu nu nu XX nu nu nu XX nu nu
        <-- TSi --> <- TSi+1 -> <- TSi+2 ->
      With lantiq,data-rate-bps = 4096000 (ie 2*2048000), and
      lantiq,channel-phase = 1, the interleave schema is
        nu    XX    nu    XX    nu    XX
        <-- TSi --> <- TSi+1 -> <- TSi+2 ->

patternProperties:
  '^codec(-([0-9]|[1-2][0-9]|3[0-1]))?$':
    type: object
    $ref: /schemas/sound/dai-common.yaml
    unevaluatedProperties: false
    description:
      Codec provided by the pef2256. This codec allows to use some of the PCM
      system highway time-slots as audio channels to transport audio data over
      the E1/T1/J1 lines.
      The time-slots used by the codec must be set and so, the properties
      'dai-tdm-slot-num', 'dai-tdm-slot-width', 'dai-tdm-slot-tx-mask' and
      'dai-tdm-slot-rx-mask' must be present in the sound card node for
      sub-nodes that involve the codec. The codec uses 8-bit time-slots.
      'dai-tdm-tdm-slot-with' must be set to 8.
      The tx and rx masks define the pef2256 time-slots assigned to the codec.

    properties:
      compatible:
        const: lantiq,pef2256-codec

      '#sound-dai-cells':
        const: 0

    required:
      - compatible
      - '#sound-dai-cells'

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - interrupts

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    pef2256: framer@2000000 {
      compatible = "lantiq,pef2256";
      reg = <0x2000000 0x100>;
      interrupts = <8 IRQ_TYPE_LEVEL_LOW>;
      interrupt-parent = <&intc>;
      clocks = <&clk_mclk>, <&clk_sclkr>, <&clk_sclkx>;
      clock-names = "mclk", "sclkr", "sclkx";
      reset-gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
      lantiq,data-rate-bps = <4096000>;

      pinctrl {
        pef2256_rpa_sypr: rpa-pins {
          pins = "RPA";
          function = "SYPR";
        };
        pef2256_xpa_sypx: xpa-pins {
          pins = "XPA";
          function = "SYPX";
        };
      };

      pef2256_codec0: codec-0 {
        compatible = "lantiq,pef2256-codec";
        #sound-dai-cells = <0>;
        sound-name-prefix = "PEF2256_0";
      };

      pef2256_codec1: codec-1 {
        compatible = "lantiq,pef2256-codec";
        #sound-dai-cells = <0>;
        sound-name-prefix = "PEF2256_1";
      };
    };

    sound {
      compatible = "simple-audio-card";
      #address-cells = <1>;
      #size-cells = <0>;
      simple-audio-card,dai-link@0 { /* CPU DAI1 - pef2256 codec 1 */
        reg = <0>;
        cpu {
          sound-dai = <&cpu_dai1>;
        };
        codec {
          sound-dai = <&pef2256_codec0>;
          dai-tdm-slot-num = <4>;
          dai-tdm-slot-width = <8>;
          /* TS 1, 2, 3, 4 */
          dai-tdm-slot-tx-mask = <0 1 1 1 1>;
          dai-tdm-slot-rx-mask = <0 1 1 1 1>;
        };
      };
      simple-audio-card,dai-link@1 { /* CPU DAI2 - pef2256 codec 2 */
        reg = <1>;
        cpu {
          sound-dai = <&cpu_dai2>;
        };
        codec {
          sound-dai = <&pef2256_codec1>;
          dai-tdm-slot-num = <4>;
          dai-tdm-slot-width = <8>;
          /* TS 5, 6, 7, 8 */
          dai-tdm-slot-tx-mask = <0 0 0 0 0 1 1 1 1>;
          dai-tdm-slot-rx-mask = <0 0 0 0 0 1 1 1 1>;
        };
      };
    };