^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) // Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) // Copyright (c) 2018, Linaro Limited
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/err.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/platform_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/of_platform.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/bitops.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/mutex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/of_device.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/slab.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <sound/core.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <sound/soc.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <sound/soc-dapm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <sound/pcm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #include <sound/control.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #include <sound/asound.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #include <sound/pcm_params.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #include "q6afe.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #include "q6asm.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #include "q6adm.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #include "q6routing.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define DRV_NAME "q6routing-component"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define Q6ROUTING_RX_MIXERS(id) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) SOC_SINGLE_EXT("MultiMedia1", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) SOC_SINGLE_EXT("MultiMedia2", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) SOC_SINGLE_EXT("MultiMedia3", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) SOC_SINGLE_EXT("MultiMedia4", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) SOC_SINGLE_EXT("MultiMedia5", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) SOC_SINGLE_EXT("MultiMedia6", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) SOC_SINGLE_EXT("MultiMedia7", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) SOC_SINGLE_EXT("MultiMedia8", id, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) msm_routing_put_audio_mixer),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define Q6ROUTING_RX_DAPM_ROUTE(mix_name, s) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) { mix_name, "MultiMedia1", "MM_DL1" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) { mix_name, "MultiMedia2", "MM_DL2" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) { mix_name, "MultiMedia3", "MM_DL3" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) { mix_name, "MultiMedia4", "MM_DL4" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) { mix_name, "MultiMedia5", "MM_DL5" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) { mix_name, "MultiMedia6", "MM_DL6" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) { mix_name, "MultiMedia7", "MM_DL7" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) { mix_name, "MultiMedia8", "MM_DL8" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) { s, NULL, mix_name }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define Q6ROUTING_TX_DAPM_ROUTE(mix_name) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) { mix_name, "PRI_MI2S_TX", "PRI_MI2S_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) { mix_name, "SEC_MI2S_TX", "SEC_MI2S_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) { mix_name, "QUAT_MI2S_TX", "QUAT_MI2S_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) { mix_name, "TERT_MI2S_TX", "TERT_MI2S_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) { mix_name, "SLIMBUS_0_TX", "SLIMBUS_0_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) { mix_name, "SLIMBUS_1_TX", "SLIMBUS_1_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) { mix_name, "SLIMBUS_2_TX", "SLIMBUS_2_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) { mix_name, "SLIMBUS_3_TX", "SLIMBUS_3_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) { mix_name, "SLIMBUS_4_TX", "SLIMBUS_4_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) { mix_name, "SLIMBUS_5_TX", "SLIMBUS_5_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) { mix_name, "SLIMBUS_6_TX", "SLIMBUS_6_TX" }, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) { mix_name, "PRIMARY_TDM_TX_0", "PRIMARY_TDM_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) { mix_name, "PRIMARY_TDM_TX_1", "PRIMARY_TDM_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) { mix_name, "PRIMARY_TDM_TX_2", "PRIMARY_TDM_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) { mix_name, "PRIMARY_TDM_TX_3", "PRIMARY_TDM_TX_3"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) { mix_name, "PRIMARY_TDM_TX_4", "PRIMARY_TDM_TX_4"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) { mix_name, "PRIMARY_TDM_TX_5", "PRIMARY_TDM_TX_5"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) { mix_name, "PRIMARY_TDM_TX_6", "PRIMARY_TDM_TX_6"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) { mix_name, "PRIMARY_TDM_TX_7", "PRIMARY_TDM_TX_7"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) { mix_name, "SEC_TDM_TX_0", "SEC_TDM_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) { mix_name, "SEC_TDM_TX_1", "SEC_TDM_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) { mix_name, "SEC_TDM_TX_2", "SEC_TDM_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) { mix_name, "SEC_TDM_TX_3", "SEC_TDM_TX_3"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) { mix_name, "SEC_TDM_TX_4", "SEC_TDM_TX_4"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) { mix_name, "SEC_TDM_TX_5", "SEC_TDM_TX_5"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) { mix_name, "SEC_TDM_TX_6", "SEC_TDM_TX_6"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) { mix_name, "SEC_TDM_TX_7", "SEC_TDM_TX_7"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) { mix_name, "TERT_TDM_TX_0", "TERT_TDM_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) { mix_name, "TERT_TDM_TX_1", "TERT_TDM_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) { mix_name, "TERT_TDM_TX_2", "TERT_TDM_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) { mix_name, "TERT_TDM_TX_3", "TERT_TDM_TX_3"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) { mix_name, "TERT_TDM_TX_4", "TERT_TDM_TX_4"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) { mix_name, "TERT_TDM_TX_5", "TERT_TDM_TX_5"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) { mix_name, "TERT_TDM_TX_6", "TERT_TDM_TX_6"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) { mix_name, "TERT_TDM_TX_7", "TERT_TDM_TX_7"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) { mix_name, "QUAT_TDM_TX_0", "QUAT_TDM_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) { mix_name, "QUAT_TDM_TX_1", "QUAT_TDM_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) { mix_name, "QUAT_TDM_TX_2", "QUAT_TDM_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) { mix_name, "QUAT_TDM_TX_3", "QUAT_TDM_TX_3"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) { mix_name, "QUAT_TDM_TX_4", "QUAT_TDM_TX_4"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) { mix_name, "QUAT_TDM_TX_5", "QUAT_TDM_TX_5"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) { mix_name, "QUAT_TDM_TX_6", "QUAT_TDM_TX_6"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) { mix_name, "QUAT_TDM_TX_7", "QUAT_TDM_TX_7"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) { mix_name, "QUIN_TDM_TX_0", "QUIN_TDM_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) { mix_name, "QUIN_TDM_TX_1", "QUIN_TDM_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) { mix_name, "QUIN_TDM_TX_2", "QUIN_TDM_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) { mix_name, "QUIN_TDM_TX_3", "QUIN_TDM_TX_3"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) { mix_name, "QUIN_TDM_TX_4", "QUIN_TDM_TX_4"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) { mix_name, "QUIN_TDM_TX_5", "QUIN_TDM_TX_5"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) { mix_name, "QUIN_TDM_TX_6", "QUIN_TDM_TX_6"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) { mix_name, "QUIN_TDM_TX_7", "QUIN_TDM_TX_7"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) { mix_name, "WSA_CODEC_DMA_TX_0", "WSA_CODEC_DMA_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) { mix_name, "WSA_CODEC_DMA_TX_1", "WSA_CODEC_DMA_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) { mix_name, "WSA_CODEC_DMA_TX_2", "WSA_CODEC_DMA_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) { mix_name, "VA_CODEC_DMA_TX_0", "VA_CODEC_DMA_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) { mix_name, "VA_CODEC_DMA_TX_1", "VA_CODEC_DMA_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) { mix_name, "VA_CODEC_DMA_TX_2", "VA_CODEC_DMA_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) { mix_name, "TX_CODEC_DMA_TX_0", "TX_CODEC_DMA_TX_0"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) { mix_name, "TX_CODEC_DMA_TX_1", "TX_CODEC_DMA_TX_1"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) { mix_name, "TX_CODEC_DMA_TX_2", "TX_CODEC_DMA_TX_2"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) { mix_name, "TX_CODEC_DMA_TX_3", "TX_CODEC_DMA_TX_3"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) { mix_name, "TX_CODEC_DMA_TX_4", "TX_CODEC_DMA_TX_4"}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) { mix_name, "TX_CODEC_DMA_TX_5", "TX_CODEC_DMA_TX_5"}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define Q6ROUTING_TX_MIXERS(id) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) SOC_SINGLE_EXT("PRI_MI2S_TX", PRIMARY_MI2S_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) SOC_SINGLE_EXT("SEC_MI2S_TX", SECONDARY_MI2S_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) SOC_SINGLE_EXT("TERT_MI2S_TX", TERTIARY_MI2S_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) SOC_SINGLE_EXT("QUAT_MI2S_TX", QUATERNARY_MI2S_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) SOC_SINGLE_EXT("SLIMBUS_0_TX", SLIMBUS_0_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) SOC_SINGLE_EXT("SLIMBUS_1_TX", SLIMBUS_1_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) SOC_SINGLE_EXT("SLIMBUS_2_TX", SLIMBUS_2_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) SOC_SINGLE_EXT("SLIMBUS_3_TX", SLIMBUS_3_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) SOC_SINGLE_EXT("SLIMBUS_4_TX", SLIMBUS_4_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) SOC_SINGLE_EXT("SLIMBUS_5_TX", SLIMBUS_5_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) SOC_SINGLE_EXT("SLIMBUS_6_TX", SLIMBUS_6_TX, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) SOC_SINGLE_EXT("PRIMARY_TDM_TX_0", PRIMARY_TDM_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) SOC_SINGLE_EXT("PRIMARY_TDM_TX_1", PRIMARY_TDM_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) SOC_SINGLE_EXT("PRIMARY_TDM_TX_2", PRIMARY_TDM_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) SOC_SINGLE_EXT("PRIMARY_TDM_TX_3", PRIMARY_TDM_TX_3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) SOC_SINGLE_EXT("PRIMARY_TDM_TX_4", PRIMARY_TDM_TX_4, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) SOC_SINGLE_EXT("PRIMARY_TDM_TX_5", PRIMARY_TDM_TX_5, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) SOC_SINGLE_EXT("PRIMARY_TDM_TX_6", PRIMARY_TDM_TX_6, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) SOC_SINGLE_EXT("PRIMARY_TDM_TX_7", PRIMARY_TDM_TX_7, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) SOC_SINGLE_EXT("SEC_TDM_TX_0", SECONDARY_TDM_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) SOC_SINGLE_EXT("SEC_TDM_TX_1", SECONDARY_TDM_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) SOC_SINGLE_EXT("SEC_TDM_TX_2", SECONDARY_TDM_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) SOC_SINGLE_EXT("SEC_TDM_TX_3", SECONDARY_TDM_TX_3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) SOC_SINGLE_EXT("SEC_TDM_TX_4", SECONDARY_TDM_TX_4, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) SOC_SINGLE_EXT("SEC_TDM_TX_5", SECONDARY_TDM_TX_5, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) SOC_SINGLE_EXT("SEC_TDM_TX_6", SECONDARY_TDM_TX_6, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) SOC_SINGLE_EXT("SEC_TDM_TX_7", SECONDARY_TDM_TX_7, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) SOC_SINGLE_EXT("TERT_TDM_TX_0", TERTIARY_TDM_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) SOC_SINGLE_EXT("TERT_TDM_TX_1", TERTIARY_TDM_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) SOC_SINGLE_EXT("TERT_TDM_TX_2", TERTIARY_TDM_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) SOC_SINGLE_EXT("TERT_TDM_TX_3", TERTIARY_TDM_TX_3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) SOC_SINGLE_EXT("TERT_TDM_TX_4", TERTIARY_TDM_TX_4, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) SOC_SINGLE_EXT("TERT_TDM_TX_5", TERTIARY_TDM_TX_5, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) SOC_SINGLE_EXT("TERT_TDM_TX_6", TERTIARY_TDM_TX_6, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) SOC_SINGLE_EXT("TERT_TDM_TX_7", TERTIARY_TDM_TX_7, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) SOC_SINGLE_EXT("QUAT_TDM_TX_0", QUATERNARY_TDM_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) SOC_SINGLE_EXT("QUAT_TDM_TX_1", QUATERNARY_TDM_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) SOC_SINGLE_EXT("QUAT_TDM_TX_2", QUATERNARY_TDM_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) SOC_SINGLE_EXT("QUAT_TDM_TX_3", QUATERNARY_TDM_TX_3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) SOC_SINGLE_EXT("QUAT_TDM_TX_4", QUATERNARY_TDM_TX_4, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) SOC_SINGLE_EXT("QUAT_TDM_TX_5", QUATERNARY_TDM_TX_5, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) SOC_SINGLE_EXT("QUAT_TDM_TX_6", QUATERNARY_TDM_TX_6, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) SOC_SINGLE_EXT("QUAT_TDM_TX_7", QUATERNARY_TDM_TX_7, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) SOC_SINGLE_EXT("QUIN_TDM_TX_0", QUINARY_TDM_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) SOC_SINGLE_EXT("QUIN_TDM_TX_1", QUINARY_TDM_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) SOC_SINGLE_EXT("QUIN_TDM_TX_2", QUINARY_TDM_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) SOC_SINGLE_EXT("QUIN_TDM_TX_3", QUINARY_TDM_TX_3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) SOC_SINGLE_EXT("QUIN_TDM_TX_4", QUINARY_TDM_TX_4, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) SOC_SINGLE_EXT("QUIN_TDM_TX_5", QUINARY_TDM_TX_5, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) SOC_SINGLE_EXT("QUIN_TDM_TX_6", QUINARY_TDM_TX_6, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) SOC_SINGLE_EXT("QUIN_TDM_TX_7", QUINARY_TDM_TX_7, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) SOC_SINGLE_EXT("WSA_CODEC_DMA_TX_0", WSA_CODEC_DMA_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) SOC_SINGLE_EXT("WSA_CODEC_DMA_TX_1", WSA_CODEC_DMA_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) SOC_SINGLE_EXT("WSA_CODEC_DMA_TX_2", WSA_CODEC_DMA_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) SOC_SINGLE_EXT("VA_CODEC_DMA_TX_0", VA_CODEC_DMA_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) SOC_SINGLE_EXT("VA_CODEC_DMA_TX_1", VA_CODEC_DMA_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) SOC_SINGLE_EXT("VA_CODEC_DMA_TX_2", VA_CODEC_DMA_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) SOC_SINGLE_EXT("TX_CODEC_DMA_TX_0", TX_CODEC_DMA_TX_0, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) SOC_SINGLE_EXT("TX_CODEC_DMA_TX_1", TX_CODEC_DMA_TX_1, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) SOC_SINGLE_EXT("TX_CODEC_DMA_TX_2", TX_CODEC_DMA_TX_2, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) SOC_SINGLE_EXT("TX_CODEC_DMA_TX_3", TX_CODEC_DMA_TX_3, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) SOC_SINGLE_EXT("TX_CODEC_DMA_TX_4", TX_CODEC_DMA_TX_4, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) msm_routing_put_audio_mixer), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) SOC_SINGLE_EXT("TX_CODEC_DMA_TX_5", TX_CODEC_DMA_TX_5, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) id, 1, 0, msm_routing_get_audio_mixer, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) msm_routing_put_audio_mixer),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) struct session_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) int state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) int port_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) int path_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) int app_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) int acdb_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) int sample_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) int bits_per_sample;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) int channels;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) int perf_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) int numcopps;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) int fedai_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) unsigned long copp_map;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) struct q6copp *copps[MAX_COPPS_PER_PORT];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) struct msm_routing_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) struct session_data sessions[MAX_SESSIONS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) struct session_data port_data[AFE_MAX_PORTS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) struct device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) struct mutex lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) static struct msm_routing_data *routing_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) * q6routing_stream_open() - Register a new stream for route setup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) * @fedai_id: Frontend dai id.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) * @perf_mode: Performance mode.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) * @stream_id: ASM stream id to map.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) * @stream_type: Direction of stream
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) * Return: Will be an negative on error or a zero on success.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) int q6routing_stream_open(int fedai_id, int perf_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) int stream_id, int stream_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) int j, topology, num_copps = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) struct route_payload payload;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) struct q6copp *copp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) int copp_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) struct session_data *session, *pdata;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) if (!routing_data) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) pr_err("Routing driver not yet ready\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) session = &routing_data->sessions[stream_id - 1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) pdata = &routing_data->port_data[session->port_id];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) mutex_lock(&routing_data->lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) session->fedai_id = fedai_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) session->path_type = pdata->path_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) session->sample_rate = pdata->sample_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) session->channels = pdata->channels;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) session->bits_per_sample = pdata->bits_per_sample;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) payload.num_copps = 0; /* only RX needs to use payload */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) topology = NULL_COPP_TOPOLOGY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) copp = q6adm_open(routing_data->dev, session->port_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) session->path_type, session->sample_rate,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) session->channels, topology, perf_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) session->bits_per_sample, 0, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) if (IS_ERR_OR_NULL(copp)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) mutex_unlock(&routing_data->lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) copp_idx = q6adm_get_copp_id(copp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) set_bit(copp_idx, &session->copp_map);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) session->copps[copp_idx] = copp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) for_each_set_bit(j, &session->copp_map, MAX_COPPS_PER_PORT) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) payload.port_id[num_copps] = session->port_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) payload.copp_idx[num_copps] = j;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) num_copps++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) if (num_copps) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) payload.num_copps = num_copps;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) payload.session_id = stream_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) q6adm_matrix_map(routing_data->dev, session->path_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) payload, perf_mode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) mutex_unlock(&routing_data->lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) EXPORT_SYMBOL_GPL(q6routing_stream_open);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) static struct session_data *get_session_from_id(struct msm_routing_data *data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) int fedai_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) for (i = 0; i < MAX_SESSIONS; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) if (fedai_id == data->sessions[i].fedai_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) return &data->sessions[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) * q6routing_stream_close() - Deregister a stream
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) * @fedai_id: Frontend dai id.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) * @stream_type: Direction of stream
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) * Return: Will be an negative on error or a zero on success.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) void q6routing_stream_close(int fedai_id, int stream_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) struct session_data *session;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) int idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) session = get_session_from_id(routing_data, fedai_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) if (!session)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) for_each_set_bit(idx, &session->copp_map, MAX_COPPS_PER_PORT) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) if (session->copps[idx]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) q6adm_close(routing_data->dev, session->copps[idx]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) session->copps[idx] = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) session->fedai_id = -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) session->copp_map = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) EXPORT_SYMBOL_GPL(q6routing_stream_close);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) static int msm_routing_get_audio_mixer(struct snd_kcontrol *kcontrol,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) struct snd_ctl_elem_value *ucontrol)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) struct snd_soc_dapm_context *dapm =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) snd_soc_dapm_kcontrol_dapm(kcontrol);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) struct soc_mixer_control *mc =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) (struct soc_mixer_control *)kcontrol->private_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) int session_id = mc->shift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) struct snd_soc_component *c = snd_soc_dapm_to_component(dapm);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) struct msm_routing_data *priv = dev_get_drvdata(c->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) struct session_data *session = &priv->sessions[session_id];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) if (session->port_id == mc->reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) ucontrol->value.integer.value[0] = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) ucontrol->value.integer.value[0] = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) static int msm_routing_put_audio_mixer(struct snd_kcontrol *kcontrol,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) struct snd_ctl_elem_value *ucontrol)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) struct snd_soc_dapm_context *dapm =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) snd_soc_dapm_kcontrol_dapm(kcontrol);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) struct snd_soc_component *c = snd_soc_dapm_to_component(dapm);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) struct msm_routing_data *data = dev_get_drvdata(c->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) struct soc_mixer_control *mc =
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) (struct soc_mixer_control *)kcontrol->private_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) struct snd_soc_dapm_update *update = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) int be_id = mc->reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) int session_id = mc->shift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) struct session_data *session = &data->sessions[session_id];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) if (ucontrol->value.integer.value[0]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) if (session->port_id == be_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) session->port_id = be_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) snd_soc_dapm_mixer_update_power(dapm, kcontrol, 1, update);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) if (session->port_id == -1 || session->port_id != be_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) session->port_id = -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) snd_soc_dapm_mixer_update_power(dapm, kcontrol, 0, update);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) static const struct snd_kcontrol_new hdmi_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) Q6ROUTING_RX_MIXERS(HDMI_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) static const struct snd_kcontrol_new display_port_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) Q6ROUTING_RX_MIXERS(DISPLAY_PORT_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) static const struct snd_kcontrol_new primary_mi2s_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) Q6ROUTING_RX_MIXERS(PRIMARY_MI2S_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) static const struct snd_kcontrol_new secondary_mi2s_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) Q6ROUTING_RX_MIXERS(SECONDARY_MI2S_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) static const struct snd_kcontrol_new quaternary_mi2s_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) Q6ROUTING_RX_MIXERS(QUATERNARY_MI2S_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) static const struct snd_kcontrol_new tertiary_mi2s_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) Q6ROUTING_RX_MIXERS(TERTIARY_MI2S_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) static const struct snd_kcontrol_new slimbus_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) Q6ROUTING_RX_MIXERS(SLIMBUS_0_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) static const struct snd_kcontrol_new slimbus_1_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) Q6ROUTING_RX_MIXERS(SLIMBUS_1_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) static const struct snd_kcontrol_new slimbus_2_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) Q6ROUTING_RX_MIXERS(SLIMBUS_2_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) static const struct snd_kcontrol_new slimbus_3_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) Q6ROUTING_RX_MIXERS(SLIMBUS_3_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) static const struct snd_kcontrol_new slimbus_4_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) Q6ROUTING_RX_MIXERS(SLIMBUS_4_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) static const struct snd_kcontrol_new slimbus_5_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) Q6ROUTING_RX_MIXERS(SLIMBUS_5_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) static const struct snd_kcontrol_new slimbus_6_rx_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) Q6ROUTING_RX_MIXERS(SLIMBUS_6_RX) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) static const struct snd_kcontrol_new pri_tdm_rx_0_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_0) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) static const struct snd_kcontrol_new pri_tdm_rx_1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) static const struct snd_kcontrol_new pri_tdm_rx_2_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_2) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) static const struct snd_kcontrol_new pri_tdm_rx_3_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_3) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) static const struct snd_kcontrol_new pri_tdm_rx_4_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_4) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) static const struct snd_kcontrol_new pri_tdm_rx_5_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_5) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) static const struct snd_kcontrol_new pri_tdm_rx_6_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_6) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) static const struct snd_kcontrol_new pri_tdm_rx_7_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) Q6ROUTING_RX_MIXERS(PRIMARY_TDM_RX_7) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) static const struct snd_kcontrol_new sec_tdm_rx_0_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_0) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) static const struct snd_kcontrol_new sec_tdm_rx_1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) static const struct snd_kcontrol_new sec_tdm_rx_2_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_2) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) static const struct snd_kcontrol_new sec_tdm_rx_3_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_3) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) static const struct snd_kcontrol_new sec_tdm_rx_4_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_4) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) static const struct snd_kcontrol_new sec_tdm_rx_5_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_5) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) static const struct snd_kcontrol_new sec_tdm_rx_6_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_6) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) static const struct snd_kcontrol_new sec_tdm_rx_7_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) Q6ROUTING_RX_MIXERS(SECONDARY_TDM_RX_7) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) static const struct snd_kcontrol_new tert_tdm_rx_0_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_0) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) static const struct snd_kcontrol_new tert_tdm_rx_1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) static const struct snd_kcontrol_new tert_tdm_rx_2_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_2) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) static const struct snd_kcontrol_new tert_tdm_rx_3_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_3) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) static const struct snd_kcontrol_new tert_tdm_rx_4_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_4) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) static const struct snd_kcontrol_new tert_tdm_rx_5_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_5) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) static const struct snd_kcontrol_new tert_tdm_rx_6_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_6) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) static const struct snd_kcontrol_new tert_tdm_rx_7_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) Q6ROUTING_RX_MIXERS(TERTIARY_TDM_RX_7) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) static const struct snd_kcontrol_new quat_tdm_rx_0_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_0) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) static const struct snd_kcontrol_new quat_tdm_rx_1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) static const struct snd_kcontrol_new quat_tdm_rx_2_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_2) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) static const struct snd_kcontrol_new quat_tdm_rx_3_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_3) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) static const struct snd_kcontrol_new quat_tdm_rx_4_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_4) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) static const struct snd_kcontrol_new quat_tdm_rx_5_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_5) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) static const struct snd_kcontrol_new quat_tdm_rx_6_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_6) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) static const struct snd_kcontrol_new quat_tdm_rx_7_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) Q6ROUTING_RX_MIXERS(QUATERNARY_TDM_RX_7) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) static const struct snd_kcontrol_new quin_tdm_rx_0_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_0) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) static const struct snd_kcontrol_new quin_tdm_rx_1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) static const struct snd_kcontrol_new quin_tdm_rx_2_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_2) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) static const struct snd_kcontrol_new quin_tdm_rx_3_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_3) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) static const struct snd_kcontrol_new quin_tdm_rx_4_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_4) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) static const struct snd_kcontrol_new quin_tdm_rx_5_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_5) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) static const struct snd_kcontrol_new quin_tdm_rx_6_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_6) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) static const struct snd_kcontrol_new quin_tdm_rx_7_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) Q6ROUTING_RX_MIXERS(QUINARY_TDM_RX_7) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) static const struct snd_kcontrol_new wsa_codec_dma_rx_0_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) Q6ROUTING_RX_MIXERS(WSA_CODEC_DMA_RX_0) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) static const struct snd_kcontrol_new wsa_codec_dma_rx_1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) Q6ROUTING_RX_MIXERS(WSA_CODEC_DMA_RX_1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) static const struct snd_kcontrol_new rx_codec_dma_rx_0_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_0) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) static const struct snd_kcontrol_new rx_codec_dma_rx_1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) static const struct snd_kcontrol_new rx_codec_dma_rx_2_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_2) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) static const struct snd_kcontrol_new rx_codec_dma_rx_3_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_3) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) static const struct snd_kcontrol_new rx_codec_dma_rx_4_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_4) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) static const struct snd_kcontrol_new rx_codec_dma_rx_5_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_5) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) static const struct snd_kcontrol_new rxcodec_dma_rx_6_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_6) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) static const struct snd_kcontrol_new rx_codec_dma_rx_7_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) Q6ROUTING_RX_MIXERS(RX_CODEC_DMA_RX_7) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) static const struct snd_kcontrol_new mmul1_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA1) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) static const struct snd_kcontrol_new mmul2_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA2) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) static const struct snd_kcontrol_new mmul3_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA3) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) static const struct snd_kcontrol_new mmul4_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA4) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) static const struct snd_kcontrol_new mmul5_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA5) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) static const struct snd_kcontrol_new mmul6_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA6) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) static const struct snd_kcontrol_new mmul7_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA7) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) static const struct snd_kcontrol_new mmul8_mixer_controls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) Q6ROUTING_TX_MIXERS(MSM_FRONTEND_DAI_MULTIMEDIA8) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) static const struct snd_soc_dapm_widget msm_qdsp6_widgets[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) /* Mixer definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) SND_SOC_DAPM_MIXER("HDMI Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) hdmi_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) ARRAY_SIZE(hdmi_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) SND_SOC_DAPM_MIXER("DISPLAY_PORT_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) display_port_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) ARRAY_SIZE(display_port_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) SND_SOC_DAPM_MIXER("SLIMBUS_0_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) slimbus_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) ARRAY_SIZE(slimbus_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) SND_SOC_DAPM_MIXER("SLIMBUS_1_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) slimbus_1_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) ARRAY_SIZE(slimbus_1_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) SND_SOC_DAPM_MIXER("SLIMBUS_2_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) slimbus_2_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) ARRAY_SIZE(slimbus_2_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) SND_SOC_DAPM_MIXER("SLIMBUS_3_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) slimbus_3_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) ARRAY_SIZE(slimbus_3_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) SND_SOC_DAPM_MIXER("SLIMBUS_4_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) slimbus_4_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) ARRAY_SIZE(slimbus_4_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) SND_SOC_DAPM_MIXER("SLIMBUS_5_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) slimbus_5_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) ARRAY_SIZE(slimbus_5_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) SND_SOC_DAPM_MIXER("SLIMBUS_6_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) slimbus_6_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) ARRAY_SIZE(slimbus_6_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) SND_SOC_DAPM_MIXER("PRI_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) primary_mi2s_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) ARRAY_SIZE(primary_mi2s_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) SND_SOC_DAPM_MIXER("SEC_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) secondary_mi2s_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) ARRAY_SIZE(secondary_mi2s_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) SND_SOC_DAPM_MIXER("QUAT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) quaternary_mi2s_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) ARRAY_SIZE(quaternary_mi2s_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) SND_SOC_DAPM_MIXER("TERT_MI2S_RX Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) tertiary_mi2s_rx_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) ARRAY_SIZE(tertiary_mi2s_rx_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) pri_tdm_rx_0_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) ARRAY_SIZE(pri_tdm_rx_0_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) pri_tdm_rx_1_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) ARRAY_SIZE(pri_tdm_rx_1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) pri_tdm_rx_2_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) ARRAY_SIZE(pri_tdm_rx_2_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) pri_tdm_rx_3_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) ARRAY_SIZE(pri_tdm_rx_3_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) pri_tdm_rx_4_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) ARRAY_SIZE(pri_tdm_rx_4_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) pri_tdm_rx_5_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) ARRAY_SIZE(pri_tdm_rx_5_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) pri_tdm_rx_6_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) ARRAY_SIZE(pri_tdm_rx_6_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) SND_SOC_DAPM_MIXER("PRIMARY_TDM_RX_7 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) pri_tdm_rx_7_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) ARRAY_SIZE(pri_tdm_rx_7_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) SND_SOC_DAPM_MIXER("SEC_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) sec_tdm_rx_0_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) ARRAY_SIZE(sec_tdm_rx_0_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) SND_SOC_DAPM_MIXER("SEC_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) sec_tdm_rx_1_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) ARRAY_SIZE(sec_tdm_rx_1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) SND_SOC_DAPM_MIXER("SEC_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) sec_tdm_rx_2_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) ARRAY_SIZE(sec_tdm_rx_2_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) SND_SOC_DAPM_MIXER("SEC_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) sec_tdm_rx_3_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) ARRAY_SIZE(sec_tdm_rx_3_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) SND_SOC_DAPM_MIXER("SEC_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) sec_tdm_rx_4_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) ARRAY_SIZE(sec_tdm_rx_4_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) SND_SOC_DAPM_MIXER("SEC_TDM_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) sec_tdm_rx_5_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) ARRAY_SIZE(sec_tdm_rx_5_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) SND_SOC_DAPM_MIXER("SEC_TDM_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) sec_tdm_rx_6_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) ARRAY_SIZE(sec_tdm_rx_6_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) SND_SOC_DAPM_MIXER("SEC_TDM_RX_7 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) sec_tdm_rx_7_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) ARRAY_SIZE(sec_tdm_rx_7_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) SND_SOC_DAPM_MIXER("TERT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) tert_tdm_rx_0_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) ARRAY_SIZE(tert_tdm_rx_0_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) SND_SOC_DAPM_MIXER("TERT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) tert_tdm_rx_1_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) ARRAY_SIZE(tert_tdm_rx_1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) SND_SOC_DAPM_MIXER("TERT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) tert_tdm_rx_2_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) ARRAY_SIZE(tert_tdm_rx_2_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) SND_SOC_DAPM_MIXER("TERT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) tert_tdm_rx_3_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) ARRAY_SIZE(tert_tdm_rx_3_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) SND_SOC_DAPM_MIXER("TERT_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) tert_tdm_rx_4_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) ARRAY_SIZE(tert_tdm_rx_4_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) SND_SOC_DAPM_MIXER("TERT_TDM_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) tert_tdm_rx_5_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) ARRAY_SIZE(tert_tdm_rx_5_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) SND_SOC_DAPM_MIXER("TERT_TDM_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) tert_tdm_rx_6_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) ARRAY_SIZE(tert_tdm_rx_6_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) SND_SOC_DAPM_MIXER("TERT_TDM_RX_7 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) tert_tdm_rx_7_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) ARRAY_SIZE(tert_tdm_rx_7_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) quat_tdm_rx_0_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) ARRAY_SIZE(quat_tdm_rx_0_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) quat_tdm_rx_1_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) ARRAY_SIZE(quat_tdm_rx_1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) quat_tdm_rx_2_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) ARRAY_SIZE(quat_tdm_rx_2_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) quat_tdm_rx_3_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) ARRAY_SIZE(quat_tdm_rx_3_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) quat_tdm_rx_4_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) ARRAY_SIZE(quat_tdm_rx_4_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) quat_tdm_rx_5_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) ARRAY_SIZE(quat_tdm_rx_5_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) quat_tdm_rx_6_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) ARRAY_SIZE(quat_tdm_rx_6_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) SND_SOC_DAPM_MIXER("QUAT_TDM_RX_7 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) quat_tdm_rx_7_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) ARRAY_SIZE(quat_tdm_rx_7_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) quin_tdm_rx_0_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) ARRAY_SIZE(quin_tdm_rx_0_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) quin_tdm_rx_1_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) ARRAY_SIZE(quin_tdm_rx_1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) quin_tdm_rx_2_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) ARRAY_SIZE(quin_tdm_rx_2_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) quin_tdm_rx_3_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) ARRAY_SIZE(quin_tdm_rx_3_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) quin_tdm_rx_4_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) ARRAY_SIZE(quin_tdm_rx_4_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) quin_tdm_rx_5_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) ARRAY_SIZE(quin_tdm_rx_5_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) quin_tdm_rx_6_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) ARRAY_SIZE(quin_tdm_rx_6_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) SND_SOC_DAPM_MIXER("QUIN_TDM_RX_7 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) quin_tdm_rx_7_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) ARRAY_SIZE(quin_tdm_rx_7_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) SND_SOC_DAPM_MIXER("WSA_CODEC_DMA_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) wsa_codec_dma_rx_0_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) ARRAY_SIZE(wsa_codec_dma_rx_0_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) SND_SOC_DAPM_MIXER("WSA_CODEC_DMA_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) wsa_codec_dma_rx_1_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) ARRAY_SIZE(wsa_codec_dma_rx_1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_0 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) rx_codec_dma_rx_0_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) ARRAY_SIZE(rx_codec_dma_rx_0_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_1 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899) rx_codec_dma_rx_1_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) ARRAY_SIZE(rx_codec_dma_rx_1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_2 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) rx_codec_dma_rx_2_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) ARRAY_SIZE(rx_codec_dma_rx_2_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_3 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905) rx_codec_dma_rx_3_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) ARRAY_SIZE(rx_codec_dma_rx_3_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_4 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) rx_codec_dma_rx_4_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909) ARRAY_SIZE(rx_codec_dma_rx_4_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_5 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) rx_codec_dma_rx_5_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912) ARRAY_SIZE(rx_codec_dma_rx_5_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_6 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) rxcodec_dma_rx_6_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) ARRAY_SIZE(rxcodec_dma_rx_6_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) SND_SOC_DAPM_MIXER("RX_CODEC_DMA_RX_7 Audio Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) rx_codec_dma_rx_7_mixer_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) ARRAY_SIZE(rx_codec_dma_rx_7_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) SND_SOC_DAPM_MIXER("MultiMedia1 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920) mmul1_mixer_controls, ARRAY_SIZE(mmul1_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) SND_SOC_DAPM_MIXER("MultiMedia2 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) mmul2_mixer_controls, ARRAY_SIZE(mmul2_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) SND_SOC_DAPM_MIXER("MultiMedia3 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) mmul3_mixer_controls, ARRAY_SIZE(mmul3_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) SND_SOC_DAPM_MIXER("MultiMedia4 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) mmul4_mixer_controls, ARRAY_SIZE(mmul4_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927) SND_SOC_DAPM_MIXER("MultiMedia5 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) mmul5_mixer_controls, ARRAY_SIZE(mmul5_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) SND_SOC_DAPM_MIXER("MultiMedia6 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) mmul6_mixer_controls, ARRAY_SIZE(mmul6_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) SND_SOC_DAPM_MIXER("MultiMedia7 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) mmul7_mixer_controls, ARRAY_SIZE(mmul7_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933) SND_SOC_DAPM_MIXER("MultiMedia8 Mixer", SND_SOC_NOPM, 0, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) mmul8_mixer_controls, ARRAY_SIZE(mmul8_mixer_controls)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938) static const struct snd_soc_dapm_route intercon[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) Q6ROUTING_RX_DAPM_ROUTE("HDMI Mixer", "HDMI_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) Q6ROUTING_RX_DAPM_ROUTE("DISPLAY_PORT_RX Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) "DISPLAY_PORT_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) Q6ROUTING_RX_DAPM_ROUTE("SLIMBUS_0_RX Audio Mixer", "SLIMBUS_0_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) Q6ROUTING_RX_DAPM_ROUTE("SLIMBUS_1_RX Audio Mixer", "SLIMBUS_1_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) Q6ROUTING_RX_DAPM_ROUTE("SLIMBUS_2_RX Audio Mixer", "SLIMBUS_2_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) Q6ROUTING_RX_DAPM_ROUTE("SLIMBUS_3_RX Audio Mixer", "SLIMBUS_3_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) Q6ROUTING_RX_DAPM_ROUTE("SLIMBUS_4_RX Audio Mixer", "SLIMBUS_4_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) Q6ROUTING_RX_DAPM_ROUTE("SLIMBUS_5_RX Audio Mixer", "SLIMBUS_5_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) Q6ROUTING_RX_DAPM_ROUTE("SLIMBUS_6_RX Audio Mixer", "SLIMBUS_6_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949) Q6ROUTING_RX_DAPM_ROUTE("QUAT_MI2S_RX Audio Mixer", "QUAT_MI2S_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) Q6ROUTING_RX_DAPM_ROUTE("TERT_MI2S_RX Audio Mixer", "TERT_MI2S_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) Q6ROUTING_RX_DAPM_ROUTE("SEC_MI2S_RX Audio Mixer", "SEC_MI2S_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) Q6ROUTING_RX_DAPM_ROUTE("PRI_MI2S_RX Audio Mixer", "PRI_MI2S_RX"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_0 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) "PRIMARY_TDM_RX_0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_1 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) "PRIMARY_TDM_RX_1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_2 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) "PRIMARY_TDM_RX_2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_3 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) "PRIMARY_TDM_RX_3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_4 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) "PRIMARY_TDM_RX_4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_5 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) "PRIMARY_TDM_RX_5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_6 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) "PRIMARY_TDM_RX_6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) Q6ROUTING_RX_DAPM_ROUTE("PRIMARY_TDM_RX_7 Audio Mixer",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) "PRIMARY_TDM_RX_7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_0 Audio Mixer", "SEC_TDM_RX_0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_1 Audio Mixer", "SEC_TDM_RX_1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_2 Audio Mixer", "SEC_TDM_RX_2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_3 Audio Mixer", "SEC_TDM_RX_3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_4 Audio Mixer", "SEC_TDM_RX_4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_5 Audio Mixer", "SEC_TDM_RX_5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_6 Audio Mixer", "SEC_TDM_RX_6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) Q6ROUTING_RX_DAPM_ROUTE("SEC_TDM_RX_7 Audio Mixer", "SEC_TDM_RX_7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_0 Audio Mixer", "TERT_TDM_RX_0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_1 Audio Mixer", "TERT_TDM_RX_1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_2 Audio Mixer", "TERT_TDM_RX_2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_3 Audio Mixer", "TERT_TDM_RX_3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_4 Audio Mixer", "TERT_TDM_RX_4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_5 Audio Mixer", "TERT_TDM_RX_5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_6 Audio Mixer", "TERT_TDM_RX_6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) Q6ROUTING_RX_DAPM_ROUTE("TERT_TDM_RX_7 Audio Mixer", "TERT_TDM_RX_7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_0 Audio Mixer", "QUAT_TDM_RX_0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_1 Audio Mixer", "QUAT_TDM_RX_1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_2 Audio Mixer", "QUAT_TDM_RX_2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_3 Audio Mixer", "QUAT_TDM_RX_3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_4 Audio Mixer", "QUAT_TDM_RX_4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_5 Audio Mixer", "QUAT_TDM_RX_5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_6 Audio Mixer", "QUAT_TDM_RX_6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) Q6ROUTING_RX_DAPM_ROUTE("QUAT_TDM_RX_7 Audio Mixer", "QUAT_TDM_RX_7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_0 Audio Mixer", "QUIN_TDM_RX_0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_1 Audio Mixer", "QUIN_TDM_RX_1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_2 Audio Mixer", "QUIN_TDM_RX_2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_3 Audio Mixer", "QUIN_TDM_RX_3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_4 Audio Mixer", "QUIN_TDM_RX_4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_5 Audio Mixer", "QUIN_TDM_RX_5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_6 Audio Mixer", "QUIN_TDM_RX_6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) Q6ROUTING_RX_DAPM_ROUTE("QUIN_TDM_RX_7 Audio Mixer", "QUIN_TDM_RX_7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) Q6ROUTING_RX_DAPM_ROUTE("WSA_CODEC_DMA_RX_0 Audio Mixer", "WSA_CODEC_DMA_RX_0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) Q6ROUTING_RX_DAPM_ROUTE("WSA_CODEC_DMA_RX_1 Audio Mixer", "WSA_CODEC_DMA_RX_1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_0 Audio Mixer", "RX_CODEC_DMA_RX_0"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_1 Audio Mixer", "RX_CODEC_DMA_RX_1"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_2 Audio Mixer", "RX_CODEC_DMA_RX_2"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_3 Audio Mixer", "RX_CODEC_DMA_RX_3"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_4 Audio Mixer", "RX_CODEC_DMA_RX_4"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_5 Audio Mixer", "RX_CODEC_DMA_RX_5"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_6 Audio Mixer", "RX_CODEC_DMA_RX_6"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) Q6ROUTING_RX_DAPM_ROUTE("RX_CODEC_DMA_RX_7 Audio Mixer", "RX_CODEC_DMA_RX_7"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia1 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia2 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia3 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia4 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia5 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia6 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia7 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) Q6ROUTING_TX_DAPM_ROUTE("MultiMedia8 Mixer"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) {"MM_UL1", NULL, "MultiMedia1 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) {"MM_UL2", NULL, "MultiMedia2 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) {"MM_UL3", NULL, "MultiMedia3 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) {"MM_UL4", NULL, "MultiMedia4 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) {"MM_UL5", NULL, "MultiMedia5 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) {"MM_UL6", NULL, "MultiMedia6 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) {"MM_UL7", NULL, "MultiMedia7 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) {"MM_UL8", NULL, "MultiMedia8 Mixer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) static int routing_hw_params(struct snd_soc_component *component,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) struct snd_pcm_substream *substream,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) struct snd_pcm_hw_params *params)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) struct msm_routing_data *data = dev_get_drvdata(component->dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) unsigned int be_id = asoc_rtd_to_cpu(rtd, 0)->id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) struct session_data *session;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) int path_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) path_type = ADM_PATH_PLAYBACK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) path_type = ADM_PATH_LIVE_REC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) if (be_id >= AFE_MAX_PORTS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) return -EINVAL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) session = &data->port_data[be_id];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) mutex_lock(&data->lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) session->path_type = path_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) session->sample_rate = params_rate(params);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) session->channels = params_channels(params);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) switch (params_format(params)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) case SNDRV_PCM_FORMAT_S16_LE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) session->bits_per_sample = 16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) case SNDRV_PCM_FORMAT_S24_LE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) session->bits_per_sample = 24;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) mutex_unlock(&data->lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) static int msm_routing_probe(struct snd_soc_component *c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) for (i = 0; i < MAX_SESSIONS; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) routing_data->sessions[i].port_id = -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) routing_data->sessions[i].fedai_id = -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) static unsigned int q6routing_reg_read(struct snd_soc_component *component,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) unsigned int reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) /* default value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) static int q6routing_reg_write(struct snd_soc_component *component,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) unsigned int reg, unsigned int val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) /* dummy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) static const struct snd_soc_component_driver msm_soc_routing_component = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) .probe = msm_routing_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) .name = DRV_NAME,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) .hw_params = routing_hw_params,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) .dapm_widgets = msm_qdsp6_widgets,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) .num_dapm_widgets = ARRAY_SIZE(msm_qdsp6_widgets),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) .dapm_routes = intercon,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) .num_dapm_routes = ARRAY_SIZE(intercon),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) .read = q6routing_reg_read,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) .write = q6routing_reg_write,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) static int q6pcm_routing_probe(struct platform_device *pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) struct device *dev = &pdev->dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) routing_data = kzalloc(sizeof(*routing_data), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) if (!routing_data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) routing_data->dev = dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) mutex_init(&routing_data->lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) dev_set_drvdata(dev, routing_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) return devm_snd_soc_register_component(dev, &msm_soc_routing_component,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) NULL, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) static int q6pcm_routing_remove(struct platform_device *pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) kfree(routing_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) routing_data = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) #ifdef CONFIG_OF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) static const struct of_device_id q6pcm_routing_device_id[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) { .compatible = "qcom,q6adm-routing" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) {},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) MODULE_DEVICE_TABLE(of, q6pcm_routing_device_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) static struct platform_driver q6pcm_routing_platform_driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) .driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) .name = "q6routing",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) .of_match_table = of_match_ptr(q6pcm_routing_device_id),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) .probe = q6pcm_routing_probe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) .remove = q6pcm_routing_remove,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) module_platform_driver(q6pcm_routing_platform_driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) MODULE_DESCRIPTION("Q6 Routing platform");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) MODULE_LICENSE("GPL v2");