Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c2394a6 authored by Ramprasad Katkam's avatar Ramprasad Katkam
Browse files

asoc: Talos-tanggu bringup fixes



Bringup fixes to enumerate tanggu codec on talos.

Change-Id: Ic9c43ec0b870f6fec3c6d21fd4d77606c7ed94b1
Signed-off-by: default avatarRamprasad Katkam <katkam@codeaurora.org>
parent 4e3fcbf1
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -769,6 +769,9 @@ static int rx_macro_mclk_enable(struct rx_macro_priv *rx_priv,
			regmap_update_bits(regmap,
				BOLERO_CDC_RX_CLK_RST_CTRL_MCLK_CONTROL,
				0x01, 0x01);
			regmap_update_bits(regmap,
				BOLERO_CDC_RX_CLK_RST_CTRL_MCLK_CONTROL,
				0x02, 0x02);
			regmap_update_bits(regmap,
				BOLERO_CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
				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:
		snd_soc_write(codec, gain_reg,
			snd_soc_read(codec, gain_reg));
		snd_soc_update_bits(codec, mix_reg, 0x10, 0x00);
		break;
	case SND_SOC_DAPM_POST_PMD:
		/* 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:
		snd_soc_write(codec, gain_reg,
			snd_soc_read(codec, gain_reg));
		snd_soc_update_bits(codec, reg, 0x10, 0x00);
		break;
	case SND_SOC_DAPM_POST_PMD:
		rx_macro_enable_interp_clk(codec, event, w->shift);
@@ -2393,12 +2398,15 @@ static int rx_swrm_clock(void *handle, bool enable)
					__func__);
				goto exit;
			}
			regmap_update_bits(regmap,
				BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
				0x02, 0x02);
			regmap_update_bits(regmap,
				BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
				0x01, 0x01);
			regmap_update_bits(regmap,
				BOLERO_CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
				0x1C, 0x0C);
				0x02, 0x00);
			msm_cdc_pinctrl_select_active_state(
						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__);
		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;

+6 −1
Original line number Diff line number Diff line
@@ -336,7 +336,7 @@ static void tx_macro_mute_update_callback(struct work_struct *work)
	hpf_gate_reg = BOLERO_CDC_TX0_TX_PATH_SEC2 +
			TX_MACRO_TX_PATH_OFFSET * decimator;
	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",
		__func__, decimator);
}
@@ -521,6 +521,9 @@ static int tx_macro_enable_dmic(struct snd_soc_dapm_widget *w,
	case SND_SOC_DAPM_PRE_PMU:
		(*dmic_clk_cnt)++;
		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,
					0x0E, tx_priv->dmic_clk_div << 0x1);
			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);
		break;
	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);

		/* 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);
		break;
	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);
		break;
	}
+1 −1
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ struct wcd937x_priv {
	u32 hph_mode;

	struct irq_domain *virq;
	struct wcd_irq_info *irq_info;
	struct wcd_irq_info irq_info;
	u32 rx_clk_cnt;
	int num_irq_regs;

+4 −4
Original line number Diff line number Diff line
@@ -169,7 +169,7 @@ static int wcd937x_mbhc_request_irq(struct snd_soc_codec *codec,
{
	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,
@@ -178,9 +178,9 @@ static void wcd937x_mbhc_irq_control(struct snd_soc_codec *codec,
	struct wcd937x_priv *wcd937x = dev_get_drvdata(codec->dev);

	if (enable)
		wcd_enable_irq(wcd937x->irq_info, irq);
		wcd_enable_irq(&wcd937x->irq_info, irq);
	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,
@@ -188,7 +188,7 @@ static int wcd937x_mbhc_free_irq(struct snd_soc_codec *codec,
{
	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;
}
+7 −0
Original line number Diff line number Diff line
@@ -434,21 +434,28 @@ static const struct reg_default wcd937x_defaults[] = {

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;
}

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;
}

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)
		& ~(wcd937x_reg_access[WCD937X_REG(reg)] & WR_REG);
}

struct regmap_config wcd937x_regmap_config = {
	.name = "wcd937x_csr",
	.reg_bits = 16,
	.val_bits = 8,
	.cache_type = REGCACHE_RBTREE,
Loading