diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts index 97a1ee1a7263..a16cd186e144 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts +++ b/arch/arm64/boot/dts/rockchip/rk3588-rock-5-itx.dts @@ -273,7 +273,7 @@ hdmiin-sound { status = "okay"; - compatible = "rockchip,hdmi"; + compatible = "rockchip,hdmi-rx"; rockchip,mclk-fs = <128>; rockchip,format = "i2s"; rockchip,bitclock-master = <&hdmirx_ctrler>; diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c index f3b9a7de344a..42a7695efe10 100644 --- a/sound/soc/codecs/hdmi-codec.c +++ b/sound/soc/codecs/hdmi-codec.c @@ -1075,6 +1075,9 @@ static int hdmi_codec_probe(struct platform_device *pdev) struct hdmi_codec_priv *hcp; int dai_count, i = 0; int ret; + bool is_rx; + + is_rx = device_property_read_bool(dev->parent, "rockchip,hdmi-rx"); if (!hcd) { dev_err(dev, "%s: No platform data\n", __func__); @@ -1115,8 +1118,15 @@ static int hdmi_codec_probe(struct platform_device *pdev) * causes "Only one simultaneous stream supported!" errors * and results in mono audio output. */ - daidrv[i].capture.channels_min = 0; - daidrv[i].capture.channels_max = 0; + if (is_rx) { + /* HDMI-IN: capture only */ + daidrv[i].playback.channels_min = 0; + daidrv[i].playback.channels_max = 0; + } else { + /* HDMI-OUT: playback only */ + daidrv[i].capture.channels_min = 0; + daidrv[i].capture.channels_max = 0; + } i++; }