[PATCH v5 0/9] media: adv748x: add support for HDMI audio

From: Alex Riesen
Date: Thu Apr 02 2020 - 14:36:06 EST


This adds minimal support for accessing the HDMI audio provided through the
I2S port available on ADV7481 and ADV7482 decoder devices by ADI.
The port carries audio signal from the decoded HDMI stream.

Currently, the driver only supports I2S in TDM, 8 channels a 24bit at 48kHz.
Furthermore, only left-justified, 8 slots, 32bit/slot TDM, at 256fs has been
ever tried.

An ADV7482 on the Renesas Salvator-X ES1.1 (R8A77950 SoC) was used during
development of this code.

Changes since v4:
- rebased on v5.6

- Add dummy ssi4 node to the rcar sound card, as the r8a77961
devices also reference salvator-common.dts.
Suggested-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>

Changes since v3:
- use clk_hw instead of clk
Suggested-by: Stephen Boyd <sboyd@xxxxxxxxxx>

- formatting improvements and use const where possible

- removed implementation of log_status and EDID setting ioctls,
those will be submitted as separate patches.
Suggested-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>

Changes since v2:
- prepare/enable the clock when it is used, as it seems nothing else does
this otherwise

- give the clock a unique name to ensure it can be registered if there are
multiple adv748x devices in the system

- remove optionality note from clock cell description to ensure the device
description matches the real device (the line is always present, even
if not used)

Changes since v1:
- Add ssi4_ctrl pin group to the sound pins. The pins are responsible for
SCK4 (sample clock) WS4 and (word boundary input), and are required for
SSI audio input over I2S.
Reported-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>

- Removed the audio clock C from the list of clocks of adv748x,
it is exactly the other way around.
Reported-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>

- Add an instance of (currently) fixed rate I2S master clock (MCLK),
connected to the audio_clk_c line of the R-Car SoC.
Explicitly declare the device a clock producer and add it to the
list of clocks used by the audio system of the Salvator-X board.
Suggested-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>

- The implementation of DAI driver has been moved in a separate file
and modified to activate audio decoding and I2S streaming using
snd_soc_dai_... interfaces. This allows the driver to be used with
just ALSA interfaces.

- The ioctls for selecting audio output and muting have been removed,
as not applicable.
Suggested-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
I have left implementation of the QUERYCAP in, as it seems to be required
by v4l-ctl to support loading of EDID for this node. And setting the EDID
is one feature I desperately need: there are devices which plainly refuse
to talk to the sink if it does not provide EDID they like.

- A device tree configuration without audio port will disable the audio code
altogether, supporting integrations where the port is not connected.

- The patches have been re-arranged, starting with the generic changes and
changes not related to audio directly. Those will be probably sent as a
separate series later.

- The whole series has been rebased on top of v5.6-rc6

Alex Riesen (9):
media: adv748x: fix end-of-line terminators in diagnostic statements
media: adv748x: include everything adv748x.h needs into the file
media: adv748x: reduce amount of code for bitwise modifications of
device registers
media: adv748x: add definitions for audio output related registers
media: adv748x: add support for HDMI audio
media: adv748x: prepare/enable mclk when the audio is used
media: adv748x: only activate DAI if it is described in device tree
dt-bindings: adv748x: add information about serial audio interface
(I2S/TDM)
arm64: dts: renesas: salvator: add a connection from adv748x codec
(HDMI input) to the R-Car SoC

.../devicetree/bindings/media/i2c/adv748x.txt | 16 +-
.../boot/dts/renesas/r8a77950-salvator-x.dts | 3 +-
arch/arm64/boot/dts/renesas/r8a77961.dtsi | 1 +
.../boot/dts/renesas/salvator-common.dtsi | 47 ++-
drivers/media/i2c/adv748x/Makefile | 3 +-
drivers/media/i2c/adv748x/adv748x-afe.c | 6 +-
drivers/media/i2c/adv748x/adv748x-core.c | 45 +--
drivers/media/i2c/adv748x/adv748x-csi2.c | 8 +-
drivers/media/i2c/adv748x/adv748x-dai.c | 278 ++++++++++++++++++
drivers/media/i2c/adv748x/adv748x-hdmi.c | 6 +-
drivers/media/i2c/adv748x/adv748x.h | 65 +++-
11 files changed, 436 insertions(+), 42 deletions(-)
create mode 100644 drivers/media/i2c/adv748x/adv748x-dai.c

--
2.25.1.25.g9ecbe7eb18