Hello, This is the v4 of the series of patch aiming to make the machine driver "fsl-asoc-card" compatible with use cases where there is no real codec driver. It proposes to use the "spdif_receiver" and "spdif_transmitter" drivers instead of the dummy codec. This is a first step in using the S/PDIF controller with the ASRC. The five first patches add compatibility with the pair of codecs "spdif_receiver" and "spdif_transmitter" with a new compatible, "fsl,imx-audio-generic". Codec parameters are set with default values. Consequently, the driver is modified to work with multi-codec use cases. It can get 2 codecs phandles from the device tree, and the "fsl_asoc_card_priv" struct now has 2 "codec_priv" to store properties of both codecs. It is fixed to 2 codecs as only "fsl,imx-audio-generic" uses multiple codecs at the moment. However, the driver now uses "for_each_codecs" macros when possible to ease future implementations of multi-codec configurations. The three following patches add configuration options for the devicetree. They configure the CPU DAI when using "fsl,imx-audio-generic". These options are usually hard-coded in "fsl-asoc-card.c" for each audio codec. Because the generic codec could be used with other CPU DAIs than the S/PDIF controller, setting these parameters could be required. These new options try to follow the style of the simple-card driver: * standard TDM properties are used, as defined in "tdm-slot.txt". * the CPU DAI system-clock can be specified, allowing the codec to retrieve its frequency. * the CPU DAI system-clock direction can be specified through a new binding, the same way it is done in simple-card. The last commit updates the DT bindings documentation and add a new example for the generic codec use case. This series of patch was successfully built for arm64 and x86 on top of the latest "for-next" branch of the ASoC git tree on the 14th of May 2024. These modifications have also been tested on an i.MX8MN evaluation board, with a linux kernel RT v6.1.26-rt8. If you have any question or remark about these commits, don't hesitate to reply. Best regards, Elinor Montmasson Changelog: v3 -> v4: * Use the standard TDM bidings, as defined in "tdm-slot.txt", for the new optional DT bindings setting the TDM slots number and width. * Use the clock DT bindings to optionally specify the CPU DAI system clock frequency, instead of a dedicated new binding. * Rename the new DT binding "cpu-sysclk-dir-out" to "cpu-system-clock-direction-out" to better follow the style of the simple-card driver. * Merge TX an RX bindings for CPU DAI system-clock, to better follow the style of the simple-card driver, and also as there was no use case in fsl-asoc-card where TX and RX settings had to be different. * Add the documentation for the new bindings in the new DT schema bindings documentation. Also add an example with the generic codec. * v3 patch series at : https://lore.kernel.org/alsa-devel/20231218124058.2047167-1-elinor.montmasson@savoirfairelinux.com/ v2 -> v3: * When the bitmaster or framemaster are retrieved from the device tree, the driver will now compare them with the two codecs possibly given in device tree, and not just the first codec. * Improve driver modifications to use multiple codecs for better integration of future multi-codec use cases: * Use "for_each_codec" macros when possible. * "fsl_asoc_card_priv" struct now has 2 "codec_priv" as the driver can currently retrieve 2 codec phandles from the device tree. * Fix subject of patch 10/10 to follow the style of the subsystem * v2 patch series at: https://lore.kernel.org/alsa-devel/20231027144734.3654829-1-elinor.montmasson@savoirfairelinux.com/ v1 -> v2: * Replace use of the dummy codec by the pair of codecs spdif_receiver / spdif_transmitter. * Adapt how dai links codecs are used to take into account the possibility for multiple codecs per link. * Change compatible name. * Adapt driver to be able to register two codecs given in the device tree. * v1 patch series at: https://lore.kernel.org/alsa-devel/20230901144550.520072-1-elinor.montmasson@savoirfairelinux.com/ Elinor Montmasson (9): ASoC: fsl-asoc-card: add support for dai links with multiple codecs ASoC: fsl-asoc-card: add second dai link component for codecs ASoC: fsl-asoc-card: add compatibility to use 2 codecs in dai-links ASoC: fsl-asoc-card: add new compatible for a generic codec use case ASoC: fsl-asoc-card: set generic codec as clock provider ASoC: fsl-asoc-card: add use of devicetree TDM slot properties ASoC: fsl-asoc-card: add DT clock "cpu_sysclk" with generic codec ASoC: fsl-asoc-card: add DT property "cpu-system-clock-direction-out" ASoC: dt-bindings: fsl-asoc-card: add compatible for generic codec .../bindings/sound/fsl-asoc-card.yaml | 96 +++++- sound/soc/fsl/fsl-asoc-card.c | 306 +++++++++++------- 2 files changed, 287 insertions(+), 115 deletions(-) -- 2.34.1