ASoC: qcom: q6dsp-common: move channel allocation to common
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Tue, 9 May 2023 11:21:59 +0000 (12:21 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 11 May 2023 01:19:03 +0000 (10:19 +0900)
move hdmi/dp channel allocation to a common function
q6dsp_get_channel_allocation() so that we can reuse this across
q6afe and q6apm drivers.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org
Link: https://lore.kernel.org/r/20230509112202.21471-2-srinivas.kandagatla@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org
sound/soc/qcom/qdsp6/q6afe-dai.c
sound/soc/qcom/qdsp6/q6dsp-common.c
sound/soc/qcom/qdsp6/q6dsp-common.h

index 8bb7452..31e0bad 100644 (file)
@@ -12,6 +12,7 @@
 #include <sound/soc.h>
 #include <sound/pcm_params.h>
 #include "q6dsp-lpass-ports.h"
+#include "q6dsp-common.h"
 #include "q6afe.h"
 
 
@@ -69,6 +70,7 @@ static int q6hdmi_hw_params(struct snd_pcm_substream *substream,
        struct q6afe_dai_data *dai_data = dev_get_drvdata(dai->dev);
        int channels = params_channels(params);
        struct q6afe_hdmi_cfg *hdmi = &dai_data->port_config[dai->id].hdmi;
+       int ret;
 
        hdmi->sample_rate = params_rate(params);
        switch (params_format(params)) {
@@ -80,33 +82,11 @@ static int q6hdmi_hw_params(struct snd_pcm_substream *substream,
                break;
        }
 
-       /* HDMI spec CEA-861-E: Table 28 Audio InfoFrame Data Byte 4 */
-       switch (channels) {
-       case 2:
-               hdmi->channel_allocation = 0;
-               break;
-       case 3:
-               hdmi->channel_allocation = 0x02;
-               break;
-       case 4:
-               hdmi->channel_allocation = 0x06;
-               break;
-       case 5:
-               hdmi->channel_allocation = 0x0A;
-               break;
-       case 6:
-               hdmi->channel_allocation = 0x0B;
-               break;
-       case 7:
-               hdmi->channel_allocation = 0x12;
-               break;
-       case 8:
-               hdmi->channel_allocation = 0x13;
-               break;
-       default:
-               dev_err(dai->dev, "invalid Channels = %u\n", channels);
-               return -EINVAL;
-       }
+       ret = q6dsp_get_channel_allocation(channels);
+       if (ret < 0)
+               return ret;
+
+       hdmi->channel_allocation = (u16) ret;
 
        return 0;
 }
index d393003..95585de 100644 (file)
@@ -63,4 +63,39 @@ int q6dsp_map_channels(u8 ch_map[PCM_MAX_NUM_CHANNEL], int ch)
        return 0;
 }
 EXPORT_SYMBOL_GPL(q6dsp_map_channels);
+
+int q6dsp_get_channel_allocation(int channels)
+{
+       int channel_allocation;
+
+       /* HDMI spec CEA-861-E: Table 28 Audio InfoFrame Data Byte 4 */
+       switch (channels) {
+       case 2:
+               channel_allocation = 0;
+               break;
+       case 3:
+               channel_allocation = 0x02;
+               break;
+       case 4:
+               channel_allocation = 0x06;
+               break;
+       case 5:
+               channel_allocation = 0x0A;
+               break;
+       case 6:
+               channel_allocation = 0x0B;
+               break;
+       case 7:
+               channel_allocation = 0x12;
+               break;
+       case 8:
+               channel_allocation = 0x13;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return channel_allocation;
+}
+EXPORT_SYMBOL_GPL(q6dsp_get_channel_allocation);
 MODULE_LICENSE("GPL v2");
index 01094d1..9e704db 100644 (file)
@@ -20,5 +20,6 @@
 #define PCM_CHANNELS   10      /* Top surround channel. */
 
 int q6dsp_map_channels(u8 ch_map[PCM_MAX_NUM_CHANNEL], int ch);
+int q6dsp_get_channel_allocation(int channels);
 
 #endif /* __Q6DSP_COMMON_H__ */