asoc: Talos-tanggu bringup fixes
Bringup fixes to enumerate tanggu codec on talos. Change-Id: Ic9c43ec0b870f6fec3c6d21fd4d77606c7ed94b1 Signed-off-by: Ramprasad Katkam <katkam@codeaurora.org>
This commit is contained in:
@@ -769,6 +769,9 @@ static int rx_macro_mclk_enable(struct rx_macro_priv *rx_priv,
|
|||||||
regmap_update_bits(regmap,
|
regmap_update_bits(regmap,
|
||||||
BOLERO_CDC_RX_CLK_RST_CTRL_MCLK_CONTROL,
|
BOLERO_CDC_RX_CLK_RST_CTRL_MCLK_CONTROL,
|
||||||
0x01, 0x01);
|
0x01, 0x01);
|
||||||
|
regmap_update_bits(regmap,
|
||||||
|
BOLERO_CDC_RX_CLK_RST_CTRL_MCLK_CONTROL,
|
||||||
|
0x02, 0x02);
|
||||||
regmap_update_bits(regmap,
|
regmap_update_bits(regmap,
|
||||||
BOLERO_CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
|
BOLERO_CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
|
||||||
0x01, 0x01);
|
0x01, 0x01);
|
||||||
@@ -1022,6 +1025,7 @@ static int rx_macro_enable_mix_path(struct snd_soc_dapm_widget *w,
|
|||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
snd_soc_write(codec, gain_reg,
|
snd_soc_write(codec, gain_reg,
|
||||||
snd_soc_read(codec, gain_reg));
|
snd_soc_read(codec, gain_reg));
|
||||||
|
snd_soc_update_bits(codec, mix_reg, 0x10, 0x00);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
/* Clk Disable */
|
/* Clk Disable */
|
||||||
@@ -1071,6 +1075,7 @@ static int rx_macro_enable_main_path(struct snd_soc_dapm_widget *w,
|
|||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
snd_soc_write(codec, gain_reg,
|
snd_soc_write(codec, gain_reg,
|
||||||
snd_soc_read(codec, gain_reg));
|
snd_soc_read(codec, gain_reg));
|
||||||
|
snd_soc_update_bits(codec, reg, 0x10, 0x00);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
rx_macro_enable_interp_clk(codec, event, w->shift);
|
rx_macro_enable_interp_clk(codec, event, w->shift);
|
||||||
@@ -2393,12 +2398,15 @@ static int rx_swrm_clock(void *handle, bool enable)
|
|||||||
__func__);
|
__func__);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
regmap_update_bits(regmap,
|
||||||
|
BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
|
||||||
|
0x02, 0x02);
|
||||||
regmap_update_bits(regmap,
|
regmap_update_bits(regmap,
|
||||||
BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
|
BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
|
||||||
0x01, 0x01);
|
0x01, 0x01);
|
||||||
regmap_update_bits(regmap,
|
regmap_update_bits(regmap,
|
||||||
BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
|
BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
|
||||||
0x1C, 0x0C);
|
0x02, 0x00);
|
||||||
msm_cdc_pinctrl_select_active_state(
|
msm_cdc_pinctrl_select_active_state(
|
||||||
rx_priv->rx_swr_gpio_p);
|
rx_priv->rx_swr_gpio_p);
|
||||||
}
|
}
|
||||||
@@ -2471,6 +2479,15 @@ static int rx_macro_init(struct snd_soc_codec *codec)
|
|||||||
dev_err(rx_dev, "%s: failed to add snd_ctls\n", __func__);
|
dev_err(rx_dev, "%s: failed to add snd_ctls\n", __func__);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX0_RX_PATH_DSM_CTL, 0x01, 0x01);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX1_RX_PATH_DSM_CTL, 0x01, 0x01);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX2_RX_PATH_DSM_CTL, 0x01, 0x01);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX0_RX_PATH_SEC7, 0x07, 0x02);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX1_RX_PATH_SEC7, 0x07, 0x02);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX2_RX_PATH_SEC7, 0x07, 0x02);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX0_RX_PATH_CFG3, 0x03, 0x02);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX1_RX_PATH_CFG3, 0x03, 0x02);
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_RX_RX2_RX_PATH_CFG3, 0x03, 0x02);
|
||||||
|
|
||||||
rx_priv->codec = codec;
|
rx_priv->codec = codec;
|
||||||
|
|
||||||
|
@@ -336,7 +336,7 @@ static void tx_macro_mute_update_callback(struct work_struct *work)
|
|||||||
hpf_gate_reg = BOLERO_CDC_TX0_TX_PATH_SEC2 +
|
hpf_gate_reg = BOLERO_CDC_TX0_TX_PATH_SEC2 +
|
||||||
TX_MACRO_TX_PATH_OFFSET * decimator;
|
TX_MACRO_TX_PATH_OFFSET * decimator;
|
||||||
snd_soc_update_bits(codec, hpf_gate_reg, 0x01, 0x01);
|
snd_soc_update_bits(codec, hpf_gate_reg, 0x01, 0x01);
|
||||||
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x01, 0x00);
|
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x10, 0x00);
|
||||||
dev_dbg(tx_priv->dev, "%s: decimator %u unmute\n",
|
dev_dbg(tx_priv->dev, "%s: decimator %u unmute\n",
|
||||||
__func__, decimator);
|
__func__, decimator);
|
||||||
}
|
}
|
||||||
@@ -521,6 +521,9 @@ static int tx_macro_enable_dmic(struct snd_soc_dapm_widget *w,
|
|||||||
case SND_SOC_DAPM_PRE_PMU:
|
case SND_SOC_DAPM_PRE_PMU:
|
||||||
(*dmic_clk_cnt)++;
|
(*dmic_clk_cnt)++;
|
||||||
if (*dmic_clk_cnt == 1) {
|
if (*dmic_clk_cnt == 1) {
|
||||||
|
snd_soc_update_bits(codec, BOLERO_CDC_VA_TOP_CSR_DMIC_CFG,
|
||||||
|
0x80, 0x00);
|
||||||
|
|
||||||
snd_soc_update_bits(codec, dmic_clk_reg,
|
snd_soc_update_bits(codec, dmic_clk_reg,
|
||||||
0x0E, tx_priv->dmic_clk_div << 0x1);
|
0x0E, tx_priv->dmic_clk_div << 0x1);
|
||||||
snd_soc_update_bits(codec, dmic_clk_reg,
|
snd_soc_update_bits(codec, dmic_clk_reg,
|
||||||
@@ -583,6 +586,7 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
|
|||||||
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x10, 0x10);
|
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x10, 0x10);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMU:
|
case SND_SOC_DAPM_POST_PMU:
|
||||||
|
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x20, 0x20);
|
||||||
snd_soc_update_bits(codec, hpf_gate_reg, 0x01, 0x00);
|
snd_soc_update_bits(codec, hpf_gate_reg, 0x01, 0x00);
|
||||||
|
|
||||||
/* schedule work queue to Remove Mute */
|
/* schedule work queue to Remove Mute */
|
||||||
@@ -613,6 +617,7 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
|
|||||||
&tx_priv->tx_mute_dwork[decimator].dwork);
|
&tx_priv->tx_mute_dwork[decimator].dwork);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
|
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x20, 0x00);
|
||||||
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x10, 0x00);
|
snd_soc_update_bits(codec, tx_vol_ctl_reg, 0x10, 0x00);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -61,7 +61,7 @@ struct wcd937x_priv {
|
|||||||
u32 hph_mode;
|
u32 hph_mode;
|
||||||
|
|
||||||
struct irq_domain *virq;
|
struct irq_domain *virq;
|
||||||
struct wcd_irq_info *irq_info;
|
struct wcd_irq_info irq_info;
|
||||||
u32 rx_clk_cnt;
|
u32 rx_clk_cnt;
|
||||||
int num_irq_regs;
|
int num_irq_regs;
|
||||||
|
|
||||||
|
@@ -169,7 +169,7 @@ static int wcd937x_mbhc_request_irq(struct snd_soc_codec *codec,
|
|||||||
{
|
{
|
||||||
struct wcd937x_priv *wcd937x = dev_get_drvdata(codec->dev);
|
struct wcd937x_priv *wcd937x = dev_get_drvdata(codec->dev);
|
||||||
|
|
||||||
return wcd_request_irq(wcd937x->irq_info, irq, name, handler, data);
|
return wcd_request_irq(&wcd937x->irq_info, irq, name, handler, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void wcd937x_mbhc_irq_control(struct snd_soc_codec *codec,
|
static void wcd937x_mbhc_irq_control(struct snd_soc_codec *codec,
|
||||||
@@ -178,9 +178,9 @@ static void wcd937x_mbhc_irq_control(struct snd_soc_codec *codec,
|
|||||||
struct wcd937x_priv *wcd937x = dev_get_drvdata(codec->dev);
|
struct wcd937x_priv *wcd937x = dev_get_drvdata(codec->dev);
|
||||||
|
|
||||||
if (enable)
|
if (enable)
|
||||||
wcd_enable_irq(wcd937x->irq_info, irq);
|
wcd_enable_irq(&wcd937x->irq_info, irq);
|
||||||
else
|
else
|
||||||
wcd_disable_irq(wcd937x->irq_info, irq);
|
wcd_disable_irq(&wcd937x->irq_info, irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int wcd937x_mbhc_free_irq(struct snd_soc_codec *codec,
|
static int wcd937x_mbhc_free_irq(struct snd_soc_codec *codec,
|
||||||
@@ -188,7 +188,7 @@ static int wcd937x_mbhc_free_irq(struct snd_soc_codec *codec,
|
|||||||
{
|
{
|
||||||
struct wcd937x_priv *wcd937x = dev_get_drvdata(codec->dev);
|
struct wcd937x_priv *wcd937x = dev_get_drvdata(codec->dev);
|
||||||
|
|
||||||
wcd_free_irq(wcd937x->irq_info, irq, data);
|
wcd_free_irq(&wcd937x->irq_info, irq, data);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -434,21 +434,28 @@ static const struct reg_default wcd937x_defaults[] = {
|
|||||||
|
|
||||||
static bool wcd937x_readable_register(struct device *dev, unsigned int reg)
|
static bool wcd937x_readable_register(struct device *dev, unsigned int reg)
|
||||||
{
|
{
|
||||||
|
if(reg <= WCD937X_BASE_ADDRESS)
|
||||||
|
return 0;
|
||||||
return wcd937x_reg_access[WCD937X_REG(reg)] & RD_REG;
|
return wcd937x_reg_access[WCD937X_REG(reg)] & RD_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool wcd937x_writeable_register(struct device *dev, unsigned int reg)
|
static bool wcd937x_writeable_register(struct device *dev, unsigned int reg)
|
||||||
{
|
{
|
||||||
|
if(reg <= WCD937X_BASE_ADDRESS)
|
||||||
|
return 0;
|
||||||
return wcd937x_reg_access[WCD937X_REG(reg)] & WR_REG;
|
return wcd937x_reg_access[WCD937X_REG(reg)] & WR_REG;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool wcd937x_volatile_register(struct device *dev, unsigned int reg)
|
static bool wcd937x_volatile_register(struct device *dev, unsigned int reg)
|
||||||
{
|
{
|
||||||
|
if(reg <= WCD937X_BASE_ADDRESS)
|
||||||
|
return 0;
|
||||||
return (wcd937x_reg_access[WCD937X_REG(reg)] & RD_REG)
|
return (wcd937x_reg_access[WCD937X_REG(reg)] & RD_REG)
|
||||||
& ~(wcd937x_reg_access[WCD937X_REG(reg)] & WR_REG);
|
& ~(wcd937x_reg_access[WCD937X_REG(reg)] & WR_REG);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct regmap_config wcd937x_regmap_config = {
|
struct regmap_config wcd937x_regmap_config = {
|
||||||
|
.name = "wcd937x_csr",
|
||||||
.reg_bits = 16,
|
.reg_bits = 16,
|
||||||
.val_bits = 8,
|
.val_bits = 8,
|
||||||
.cache_type = REGCACHE_RBTREE,
|
.cache_type = REGCACHE_RBTREE,
|
||||||
|
@@ -337,6 +337,10 @@ static int wcd937x_rx_clk_enable(struct snd_soc_codec *codec)
|
|||||||
snd_soc_update_bits(codec, WCD937X_ANA_RX_SUPPLIES, 0x01, 0x01);
|
snd_soc_update_bits(codec, WCD937X_ANA_RX_SUPPLIES, 0x01, 0x01);
|
||||||
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_RX0_CTL,
|
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_RX0_CTL,
|
||||||
0x40, 0x00);
|
0x40, 0x00);
|
||||||
|
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_RX1_CTL,
|
||||||
|
0x40, 0x00);
|
||||||
|
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_RX2_CTL,
|
||||||
|
0x40, 0x00);
|
||||||
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_ANA_CLK_CTL,
|
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_ANA_CLK_CTL,
|
||||||
0x02, 0x02);
|
0x02, 0x02);
|
||||||
}
|
}
|
||||||
@@ -1026,9 +1030,10 @@ static int wcd937x_enable_req(struct snd_soc_dapm_widget *w,
|
|||||||
0x00);
|
0x00);
|
||||||
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH2, 0x40, 0x40);
|
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH2, 0x40, 0x40);
|
||||||
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_DIG_CLK_CTL,
|
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_DIG_CLK_CTL,
|
||||||
0x10, 0x10);
|
0x30, 0x30);
|
||||||
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH1, 0x80, 0x80);
|
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH1, 0x80, 0x80);
|
||||||
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH2, 0x40, 0x00);
|
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH2, 0x40, 0x00);
|
||||||
|
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH2, 0x80, 0x80);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH1, 0x80, 0x00);
|
snd_soc_update_bits(codec, WCD937X_ANA_TX_CH1, 0x80, 0x00);
|
||||||
@@ -1098,6 +1103,11 @@ int wcd937x_micbias_control(struct snd_soc_codec *codec,
|
|||||||
case MICB_ENABLE:
|
case MICB_ENABLE:
|
||||||
wcd937x->micb_ref[micb_index]++;
|
wcd937x->micb_ref[micb_index]++;
|
||||||
if (wcd937x->micb_ref[micb_index] == 1) {
|
if (wcd937x->micb_ref[micb_index] == 1) {
|
||||||
|
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_DIG_CLK_CTL, 0xE0, 0xE0);
|
||||||
|
snd_soc_update_bits(codec, WCD937X_DIGITAL_CDC_ANA_CLK_CTL, 0x10, 0x10);
|
||||||
|
snd_soc_update_bits(codec, WCD937X_MICB1_TEST_CTL_2, 0x01, 0x01);
|
||||||
|
snd_soc_update_bits(codec, WCD937X_MICB2_TEST_CTL_2, 0x01, 0x01);
|
||||||
|
snd_soc_update_bits(codec, WCD937X_MICB3_TEST_CTL_2, 0x01, 0x01);
|
||||||
snd_soc_update_bits(codec, micb_reg, 0xC0, 0x40);
|
snd_soc_update_bits(codec, micb_reg, 0xC0, 0x40);
|
||||||
if (post_on_event)
|
if (post_on_event)
|
||||||
blocking_notifier_call_chain(&wcd937x->notifier,
|
blocking_notifier_call_chain(&wcd937x->notifier,
|
||||||
@@ -1324,7 +1334,7 @@ static const struct snd_soc_dapm_widget wcd937x_dapm_widgets[] = {
|
|||||||
SND_SOC_DAPM_ADC_E("ADC1", NULL, SND_SOC_NOPM, 0, 0,
|
SND_SOC_DAPM_ADC_E("ADC1", NULL, SND_SOC_NOPM, 0, 0,
|
||||||
wcd937x_codec_enable_adc,
|
wcd937x_codec_enable_adc,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_ADC_E("ADC2", NULL, SND_SOC_NOPM, 0, 1,
|
SND_SOC_DAPM_ADC_E("ADC2", NULL, SND_SOC_NOPM, 1, 0,
|
||||||
wcd937x_codec_enable_adc,
|
wcd937x_codec_enable_adc,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
|
|
||||||
@@ -1439,7 +1449,7 @@ static const struct snd_soc_dapm_widget wcd9375_dapm_widgets[] = {
|
|||||||
SND_SOC_DAPM_INPUT("AMIC4"),
|
SND_SOC_DAPM_INPUT("AMIC4"),
|
||||||
|
|
||||||
/*tx widgets*/
|
/*tx widgets*/
|
||||||
SND_SOC_DAPM_ADC_E("ADC3", NULL, SND_SOC_NOPM, 0, 2,
|
SND_SOC_DAPM_ADC_E("ADC3", NULL, SND_SOC_NOPM, 2, 0,
|
||||||
wcd937x_codec_enable_adc,
|
wcd937x_codec_enable_adc,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
|
|
||||||
@@ -1450,19 +1460,19 @@ static const struct snd_soc_dapm_widget wcd9375_dapm_widgets[] = {
|
|||||||
SND_SOC_DAPM_ADC_E("DMIC1", NULL, SND_SOC_NOPM, 0, 0,
|
SND_SOC_DAPM_ADC_E("DMIC1", NULL, SND_SOC_NOPM, 0, 0,
|
||||||
wcd937x_codec_enable_dmic,
|
wcd937x_codec_enable_dmic,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_ADC_E("DMIC2", NULL, SND_SOC_NOPM, 0, 1,
|
SND_SOC_DAPM_ADC_E("DMIC2", NULL, SND_SOC_NOPM, 1, 0,
|
||||||
wcd937x_codec_enable_dmic,
|
wcd937x_codec_enable_dmic,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_ADC_E("DMIC3", NULL, SND_SOC_NOPM, 0, 2,
|
SND_SOC_DAPM_ADC_E("DMIC3", NULL, SND_SOC_NOPM, 2, 0,
|
||||||
wcd937x_codec_enable_dmic,
|
wcd937x_codec_enable_dmic,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_ADC_E("DMIC4", NULL, SND_SOC_NOPM, 0, 3,
|
SND_SOC_DAPM_ADC_E("DMIC4", NULL, SND_SOC_NOPM, 3, 0,
|
||||||
wcd937x_codec_enable_dmic,
|
wcd937x_codec_enable_dmic,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_ADC_E("DMIC5", NULL, SND_SOC_NOPM, 0, 4,
|
SND_SOC_DAPM_ADC_E("DMIC5", NULL, SND_SOC_NOPM, 4, 0,
|
||||||
wcd937x_codec_enable_dmic,
|
wcd937x_codec_enable_dmic,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_ADC_E("DMIC6", NULL, SND_SOC_NOPM, 0, 5,
|
SND_SOC_DAPM_ADC_E("DMIC6", NULL, SND_SOC_NOPM, 5, 0,
|
||||||
wcd937x_codec_enable_dmic,
|
wcd937x_codec_enable_dmic,
|
||||||
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
|
||||||
|
|
||||||
@@ -1508,19 +1518,18 @@ static const struct snd_soc_dapm_widget wcd9375_dapm_widgets[] = {
|
|||||||
|
|
||||||
static const struct snd_soc_dapm_route wcd937x_audio_map[] = {
|
static const struct snd_soc_dapm_route wcd937x_audio_map[] = {
|
||||||
|
|
||||||
{"ADC2_OUTPUT", NULL, "ADC2_MIXER"},
|
|
||||||
{"ADC2_MIXER", "Switch", "ADC2 REQ"},
|
|
||||||
{"ADC2 REQ", "NULL", "ADC2"},
|
|
||||||
{"ADC2", "NULL", "ADC2 MUX"},
|
|
||||||
{"ADC2 MUX", "INP3", "AMIC3"},
|
|
||||||
{"ADC2 MUX", "INP2", "AMIC2"},
|
|
||||||
|
|
||||||
|
|
||||||
{"ADC1_OUTPUT", NULL, "ADC1_MIXER"},
|
{"ADC1_OUTPUT", NULL, "ADC1_MIXER"},
|
||||||
{"ADC1_MIXER", "Switch", "ADC1 REQ"},
|
{"ADC1_MIXER", "Switch", "ADC1 REQ"},
|
||||||
{"ADC1 REQ", NULL, "ADC1"},
|
{"ADC1 REQ", NULL, "ADC1"},
|
||||||
{"ADC1", NULL, "AMIC1"},
|
{"ADC1", NULL, "AMIC1"},
|
||||||
|
|
||||||
|
{"ADC2_OUTPUT", NULL, "ADC2_MIXER"},
|
||||||
|
{"ADC2_MIXER", "Switch", "ADC2 REQ"},
|
||||||
|
{"ADC2 REQ", NULL, "ADC2"},
|
||||||
|
{"ADC2", NULL, "ADC2 MUX"},
|
||||||
|
{"ADC2 MUX", "INP3", "AMIC3"},
|
||||||
|
{"ADC2 MUX", "INP2", "AMIC2"},
|
||||||
|
|
||||||
{"RX1", NULL, "IN1_HPHL"},
|
{"RX1", NULL, "IN1_HPHL"},
|
||||||
{"RDAC1", NULL, "RX1"},
|
{"RDAC1", NULL, "RX1"},
|
||||||
{"HPHL_RDAC", "Switch", "RDAC1"},
|
{"HPHL_RDAC", "Switch", "RDAC1"},
|
||||||
@@ -1847,11 +1856,11 @@ static int wcd937x_bind(struct device *dev)
|
|||||||
regmap_write(wcd937x->regmap,
|
regmap_write(wcd937x->regmap,
|
||||||
(WCD937X_DIGITAL_INTR_LEVEL_0 + i), 0);
|
(WCD937X_DIGITAL_INTR_LEVEL_0 + i), 0);
|
||||||
|
|
||||||
wcd937x->irq_info->wcd_regmap_irq_chip = &wcd937x_regmap_irq_chip;
|
wcd937x->irq_info.wcd_regmap_irq_chip = &wcd937x_regmap_irq_chip;
|
||||||
wcd937x->irq_info->codec_name = "WCD937X";
|
wcd937x->irq_info.codec_name = "WCD937X";
|
||||||
wcd937x->irq_info->regmap = wcd937x->regmap;
|
wcd937x->irq_info.regmap = wcd937x->regmap;
|
||||||
wcd937x->irq_info->dev = dev;
|
wcd937x->irq_info.dev = dev;
|
||||||
ret = wcd_irq_init(wcd937x->irq_info, &wcd937x->virq);
|
ret = wcd_irq_init(&wcd937x->irq_info, &wcd937x->virq);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(wcd937x->dev, "%s: IRQ init failed: %d\n",
|
dev_err(wcd937x->dev, "%s: IRQ init failed: %d\n",
|
||||||
@@ -1870,7 +1879,7 @@ static int wcd937x_bind(struct device *dev)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
err_irq:
|
err_irq:
|
||||||
wcd_irq_exit(wcd937x->irq_info, wcd937x->virq);
|
wcd_irq_exit(&wcd937x->irq_info, wcd937x->virq);
|
||||||
err:
|
err:
|
||||||
component_unbind_all(dev, wcd937x);
|
component_unbind_all(dev, wcd937x);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1880,7 +1889,7 @@ static void wcd937x_unbind(struct device *dev)
|
|||||||
{
|
{
|
||||||
struct wcd937x_priv *wcd937x = dev_get_drvdata(dev);
|
struct wcd937x_priv *wcd937x = dev_get_drvdata(dev);
|
||||||
|
|
||||||
wcd_irq_exit(wcd937x->irq_info, wcd937x->virq);
|
wcd_irq_exit(&wcd937x->irq_info, wcd937x->virq);
|
||||||
snd_soc_unregister_codec(dev);
|
snd_soc_unregister_codec(dev);
|
||||||
component_unbind_all(dev, wcd937x);
|
component_unbind_all(dev, wcd937x);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user