ASoC: codec: hdmi-codec: Support IEC958 encoded PCM format
authorSia Jee Heng <jee.heng.sia@intel.com>
Thu, 4 Feb 2021 01:42:55 +0000 (09:42 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 8 Feb 2021 11:39:52 +0000 (11:39 +0000)
Existing hdmi-codec driver only support standard pcm format.
Support of IEC958 encoded format pass from ALSA IEC958 plugin is needed
so that the IEC958 encoded data can be streamed to the HDMI chip.

Signed-off-by: Sia Jee Heng <jee.heng.sia@intel.com>
Link: https://lore.kernel.org/r/20210204014258.10197-2-jee.heng.sia@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/hdmi-codec.h
sound/soc/codecs/hdmi-codec.c

index b55970859a13c1fc5cb39ed33181b693ab16558f..4b3a1d374b9042d3172b94e51f4bdc54b750ec74 100644 (file)
@@ -34,6 +34,11 @@ struct hdmi_codec_daifmt {
        unsigned int frame_clk_inv:1;
        unsigned int bit_clk_master:1;
        unsigned int frame_clk_master:1;
+       /* bit_fmt could be standard PCM format or
+        * IEC958 encoded format. ALSA IEC958 plugin will pass
+        * IEC958_SUBFRAME format to the underneath driver.
+        */
+       snd_pcm_format_t bit_fmt;
 };
 
 /*
index 0f3ac22f2cf8ee124281e1b5247be38604f0d30a..422539f933debf038e17061cee823a9c564b9a5c 100644 (file)
@@ -489,6 +489,7 @@ static int hdmi_codec_hw_params(struct snd_pcm_substream *substream,
        hp.sample_rate = params_rate(params);
        hp.channels = params_channels(params);
 
+       cf->bit_fmt = params_format(params);
        return hcp->hcd.ops->hw_params(dai->dev->parent, hcp->hcd.data,
                                       cf, &hp);
 }
@@ -617,7 +618,8 @@ static const struct snd_soc_dai_ops hdmi_codec_spdif_dai_ops = {
                         SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3BE |\
                         SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_3BE |\
                         SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_BE |\
-                        SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE)
+                        SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_S32_BE |\
+                        SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE)
 
 static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
                              struct snd_soc_dai *dai)