Skip to content

Commit

Permalink
Merge tag 'pef2256-framer' of git://git.kernel.org/pub/scm/linux/kern…
Browse files Browse the repository at this point in the history
…el/git/linusw/linux-pinctrl

Linus Walleij says:

====================
Immutable tag for the PEF2256 framer

* tag 'pef2256-framer' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl:
  MAINTAINERS: Add the Lantiq PEF2256 driver entry
  pinctrl: Add support for the Lantic PEF2256 pinmux
  net: wan: framer: Add support for the Lantiq PEF2256 framer
  dt-bindings: net: Add the Lantiq PEF2256 E1/T1/J1 framer
  net: wan: Add framer framework support
====================

Link: https://lore.kernel.org/all/CACRpkdYT1J7noFUhObFgfA60XQAfL4rb=knEmWS__TKKtCMh7Q@mail.gmail.com/
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Jakub Kicinski committed Dec 12, 2023
2 parents 2a62644 + 1e95d20 commit bbc49c7
Show file tree
Hide file tree
Showing 16 changed files with 3,098 additions and 0 deletions.
213 changes: 213 additions & 0 deletions Documentation/devicetree/bindings/net/lantiq,pef2256.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,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>;
};
};
};
8 changes: 8 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -12013,6 +12013,14 @@ S: Maintained
F: arch/mips/lantiq
F: drivers/soc/lantiq

LANTIQ PEF2256 DRIVER
M: Herve Codina <herve.codina@bootlin.com>
S: Maintained
F: Documentation/devicetree/bindings/net/lantiq,pef2256.yaml
F: drivers/net/wan/framer/pef2256/
F: drivers/pinctrl/pinctrl-pef2256.c
F: include/linux/framer/pef2256.h

LASI 53c700 driver for PARISC
M: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
L: linux-scsi@vger.kernel.org
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wan/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ config HDLC_X25
comment "X.25/LAPB support is disabled"
depends on HDLC && (LAPB!=m || HDLC!=m) && LAPB!=y

source "drivers/net/wan/framer/Kconfig"

config PCI200SYN
tristate "Goramo PCI200SYN support"
depends on HDLC && PCI
Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wan/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ obj-$(CONFIG_HDLC_FR) += hdlc_fr.o
obj-$(CONFIG_HDLC_PPP) += hdlc_ppp.o
obj-$(CONFIG_HDLC_X25) += hdlc_x25.o

obj-y += framer/

obj-$(CONFIG_FARSYNC) += farsync.o

obj-$(CONFIG_LAPBETHER) += lapbether.o
Expand Down
42 changes: 42 additions & 0 deletions drivers/net/wan/framer/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# SPDX-License-Identifier: GPL-2.0-only
#
# FRAMER
#

menuconfig FRAMER
tristate "Framer Subsystem"
help
A framer is a component in charge of an E1/T1 line interface.
Connected usually to a TDM bus, it converts TDM frames to/from E1/T1
frames. It also provides information related to the E1/T1 line.
Used with HDLC, the network can be reached through the E1/T1 line.

This framework is designed to provide a generic interface for framer
devices present in the kernel. This layer will have the generic
API by which framer drivers can create framer using the framer
framework and framer users can obtain reference to the framer.
All the users of this framework should select this config.

if FRAMER

config GENERIC_FRAMER
bool

config FRAMER_PEF2256
tristate "Lantiq PEF2256"
depends on OF
depends on HAS_IOMEM
select GENERIC_FRAMER
select MFD_CORE
select REGMAP_MMIO
help
Enable support for the Lantiq PEF2256 (FALC56) framer.
The PEF2256 is a framer and line interface between analog E1/T1/J1
line and a digital PCM bus.

If unsure, say N.

To compile this driver as a module, choose M here: the
module will be called framer-pef2256.

endif # FRAMER
7 changes: 7 additions & 0 deletions drivers/net/wan/framer/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
#
# Makefile for the framer drivers.
#

obj-$(CONFIG_GENERIC_FRAMER) += framer-core.o
obj-$(CONFIG_FRAMER_PEF2256) += pef2256/
Loading

0 comments on commit bbc49c7

Please sign in to comment.