mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 13:49:24 -04:00
ASoC: Add port map for yupik
As yupik idp has wcd937x support, add port map for same. Change-Id: I9b907fc2e5aa4a9ad810f01f4be5cc5b2d1659b5 Signed-off-by: Vatsal Bucha <vbucha@codeaurora.org>
This commit is contained in:
parent
9cc1d0d01d
commit
98bea1dcf4
1 changed files with 167 additions and 24 deletions
189
asoc/lahaina.c
189
asoc/lahaina.c
|
|
@ -31,8 +31,10 @@
|
|||
#include "asoc/msm-cdc-pinctrl.h"
|
||||
#include "asoc/wcd-mbhc-v2.h"
|
||||
#include "codecs/wcd938x/wcd938x-mbhc.h"
|
||||
#include "codecs/wcd937x/wcd937x-mbhc.h"
|
||||
#include "codecs/wsa883x/wsa883x.h"
|
||||
#include "codecs/wcd938x/wcd938x.h"
|
||||
#include "codecs/wcd937x/wcd937x.h"
|
||||
#include "codecs/bolero/bolero-cdc.h"
|
||||
#include <dt-bindings/sound/audio-codec-port-types.h>
|
||||
#include "codecs/bolero/wsa-macro.h"
|
||||
|
|
@ -828,6 +830,40 @@ static SOC_ENUM_SINGLE_EXT_DECL(va_cdc_dma_tx_1_sample_rate,
|
|||
static SOC_ENUM_SINGLE_EXT_DECL(va_cdc_dma_tx_2_sample_rate,
|
||||
cdc_dma_sample_rate_text);
|
||||
|
||||
/* WCD9370 */
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_0_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_1_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_2_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_3_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_5_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_0_sample_rate,
|
||||
cdc80_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_1_sample_rate,
|
||||
cdc80_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_2_sample_rate,
|
||||
cdc80_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_3_sample_rate,
|
||||
cdc80_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc70_dma_rx_5_sample_rate,
|
||||
cdc80_dma_sample_rate_text);
|
||||
|
||||
/* WCD9375 */
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_0_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_1_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_2_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_3_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_5_format, bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_0_sample_rate,
|
||||
cdc_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_1_sample_rate,
|
||||
cdc_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_2_sample_rate,
|
||||
cdc_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_3_sample_rate,
|
||||
cdc_dma_sample_rate_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc75_dma_rx_5_sample_rate,
|
||||
cdc_dma_sample_rate_text);
|
||||
|
||||
/* WCD9380 */
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc80_dma_rx_0_format, cdc80_bit_format_text);
|
||||
static SOC_ENUM_SINGLE_EXT_DECL(rx_cdc80_dma_rx_1_format, cdc80_bit_format_text);
|
||||
|
|
@ -3769,6 +3805,72 @@ static const struct snd_kcontrol_new msm_int_snd_controls[] = {
|
|||
cdc_dma_tx_sample_rate_put),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new msm_int_wcd9370_snd_controls[] = {
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_0 Format", rx_cdc70_dma_rx_0_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_1 Format", rx_cdc70_dma_rx_1_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_2 Format", rx_cdc70_dma_rx_2_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_3 Format", rx_cdc70_dma_rx_3_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_5 Format", rx_cdc70_dma_rx_5_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_0 SampleRate",
|
||||
rx_cdc70_dma_rx_0_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_1 SampleRate",
|
||||
rx_cdc70_dma_rx_1_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_2 SampleRate",
|
||||
rx_cdc70_dma_rx_2_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_3 SampleRate",
|
||||
rx_cdc70_dma_rx_3_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_5 SampleRate",
|
||||
rx_cdc70_dma_rx_5_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new msm_int_wcd9375_snd_controls[] = {
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_0 Format", rx_cdc75_dma_rx_0_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_1 Format", rx_cdc75_dma_rx_1_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_2 Format", rx_cdc75_dma_rx_2_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_3 Format", rx_cdc75_dma_rx_3_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_5 Format", rx_cdc75_dma_rx_5_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_0 SampleRate",
|
||||
rx_cdc75_dma_rx_0_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_1 SampleRate",
|
||||
rx_cdc75_dma_rx_1_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_2 SampleRate",
|
||||
rx_cdc75_dma_rx_2_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_3 SampleRate",
|
||||
rx_cdc75_dma_rx_3_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_5 SampleRate",
|
||||
rx_cdc75_dma_rx_5_sample_rate,
|
||||
cdc_dma_rx_sample_rate_get,
|
||||
cdc_dma_rx_sample_rate_put),
|
||||
};
|
||||
|
||||
static const struct snd_kcontrol_new msm_int_wcd9380_snd_controls[] = {
|
||||
SOC_ENUM_EXT("RX_CDC_DMA_RX_0 Format", rx_cdc80_dma_rx_0_format,
|
||||
cdc_dma_rx_format_get, cdc_dma_rx_format_put),
|
||||
|
|
@ -7407,6 +7509,7 @@ static int msm_snd_card_late_probe(struct snd_soc_card *card)
|
|||
struct msm_asoc_mach_data *pdata;
|
||||
int ret = 0;
|
||||
void *mbhc_calibration;
|
||||
bool is_wcd937x = false;
|
||||
|
||||
pdata = snd_soc_card_get_drvdata(card);
|
||||
if (!pdata)
|
||||
|
|
@ -7425,15 +7528,23 @@ static int msm_snd_card_late_probe(struct snd_soc_card *card)
|
|||
|
||||
component = snd_soc_rtdcom_lookup(rtd, WCD938X_DRV_NAME);
|
||||
if (!component) {
|
||||
pr_err("%s component is NULL\n", __func__);
|
||||
return -EINVAL;
|
||||
component = snd_soc_rtdcom_lookup(rtd, WCD937X_DRV_NAME);
|
||||
if (!component) {
|
||||
pr_err("%s component is NULL\n", __func__);
|
||||
return -EINVAL;
|
||||
} else {
|
||||
is_wcd937x = true;
|
||||
}
|
||||
}
|
||||
|
||||
mbhc_calibration = def_wcd_mbhc_cal();
|
||||
if (!mbhc_calibration)
|
||||
return -ENOMEM;
|
||||
wcd_mbhc_cfg.calibration = mbhc_calibration;
|
||||
ret = wcd938x_mbhc_hs_detect(component, &wcd_mbhc_cfg);
|
||||
if (!is_wcd937x)
|
||||
ret = wcd938x_mbhc_hs_detect(component, &wcd_mbhc_cfg);
|
||||
else
|
||||
ret = wcd937x_mbhc_hs_detect(component, &wcd_mbhc_cfg);
|
||||
if (ret) {
|
||||
dev_err(component->dev, "%s: mbhc hs detect failed, err:%d\n",
|
||||
__func__, ret);
|
||||
|
|
@ -7690,6 +7801,7 @@ static int msm_int_wsa_init(struct snd_soc_pcm_runtime *rtd)
|
|||
static int msm_rx_tx_codec_init(struct snd_soc_pcm_runtime *rtd)
|
||||
{
|
||||
struct snd_soc_component *component = NULL;
|
||||
struct snd_soc_component *bolero_component = NULL;
|
||||
struct snd_soc_dapm_context *dapm = NULL;
|
||||
int ret = 0;
|
||||
int codec_variant = -1;
|
||||
|
|
@ -7706,6 +7818,8 @@ static int msm_rx_tx_codec_init(struct snd_soc_pcm_runtime *rtd)
|
|||
pr_err("%s: could not find component for bolero_codec\n",
|
||||
__func__);
|
||||
return ret;
|
||||
} else {
|
||||
bolero_component = component;
|
||||
}
|
||||
|
||||
dapm = snd_soc_component_get_dapm(component);
|
||||
|
|
@ -7752,13 +7866,6 @@ static int msm_rx_tx_codec_init(struct snd_soc_pcm_runtime *rtd)
|
|||
|
||||
card = rtd->card->snd_card;
|
||||
|
||||
if (strnstr(rtd->card->name, "shima", strlen(rtd->card->name)) != NULL)
|
||||
bolero_set_port_map(component, ARRAY_SIZE(sm_port_map_shima),
|
||||
sm_port_map_shima);
|
||||
else
|
||||
bolero_set_port_map(component, ARRAY_SIZE(sm_port_map),
|
||||
sm_port_map);
|
||||
|
||||
if (!pdata->codec_root) {
|
||||
entry = msm_snd_info_create_subdir(card->module, "codecs",
|
||||
card->proc_root);
|
||||
|
|
@ -7778,8 +7885,11 @@ static int msm_rx_tx_codec_init(struct snd_soc_pcm_runtime *rtd)
|
|||
}
|
||||
component = snd_soc_rtdcom_lookup(rtd, WCD938X_DRV_NAME);
|
||||
if (!component) {
|
||||
pr_err("%s component is NULL\n", __func__);
|
||||
return -EINVAL;
|
||||
component = snd_soc_rtdcom_lookup(rtd, WCD937X_DRV_NAME);
|
||||
if (!component) {
|
||||
pr_err("%s component is NULL\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
dapm = snd_soc_component_get_dapm(component);
|
||||
card = component->card->snd_card;
|
||||
|
|
@ -7794,18 +7904,51 @@ static int msm_rx_tx_codec_init(struct snd_soc_pcm_runtime *rtd)
|
|||
snd_soc_dapm_ignore_suspend(dapm, "AMIC4");
|
||||
snd_soc_dapm_sync(dapm);
|
||||
|
||||
wcd938x_info_create_codec_entry(pdata->codec_root, component);
|
||||
if (!strncmp(component->driver->name, WCD937X_DRV_NAME,
|
||||
strlen(WCD937X_DRV_NAME))) {
|
||||
wcd937x_info_create_codec_entry(pdata->codec_root, component);
|
||||
codec_variant = wcd937x_get_codec_variant(component);
|
||||
dev_dbg(component->dev, "%s: variant %d\n",
|
||||
__func__, codec_variant);
|
||||
if (codec_variant == WCD9370_VARIANT)
|
||||
ret = snd_soc_add_component_controls(component,
|
||||
msm_int_wcd9370_snd_controls,
|
||||
ARRAY_SIZE(msm_int_wcd9370_snd_controls));
|
||||
else if (codec_variant == WCD9375_VARIANT)
|
||||
ret = snd_soc_add_component_controls(component,
|
||||
msm_int_wcd9375_snd_controls,
|
||||
ARRAY_SIZE(msm_int_wcd9375_snd_controls));
|
||||
bolero_set_port_map(bolero_component,
|
||||
ARRAY_SIZE(sm_port_map_wcd937x), sm_port_map_wcd937x);
|
||||
} else if (!strncmp(component->driver->name, WCD938X_DRV_NAME,
|
||||
strlen(WCD938X_DRV_NAME))) {
|
||||
wcd938x_info_create_codec_entry(pdata->codec_root, component);
|
||||
|
||||
codec_variant = wcd938x_get_codec_variant(component);
|
||||
dev_dbg(component->dev, "%s: variant %d\n", __func__, codec_variant);
|
||||
if (codec_variant == WCD9380)
|
||||
ret = snd_soc_add_component_controls(component,
|
||||
msm_int_wcd9380_snd_controls,
|
||||
ARRAY_SIZE(msm_int_wcd9380_snd_controls));
|
||||
else if (codec_variant == WCD9385)
|
||||
ret = snd_soc_add_component_controls(component,
|
||||
msm_int_wcd9385_snd_controls,
|
||||
ARRAY_SIZE(msm_int_wcd9385_snd_controls));
|
||||
codec_variant = wcd938x_get_codec_variant(component);
|
||||
dev_dbg(component->dev, "%s: variant %d\n",
|
||||
__func__, codec_variant);
|
||||
if (codec_variant == WCD9380)
|
||||
ret = snd_soc_add_component_controls(component,
|
||||
msm_int_wcd9380_snd_controls,
|
||||
ARRAY_SIZE(msm_int_wcd9380_snd_controls));
|
||||
else if (codec_variant == WCD9385)
|
||||
ret = snd_soc_add_component_controls(component,
|
||||
msm_int_wcd9385_snd_controls,
|
||||
ARRAY_SIZE(msm_int_wcd9385_snd_controls));
|
||||
|
||||
if ((strnstr(rtd->card->name, "shima", strlen(rtd->card->name))
|
||||
!= NULL) || (strnstr(rtd->card->name, "yupik",
|
||||
strlen(rtd->card->name)) != NULL))
|
||||
bolero_set_port_map(bolero_component,
|
||||
ARRAY_SIZE(sm_port_map_shima),
|
||||
sm_port_map_shima);
|
||||
else
|
||||
bolero_set_port_map(bolero_component,
|
||||
ARRAY_SIZE(sm_port_map), sm_port_map);
|
||||
} else {
|
||||
bolero_set_port_map(bolero_component, ARRAY_SIZE(sm_port_map),
|
||||
sm_port_map);
|
||||
}
|
||||
|
||||
if (ret < 0) {
|
||||
dev_err(component->dev, "%s: add codec specific snd controls failed: %d\n",
|
||||
|
|
|
|||
Loading…
Reference in a new issue