[PATCH v3 0/7] Add support for the internal RK3308 audio codec

Luca Ceresoli luca.ceresoli at bootlin.com
Wed Feb 21 02:22:44 PST 2024

This series adds a driver for the internal audio codec of the Rockchip
RK3308 SoC, along with some related patches. This codec is internally
connected to the I2S peripherals on the same chip, and it has some
peculiarities arising from that interconnection.

For proper bidirectional operation with the internal codec at any possible
combination of sampling rates, the I2S peripheral needs two clock sources
(tx and rx), while connection with an external codec commonly needs only

Since v5.16 there is a driver for the I2S in
sound/soc/rockchip/rockchip_i2s_tdm.c, but in some cases it does not
configure correctly the clocks, resulting in an unnecessarily inaccurate
rate. Patch 1 fixes this.

Patches 2-4 adds the codec driver along with the bindings and a new helper

Patches 5-7 add to the SoC DT file two I2S controllers (those which are
internally connected to the internal codec) and the codec itself and enable
the driver in the ARM64 defconfig.


Signed-off-by: Luca Ceresoli <luca.ceresoli at bootlin.com>

Changes in v3:
 - Add the I2S clock fix patch and remove a previous fix which is now superseded
 - Codec driver: fix silent playback until a given amplitude of sigital
   value, seen at >= 96 kHz rate
 - various other changes, listed per-patch
 - Link to v2: https://lore.kernel.org/r/20231219-rk3308-audio-codec-v2-0-c70d06021946@bootlin.com

Changes in v2:
 - largely rewrote the codec driver to use DAPM and lots of improvements
   and cleanups
 - removed the RK3308 audio card and related patches
 - various other changes, listed per-patch
 - Link to v1: https://lore.kernel.org/all/20220907142124.2532620-1-luca.ceresoli@bootlin.com/

Luca Ceresoli (7):
      ASoC: rockchip: i2s-tdm: Fix inaccurate sampling rates
      ASoC: dt-bindings: Add Rockchip RK3308 internal audio codec
      ASoC: core: add SOC_DOUBLE_RANGE_TLV() helper macro
      ASoC: codecs: Add RK3308 internal audio codec driver
      arm64: defconfig: enable Rockchip RK3308 internal audio codec driver
      arm64: dts: rockchip: add i2s_8ch_2 and i2s_8ch_3
      arm64: dts: rockchip: add the internal audio codec

 .../bindings/sound/rockchip,rk3308-codec.yaml      |  98 ++
 MAINTAINERS                                        |   7 +
 arch/arm64/boot/dts/rockchip/rk3308.dtsi           |  56 ++
 arch/arm64/configs/defconfig                       |   1 +
 include/sound/soc.h                                |  12 +
 sound/soc/codecs/Kconfig                           |  11 +
 sound/soc/codecs/Makefile                          |   2 +
 sound/soc/codecs/rk3308_codec.c                    | 993 +++++++++++++++++++++
 sound/soc/codecs/rk3308_codec.h                    | 579 ++++++++++++
 sound/soc/rockchip/rockchip_i2s_tdm.c              | 352 +-------
 10 files changed, 1765 insertions(+), 346 deletions(-)
base-commit: 20fb305a716356265e9479719502b5a012e0d869
change-id: 20231219-rk3308-audio-codec-a5558ba8949d

Best regards,
Luca Ceresoli <luca.ceresoli at bootlin.com>

More information about the Linux-rockchip mailing list