Message ID | 20230912081527.208499-1-herve.codina@bootlin.com |
---|---|
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9ecd:0:b0:3f2:4152:657d with SMTP id t13csp392488vqx; Tue, 12 Sep 2023 06:07:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHOodpO6vAUTHS2D/uYSBU42LjU3GXHjI2eP3MU88IppU1qrh4/kAlBLrv9YmZ8v5Y9BLud X-Received: by 2002:a05:6a00:2290:b0:68e:4a09:2d29 with SMTP id f16-20020a056a00229000b0068e4a092d29mr12770282pfe.22.1694524023343; Tue, 12 Sep 2023 06:07:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694524023; cv=none; d=google.com; s=arc-20160816; b=W5Tc6QNyCy+YWhWmpWkKrM637+SB7PEe2WhnDBr5agokDyzi5EL1okP5ODphyKcz4C Ne/GzJU0aCa47FEaghJxMq5vQM+9KmqgZOiVUVNS8yWuYJPJHeHyJsNZknTGGRmnv0kl K3uvywU3jmnzCdUKvEqJt6ISb/tbYJT09CD8YGEDFIUQIOSdxmWGvrz5M4VaYoE20dK6 kXoBFgS16igj46KzRYjZ88T6RnCATrkrEC6X+MZeGT67eq2hAnztiyVSchAI/lsjmgw0 y0Twra2ibMNTsEgPwkkbUZEtnYlSO1+mrtG7Bu8s7cfLgSDm98a+xPOKWh+1MNZQRwmv ZDRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=NNWFLazESxtDfZ0O18bgdLpVRYNM1p8Orh6JoHPD9OQ=; fh=5rCQDomVZxLXb7yR2oN4iSS3zxUnzGJP2HoQaRzhQu0=; b=XDA+4C4x6zDKrRUBGax9MSxEvYFMNVay01UY08M6xBqo7HNchQ8FZqIUDwfaluBvw+ D+Uob6iftapCTwpvlLqO5g/rmf+19UYxnq/MCHsvZH6JnwkBEQF5XmTHyfAF7iZer6vV D7VB+nZ/vwAG5AzxZfwfTMez/X5mdUISzMw2FlDHsjtZSWNwv0/NGvTRrCQ/8G6AAzX7 RLk6l3xm6C8LaWZDnk+ZunGhYoVMxsNJMVYHzEEjDa85eLCQMNSqZb18dwH6Ekj1yLEg DFwZ0lOyxfyX4XfOdQQPG4lcF9waahfJgMOuP6ynr1ilQYCm+Qn36V6v0uHTreqvZAxq U3Tg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=YKngppwd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id q15-20020a056a00150f00b0068fbbef790bsi4098809pfu.297.2023.09.12.06.07.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Sep 2023 06:07:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=YKngppwd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id EA53C8037975; Tue, 12 Sep 2023 01:27:59 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232634AbjILI1q (ORCPT <rfc822;pwkd43@gmail.com> + 38 others); Tue, 12 Sep 2023 04:27:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52234 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231509AbjILI1n (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Tue, 12 Sep 2023 04:27:43 -0400 Received: from relay1-d.mail.gandi.net (relay1-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::221]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7F06B9; Tue, 12 Sep 2023 01:27:38 -0700 (PDT) Received: by mail.gandi.net (Postfix) with ESMTPA id AF29F240016; Tue, 12 Sep 2023 08:15:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1694507256; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NNWFLazESxtDfZ0O18bgdLpVRYNM1p8Orh6JoHPD9OQ=; b=YKngppwdh40YfWiGLJAS/KGVy3lcyyimFa5IhNF2BFpY76MQv7PcAngjWD5emB/NpPdZVs XuFHa7GDsZeCDN4VtR1DBdOhhQMg7F0sKFJAb1MDA7SiI1aMS1uljTxpDobJ34HUMqgBjt FHOxQNRcNFQVzbTLPwBJsz8bn9G8RLA4WP+TyyXemwpqd4wrtR0zPRPD7LXQ8thvcbVeuZ ExcT1Fcq50Uh6D73l3yfs6AqzdGcuV9dXnjY+Tgn2jvV+Rk9i1RjFps/RP9BqIFKYwuwfR kO8gTvwFMC5ooqNP3G2Onc78ybIs69RViNXNP4dTCVaFKEEPSvcfTmBa6iIIVg== From: Herve Codina <herve.codina@bootlin.com> To: Herve Codina <herve.codina@bootlin.com>, "David S. Miller" <davem@davemloft.net>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, Andrew Lunn <andrew@lunn.ch>, Rob Herring <robh+dt@kernel.org>, Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>, Conor Dooley <conor+dt@kernel.org>, Lee Jones <lee@kernel.org>, Linus Walleij <linus.walleij@linaro.org>, Qiang Zhao <qiang.zhao@nxp.com>, Li Yang <leoyang.li@nxp.com>, Liam Girdwood <lgirdwood@gmail.com>, Mark Brown <broonie@kernel.org>, Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>, Shengjiu Wang <shengjiu.wang@gmail.com>, Xiubo Li <Xiubo.Lee@gmail.com>, Fabio Estevam <festevam@gmail.com>, Nicolin Chen <nicoleotsuka@gmail.com>, Christophe Leroy <christophe.leroy@csgroup.eu>, Randy Dunlap <rdunlap@infradead.org> Cc: netdev@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, linux-arm-kernel@lists.infradead.org, alsa-devel@alsa-project.org, Simon Horman <horms@kernel.org>, Christophe JAILLET <christophe.jaillet@wanadoo.fr>, Thomas Petazzoni <thomas.petazzoni@bootlin.com> Subject: [PATCH v5 00/31] Add support for QMC HDLC, framer infrastructure and PEF2256 framer Date: Tue, 12 Sep 2023 10:14:51 +0200 Message-ID: <20230912081527.208499-1-herve.codina@bootlin.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-GND-Sasl: herve.codina@bootlin.com Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Tue, 12 Sep 2023 01:28:00 -0700 (PDT) X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1776837222348525935 X-GMAIL-MSGID: 1776837222348525935 |
Series |
Add support for QMC HDLC, framer infrastructure and PEF2256 framer
|
|
Message
Herve Codina
Sept. 12, 2023, 8:14 a.m. UTC
Hi, I have a system where I need to handle an HDLC interface and some audio data. The HDLC data are transferred using a TDM bus on which a PEF2256 (E1/T1 framer) is present. The PEF2256 transfers data from/to the TDM bus to/from the E1 line. This PEF2256 is connected to a PowerQUICC SoC for the control path and the TDM is connected to the SoC (QMC component) for the data path. From the QMC HDLC driver, I need to handle HDLC data using the QMC, carrier detection using the PEF2256 (E1 line carrier) and set/get some PEF2256 configuration. The QMC HDLC driver considers the PEF2256 as a generic framer. It performs operations that involve the PEF2256 through the generic framer API. The audio data are exchanged with the PEF2256 using a CPU DAI connected to the TDM bus through the QMC and the PEF2256 needs to be seen as a codec in order to be linked to the CPU DAI. The codec handles the carrier detection using the PEF2256 and reports the carrier state to the ALSA subsystem using the ASoC jack detection. The codec, even if instantiated by the PEF2256 driver, considers the PEF2256 as a generic framer. The generic framer has: - 2 consumers (QMC HDLC drv and codec) - 1 provider (PEF2256) So, the design is the following: +------------------+ +---------+ | QMC | <- TDM -> | PEF2256 | <-> E1 +---------+ | +-------------+ | | | | CPU DAI | <-data--> | QMC channel | | | | +---------+ | +-------------+ | | | +--------------+ | +-------------+ | | | | QMC HDLC drv | <-data--> | QMC channel | | | | +--------------+ | +-------------+ | | | ^ +------------------+ | | | +--------+ +-------------+ | | +-> | framer | <-> | PEF2256 drv | <- local bus ->| | | | | | +---------+ +-> | | | | | +--------+ | +-------+ | +-------------------> | codec | | | +-------+ | +-------------+ Further more, the TDM timeslots used by the QMC HDLC driver need to be configured at runtime (QMC dynamic timeslots). Several weeks ago, I sent two series related to this topic: - Add the Lantiq PEF2256 audio support [1] - RFC Add support for QMC HDLC and PHY [2] This current series is a rework of these two series taking into account feedbacks previously received. In order to implement all of this, I do the following: 1) Perform some fixes (patches 1, 2, 3, 4, 5, 6, 7) 2) Introduce the QMC HDLC driver (patches 8, 9, 10, 11) 3) Add QMC dynamic timeslot support (patches 12 - 22) 4) Add timeslots change support in QMC HDLC (patch 23) 5) Introduce framer infrastructure (patch 24) 6) Add PEF2256 framer provider (patches 25, 26, 27, 28, 29) 7) Add framer codec as a framer consumer (patch 30) 8) Add framer support as a framer consumer in QMC HDLC (patch 31) The series contains the full story and detailed modifications. If needed, the series can be split and/or commits can be squashed. Let me know. Compare to the previous iteration https://lore.kernel.org/linux-kernel/cover.1692376360.git.christophe.leroy@csgroup.eu/ This v5 series mainly: - Fixes the DT bindings - Adds QMC child devices support - Fixes typos and documentation Best regards, Hervé [1]: https://lore.kernel.org/all/20230417171601.74656-1-herve.codina@bootlin.com/ [2]: https://lore.kernel.org/all/20230323103154.264546-1-herve.codina@bootlin.com/ Changes v4 -> v5 - Patches 1 to 5 No changes - Patch 6 (new in v5) Fix QMC binding example - Patch 7 (new in v5) Add missing 'additionalProperties: false' - Patch 8 (new in v5, replace v4 patch 6) Add QMC HDLC properties in the QMC channel node Renamed the 'framer' property to 'fsl,framer' - Patch 9 (new in v5) Add support for QMC child devices - Patch 10 (patch 7 in v4) No changes - Patch 11 (patch 8 in v4) Remove fsl,qmc-hdlc.yaml (no more existing file) - Patches 12 to 22 (patches 9 to 19 in v4) No changes - Patch 23 (patch 20 in v4) Remove unused variable initializations Remove extra space - Patch 24 (patch 21 in v4) Improve Kconfig help text Fix variable declaration (reverse xmas tree) Fix typos and extra spaces Fix documentation issues raised by 'kernel-doc -none' Move of_node_put() and kfree() out of the mutex Replace ida_simple_{get,remove}() by ida_{alloc,free}() Support framer device-tree nodes without '#framer-cells' property - Patch 25 (patch 22 in v4) Fix $ref in the pinctrl subnode Remove '#framer-cells' property Add needed '|' - Patch 26 (patch 23 in v4) Fix a typo in the commit subject - Patches 27, 28, 29 (patch 24, 25, 26 in v4) No changes - Patch 30 (patch 27 in v4) Fix a typo in the commit log - Patch 31 (patch 28 in v4) Used 'fsl,framer' property name instead of 'framer' Changes v3 -> v4 - Patch 21 Fixes build failure with CONFIG_MODULES Changes v2 -> v3 - Patches 1, 2, 3, 4 Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - New patch Remove inline keyword from the existing registers accessors helpers - Patch 6 (patches 5, 27 in v2) Update the binding title Squash patch 27 - Patch 7 (patch 6 in v2) Remove the cast in netdev_to_qmc_hdlc() Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 8 (patch 7 in v2): No change - Patches 9, 10 (patches 8, 9 in v2) Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 11 (patch 10 in v2) Remove inline keyword from the introduced qmc_clrsetbits16() helper Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patches 12, 13, 14, 15, 16, 17, 18, 19, 20 Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 21 (patch 20 in v2) Remove unneeded framer NULL pointer check Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 22 (patch 21 in v2) Change sclkr and sclkx clocks description Remove the framer phandle property from the framer subnodes (ie. from framer-codec nodes) - Patch 23 (patch 22 in v2) Initialize 'disabled' variable at declaration Fix commit log Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 24 (patch 23 in v2) Remove inline keyword from the existing registers accessors helpers Use dev_warn_ratelimited() in default interrupt handler Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 25 (patch 24 in v2) Replace #include "linux/bitfield.h" by #include <linux/bitfield.h> Fold the pinctrl anonymous struct into the struct pef2256_pinctrl Update commit log Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 26 (patch 25 in v2) Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 27 (patch 26 in v2) Fix error message Changed the ch.max computation in framer_dai_hw_rule_channels_by_format() Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' - Patch 28 Add 'Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>' Changes v1 -> v2 - Patches 1, 2 (New in v2) Fix __iomem addresses declaration - Patch 19 (17 in v1) Fix a compilation warning - Patch 26 (24 in v1) Fix a typo in Kconfig file Fix issues raised by sparse (make C=1) Herve Codina (31): soc: fsl: cpm1: tsa: Fix __iomem addresses declaration soc: fsl: cpm1: qmc: Fix __iomem addresses declaration soc: fsl: cpm1: qmc: Fix rx channel reset soc: fsl: cpm1: qmc: Extend the API to provide Rx status soc: fsl: cpm1: qmc: Remove inline function specifiers dt-bindings: soc: fsl: cpm_qe: cpm1-scc-qmc: Fix example property name dt-bindings: soc: fsl: cpm_qe: cpm1-scc-qmc: Add 'additionalProperties: false' in child nodes dt-bindings: soc: fsl: cpm_qe: cpm1-scc-qmc: Add support for QMC HDLC soc: fsl: cpm1: qmc: Add support for child devices net: wan: Add support for QMC HDLC MAINTAINERS: Add the Freescale QMC HDLC driver entry soc: fsl: cpm1: qmc: Introduce available timeslots masks soc: fsl: cpm1: qmc: Rename qmc_setup_tsa* to qmc_init_tsa* soc: fsl: cpm1: qmc: Introduce qmc_chan_setup_tsa* soc: fsl: cpm1: qmc: Remove no more needed checks from qmc_check_chans() soc: fsl: cpm1: qmc: Check available timeslots in qmc_check_chans() soc: fsl: cpm1: qmc: Add support for disabling channel TSA entries soc: fsl: cpm1: qmc: Split Tx and Rx TSA entries setup soc: fsl: cpm1: qmc: Introduce is_tsa_64rxtx flag soc: fsl: cpm1: qmc: Handle timeslot entries at channel start() and stop() soc: fsl: cpm1: qmc: Remove timeslots handling from setup_chan() soc: fsl: cpm1: qmc: Introduce functions to change timeslots at runtime wan: qmc_hdlc: Add runtime timeslots changes support net: wan: Add framer framework support dt-bindings: net: Add the Lantiq PEF2256 E1/T1/J1 framer mfd: core: Ensure disabled devices are skipped without aborting net: wan: framer: Add support for the Lantiq PEF2256 framer pinctrl: Add support for the Lantic PEF2256 pinmux MAINTAINERS: Add the Lantiq PEF2256 driver entry ASoC: codecs: Add support for the framer codec net: wan: fsl_qmc_hdlc: Add framer support .../bindings/net/lantiq,pef2256.yaml | 214 +++++ .../soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml | 20 +- MAINTAINERS | 16 + drivers/mfd/mfd-core.c | 17 +- drivers/net/wan/Kconfig | 14 + drivers/net/wan/Makefile | 3 + drivers/net/wan/framer/Kconfig | 39 + drivers/net/wan/framer/Makefile | 7 + drivers/net/wan/framer/framer-core.c | 887 ++++++++++++++++++ drivers/net/wan/framer/pef2256/Makefile | 8 + drivers/net/wan/framer/pef2256/pef2256-regs.h | 250 +++++ drivers/net/wan/framer/pef2256/pef2256.c | 880 +++++++++++++++++ drivers/net/wan/fsl_qmc_hdlc.c | 820 ++++++++++++++++ drivers/pinctrl/Kconfig | 14 + drivers/pinctrl/Makefile | 1 + drivers/pinctrl/pinctrl-pef2256-regs.h | 65 ++ drivers/pinctrl/pinctrl-pef2256.c | 308 ++++++ drivers/soc/fsl/qe/qmc.c | 592 +++++++++--- drivers/soc/fsl/qe/tsa.c | 22 +- include/linux/framer/framer-provider.h | 194 ++++ include/linux/framer/framer.h | 205 ++++ include/linux/framer/pef2256.h | 31 + include/soc/fsl/qe/qmc.h | 27 +- sound/soc/codecs/Kconfig | 15 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/framer-codec.c | 413 ++++++++ sound/soc/fsl/fsl_qmc_audio.c | 2 +- 27 files changed, 4921 insertions(+), 145 deletions(-) create mode 100644 Documentation/devicetree/bindings/net/lantiq,pef2256.yaml create mode 100644 drivers/net/wan/framer/Kconfig create mode 100644 drivers/net/wan/framer/Makefile create mode 100644 drivers/net/wan/framer/framer-core.c create mode 100644 drivers/net/wan/framer/pef2256/Makefile create mode 100644 drivers/net/wan/framer/pef2256/pef2256-regs.h create mode 100644 drivers/net/wan/framer/pef2256/pef2256.c create mode 100644 drivers/net/wan/fsl_qmc_hdlc.c create mode 100644 drivers/pinctrl/pinctrl-pef2256-regs.h create mode 100644 drivers/pinctrl/pinctrl-pef2256.c create mode 100644 include/linux/framer/framer-provider.h create mode 100644 include/linux/framer/framer.h create mode 100644 include/linux/framer/pef2256.h create mode 100644 sound/soc/codecs/framer-codec.c
Comments
Hi Herve, thanks for your patch! On Tue, Sep 12, 2023 at 12:15 PM Herve Codina <herve.codina@bootlin.com> wrote: > The Lantiq PEF2256 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. > > This kind of component can be found in old telecommunication system. > It was used to digital transmission of many simultaneous telephone calls > by time-division multiplexing. Also using HDLC protocol, WAN networks > can be reached through the framer. > > This pinmux support handles the pin muxing part (pins RP(A..D) and pins > XP(A..D)) of the PEF2256. > > Signed-off-by: Herve Codina <herve.codina@bootlin.com> > Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Nice to see this as a proper pin control driver! > drivers/pinctrl/pinctrl-pef2256-regs.h | 65 ++++++ > drivers/pinctrl/pinctrl-pef2256.c | 308 +++++++++++++++++++++++++ Do you really need a separate header just for some registers? But it's a matter of taste so I'm not gonna complain if you want it this way. > +config PINCTRL_PEF2256 > + tristate "Lantiq PEF2256 (FALC56) pin controller driver" > + depends on OF && FRAMER_PEF2256 > + select PINMUX select PINCONF > + select GENERIC_PINCONF This brings it in implicitly but I prefer that you just select it. > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* I think SPDX mandates that you start the tag with C99 comments // SPDX-License-Identifier: GPL-2.0-only > + /* We map 1 group <-> 1 pin */ Also known as "the qualcomm trick", but hey: it's fine. > +static int pef2256_register_pinctrl(struct pef2256_pinctrl *pef2256) > +{ > + struct pinctrl_dev *pctrl; > + > + pef2256->pctrl_desc.name = dev_name(pef2256->dev); > + pef2256->pctrl_desc.owner = THIS_MODULE; > + pef2256->pctrl_desc.pctlops = &pef2256_pctlops; > + pef2256->pctrl_desc.pmxops = &pef2256_pmxops; > + if (pef2256->version == PEF2256_VERSION_1_2) { > + pef2256->pctrl_desc.pins = pef2256_v12_pins; > + pef2256->pctrl_desc.npins = ARRAY_SIZE(pef2256_v12_pins); > + pef2256->functions = pef2256_v12_functions; > + pef2256->nfunctions = ARRAY_SIZE(pef2256_v12_functions); > + } else { > + pef2256->pctrl_desc.pins = pef2256_v2x_pins; > + pef2256->pctrl_desc.npins = ARRAY_SIZE(pef2256_v2x_pins); > + pef2256->functions = pef2256_v2x_functions; > + pef2256->nfunctions = ARRAY_SIZE(pef2256_v2x_functions); > + } > + > + pctrl = devm_pinctrl_register(pef2256->dev, &pef2256->pctrl_desc, pef2256); > + if (IS_ERR(pctrl)) { > + dev_err(pef2256->dev, "pinctrl driver registration failed\n"); > + return PTR_ERR(pctrl); > + } > + > + return 0; You could use return dev_err_probe(...); > + pef2256_reset_pinmux(pef2256_pinctrl); > + ret = pef2256_register_pinctrl(pef2256_pinctrl); > + if (ret) > + return ret; Or you could use it down here. With or without these changes (because they are nitpicks) Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
On Tue, Sep 12, 2023 at 01:04:56PM +0200, Linus Walleij wrote: > On Tue, Sep 12, 2023 at 12:15 PM Herve Codina <herve.codina@bootlin.com> wrote: > > +/* SPDX-License-Identifier: GPL-2.0 */ > > +/* > I think SPDX mandates that you start the tag with C99 comments > // SPDX-License-Identifier: GPL-2.0-only Not for headers, they should use C style since they might be included in contexts where C++ isn't supported.
On Tue, Sep 12, 2023 at 10:14:57AM +0200, Herve Codina wrote: > The given example mentions the 'fsl,mode' property whereas the > correct property name, the one described, is 'fsl,operational-mode'. > > Fix the example to use the correct property name. > > Fixes: a9b121327c93 ("dt-bindings: soc: fsl: cpm_qe: Add QMC controller") > Signed-off-by: Herve Codina <herve.codina@bootlin.com> Acked-by: Conor Dooley <conor.dooley@microchip.com> Thanks, Conor. > --- > .../bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml > index ec888f48cac8..450a0354cb1d 100644 > --- a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml > +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml > @@ -137,7 +137,7 @@ examples: > channel@16 { > /* Ch16 : First 4 even TS from all routed from TSA */ > reg = <16>; > - fsl,mode = "transparent"; > + fsl,operational-mode = "transparent"; > fsl,reverse-data; > fsl,tx-ts-mask = <0x00000000 0x000000aa>; > fsl,rx-ts-mask = <0x00000000 0x000000aa>; > @@ -146,7 +146,7 @@ examples: > channel@17 { > /* Ch17 : First 4 odd TS from all routed from TSA */ > reg = <17>; > - fsl,mode = "transparent"; > + fsl,operational-mode = "transparent"; > fsl,reverse-data; > fsl,tx-ts-mask = <0x00000000 0x00000055>; > fsl,rx-ts-mask = <0x00000000 0x00000055>; > @@ -155,7 +155,7 @@ examples: > channel@19 { > /* Ch19 : 8 TS (TS 8..15) from all routed from TSA */ > reg = <19>; > - fsl,mode = "hdlc"; > + fsl,operational-mode = "hdlc"; > fsl,tx-ts-mask = <0x00000000 0x0000ff00>; > fsl,rx-ts-mask = <0x00000000 0x0000ff00>; > }; > -- > 2.41.0 >
On Tue, Sep 12, 2023 at 12:10:18PM +0200, Herve Codina wrote: > The QMC (QUICC mutichannel controller) is a controller present in some > PowerQUICC SoC such as MPC885. > The QMC HDLC uses the QMC controller to transfer HDLC data. > > Additionally, a framer can be connected to the QMC HDLC. > If present, this framer is the interface between the TDM bus used by the > QMC HDLC and the E1/T1 line. > The QMC HDLC can use this framer to get information about the E1/T1 line > and configure the E1/T1 line. > > Signed-off-by: Herve Codina <herve.codina@bootlin.com> > --- > .../bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml > index 82d9beb48e00..b5073531f3f1 100644 > --- a/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml > +++ b/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,cpm1-scc-qmc.yaml > @@ -101,6 +101,16 @@ patternProperties: > Channel assigned Rx time-slots within the Rx time-slots routed by the > TSA to this cell. > > + compatible: > + const: fsl,qmc-hdlc > + > + fsl,framer: > + $ref: /schemas/types.yaml#/definitions/phandle > + description: > + phandle to the framer node. The framer is in charge of an E1/T1 line > + interface connected to the TDM bus. It can be used to get the E1/T1 line > + status such as link up/down. Sounds like this fsl,framer property should depend on the compatible being present, no? Thanks, Conor. > + > required: > - reg > - fsl,tx-ts-mask > @@ -159,5 +169,8 @@ examples: > fsl,operational-mode = "hdlc"; > fsl,tx-ts-mask = <0x00000000 0x0000ff00>; > fsl,rx-ts-mask = <0x00000000 0x0000ff00>; > + > + compatible = "fsl,qmc-hdlc"; > + fsl,framer = <&framer>; > }; > }; > -- > 2.41.0 >
Yo, I'm not au fait enough with this to leave particularly meaningful comments, so just some minor ones for you. On Tue, Sep 12, 2023 at 12:14:44PM +0200, Herve Codina wrote: > The Lantiq PEF2256 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. > > Signed-off-by: Herve Codina <herve.codina@bootlin.com> > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Missing a co-developed-by? > --- > .../bindings/net/lantiq,pef2256.yaml | 214 ++++++++++++++++++ > 1 file changed, 214 insertions(+) > create mode 100644 Documentation/devicetree/bindings/net/lantiq,pef2256.yaml > > diff --git a/Documentation/devicetree/bindings/net/lantiq,pef2256.yaml b/Documentation/devicetree/bindings/net/lantiq,pef2256.yaml > new file mode 100644 > index 000000000000..c4f21678bf6a > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/lantiq,pef2256.yaml > @@ -0,0 +1,214 @@ > +# 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 My OCD is rather upset by the inconsistent capitalisation used here :/ > + - 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: > + $ref: /schemas/types.yaml#/definitions/uint32 > + enum: [2048000, 4096000, 8192000, 16384000] -kBps is a standard suffix, would it be worth using that instead here? What you have would fit as even multiples. Otherwise Rob, should dt-schema grow -bps as a standard suffix? > + 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 8bit time-slots in E1 and 24 8bit Just a wee nit, s/8bit/8-bit/ :) Rest of this I don't really feel like I can really review. Thanks, Conor. > + time-slots 8 8bit 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 8bit) 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 8bit 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>; > + }; > + }; > + }; > -- > 2.41.0 >
Le 12/09/2023 à 20:13, Conor Dooley a écrit : > Yo, > > I'm not au fait enough with this to leave particularly meaningful > comments, so just some minor ones for you. > > On Tue, Sep 12, 2023 at 12:14:44PM +0200, Herve Codina wrote: >> The Lantiq PEF2256 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. >> >> Signed-off-by: Herve Codina <herve.codina@bootlin.com> >> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> > > Missing a co-developed-by? No, I guess it's a left-over of version v4 that I sent-out while Hervé was AFK. If a v6 is sent I think this line can be removed. Christophe
On Tue, Sep 12, 2023 at 4:31 PM Mark Brown <broonie@kernel.org> wrote: > On Tue, Sep 12, 2023 at 01:04:56PM +0200, Linus Walleij wrote: > > On Tue, Sep 12, 2023 at 12:15 PM Herve Codina <herve.codina@bootlin.com> wrote: > > > > +/* SPDX-License-Identifier: GPL-2.0 */ > > > +/* > > > I think SPDX mandates that you start the tag with C99 comments > > > // SPDX-License-Identifier: GPL-2.0-only > > Not for headers, they should use C style since they might be included in > contexts where C++ isn't supported. Oh right. Thanks Mark! Yours, Linus Walleij