diff --git a/asoc/codecs/wcd937x/wcd937x.c b/asoc/codecs/wcd937x/wcd937x.c index b8a2c6cadbc8..f264bdf1c267 100644 --- a/asoc/codecs/wcd937x/wcd937x.c +++ b/asoc/codecs/wcd937x/wcd937x.c @@ -27,8 +27,6 @@ #include "internal.h" #include "asoc/bolero-slave-internal.h" -#define WCD9370_VARIANT 0 -#define WCD9375_VARIANT 5 #define WCD937X_VARIANT_ENTRY_SIZE 32 #define NUM_SWRS_DT_PARAMS 5 @@ -2624,6 +2622,30 @@ static struct snd_info_entry_ops wcd937x_variant_ops = { .read = wcd937x_variant_read, }; +/* + * wcd937x_get_codec_variant + * @component: component instance + * + * Return: codec variant or -EINVAL in error. + */ +int wcd937x_get_codec_variant(struct snd_soc_component *component) +{ + struct wcd937x_priv *priv = NULL; + + if (!component) + return -EINVAL; + + priv = snd_soc_component_get_drvdata(component); + if (!priv) { + dev_err(component->dev, + "%s:wcd937x not probed\n", __func__); + return -EINVAL; + } + + return priv->variant; +} +EXPORT_SYMBOL(wcd937x_get_codec_variant); + /* * wcd937x_info_create_codec_entry - creates wcd937x module * @codec_root: The parent directory diff --git a/asoc/codecs/wcd937x/wcd937x.h b/asoc/codecs/wcd937x/wcd937x.h index 5ec1ac204f14..c97ee78254ad 100644 --- a/asoc/codecs/wcd937x/wcd937x.h +++ b/asoc/codecs/wcd937x/wcd937x.h @@ -17,6 +17,11 @@ struct wcd937x_swr_slave_ch_map { u8 index; }; +enum { + WCD9370_VARIANT = 0, + WCD9375_VARIANT = 5, +}; + static const struct wcd937x_swr_slave_ch_map wcd937x_swr_slv_tx_ch_idx[] = { {ADC1, 0}, {ADC2, 1}, @@ -51,6 +56,8 @@ static int wcd937x_swr_master_ch_map[] = { extern int wcd937x_info_create_codec_entry(struct snd_info_entry *codec_root, struct snd_soc_component *component); +extern int wcd937x_get_codec_variant(struct snd_soc_component *component); + static inline int wcd937x_slave_get_master_ch_val(int ch) { int i; @@ -94,6 +101,10 @@ static inline int wcd937x_slave_get_slave_ch_val(int ch) { return 0; } +static inline int wcd937x_get_codec_variant(struct snd_soc_component *component) +{ + return 0; +} #endif /* CONFIG_SND_SOC_WCD937X */ #endif diff --git a/asoc/lahaina-port-config.h b/asoc/lahaina-port-config.h index 74b3ed9d4585..41c294ae0b67 100644 --- a/asoc/lahaina-port-config.h +++ b/asoc/lahaina-port-config.h @@ -96,6 +96,12 @@ static struct port_params tx_frame_params_shima_0p6MHz[SWR_MSTR_PORT_LEN] = { {1, 1, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0x00, 0x00}, /* TX3 */ }; +static struct port_params tx_frame_params_wcd937x[SWR_MSTR_PORT_LEN] = { + {3, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 1, 0x00, 0x00}, /* TX1 */ + {3, 1, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0x00, 0x00}, /* TX2 */ + {3, 2, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0x00, 0x00}, /* TX3 */ +}; + static struct swr_mstr_port_map sm_port_map[] = { {TX_MACRO, SWR_UC0, tx_frame_params_default}, {TX_MACRO, SWR_UC1, tx_frame_params_4p8MHz}, @@ -116,4 +122,14 @@ static struct swr_mstr_port_map sm_port_map_shima[] = { {WSA_MACRO, SWR_UC0, wsa_frame_params_default}, }; +static struct swr_mstr_port_map sm_port_map_wcd937x[] = { + {TX_MACRO, SWR_UC0, tx_frame_params_wcd937x}, + {TX_MACRO, SWR_UC1, tx_frame_params_wcd937x}, + {TX_MACRO, SWR_UC2, tx_frame_params_wcd937x}, + {RX_MACRO, SWR_UC0, rx_frame_params_default}, + {RX_MACRO, SWR_UC1, rx_frame_params_dsd}, + {RX_MACRO, SWR_UC2, rx_frame_params_44p1KHz}, + {WSA_MACRO, SWR_UC0, wsa_frame_params_default}, +}; + #endif /* _LAHAINA_PORT_CONFIG */ diff --git a/asoc/msm_dailink.h b/asoc/msm_dailink.h index 6685ddeff7ca..d3c49a17d408 100644 --- a/asoc/msm_dailink.h +++ b/asoc/msm_dailink.h @@ -209,7 +209,8 @@ SND_SOC_DAILINK_DEFS(slimbus8_hostless, SND_SOC_DAILINK_DEFS(tx_cdcdma5_tx, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45115")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx3"), - COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-hostless"))); SND_SOC_DAILINK_DEFS(multimedia31, @@ -662,31 +663,36 @@ SND_SOC_DAILINK_DEFS(wsa_dma_tx1, SND_SOC_DAILINK_DEFS(rx_dma_rx0, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45104")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx1"), - COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx1, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45106")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx2"), - COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx2, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45108")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx3"), - COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx3, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45110")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx4"), - COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx5, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45114")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "rx_macro_rx5"), - COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(rx_dma_rx6, @@ -698,13 +704,15 @@ SND_SOC_DAILINK_DEFS(rx_dma_rx6, SND_SOC_DAILINK_DEFS(tx_dma_tx3, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45111")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx1"), - COMP_CODEC("wcd938x_codec", "wcd938x_cdc")), + COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc")), DAILINK_COMP_ARRAY(COMP_PLATFORM("msm-pcm-routing"))); SND_SOC_DAILINK_DEFS(tx_dma_tx4, DAILINK_COMP_ARRAY(COMP_CPU("msm-dai-cdc-dma-dev.45113")), DAILINK_COMP_ARRAY(COMP_CODEC("bolero_codec", "tx_macro_tx2"), COMP_CODEC("wcd938x_codec", "wcd938x_cdc"), + COMP_CODEC("wcd937x_codec", "wcd937x_cdc"), COMP_CODEC("swr-dmic.01", "swr_dmic_tx0"), COMP_CODEC("swr-dmic.02", "swr_dmic_tx1"), COMP_CODEC("swr-dmic.03", "swr_dmic_tx2"),