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

Commit e13679cd authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "asoc: rouleur: Fix CnP issues in EAR and LO paths"

parents 336c99b1 b333e2c5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ enum {
#define ROULEUR_ANA_MBHC_CTL_CLK              (ROULEUR_ANA_BASE_ADDR+0x06D)
#define ROULEUR_ANA_MBHC_ZDET_CALIB_RESULT    (ROULEUR_ANA_BASE_ADDR+0x072)
#define ROULEUR_ANA_NCP_EN                    (ROULEUR_ANA_BASE_ADDR+0x077)
#define ROULEUR_ANA_NCP_VCTRL                 (ROULEUR_ANA_BASE_ADDR+0x07C)
#define ROULEUR_ANA_HPHPA_CNP_CTL_1           (ROULEUR_ANA_BASE_ADDR+0x083)
#define ROULEUR_ANA_HPHPA_CNP_CTL_2           (ROULEUR_ANA_BASE_ADDR+0x084)
#define ROULEUR_ANA_HPHPA_PA_STATUS           (ROULEUR_ANA_BASE_ADDR+0x087)
@@ -58,6 +59,8 @@ enum {
#define ROULEUR_SWR_HPHPA_HD2                 (ROULEUR_ANA_BASE_ADDR+0x090)
#define ROULEUR_ANA_SURGE_EN                  (ROULEUR_ANA_BASE_ADDR+0x097)
#define ROULEUR_ANA_COMBOPA_CTL               (ROULEUR_ANA_BASE_ADDR+0x09B)
#define ROULEUR_ANA_COMBOPA_CTL_4             (ROULEUR_ANA_BASE_ADDR+0x09F)
#define ROULEUR_ANA_COMBOPA_CTL_5             (ROULEUR_ANA_BASE_ADDR+0x0A0)
#define ROULEUR_ANA_RXLDO_CTL                 (ROULEUR_ANA_BASE_ADDR+0x0B2)
#define ROULEUR_ANA_MBIAS_EN                  (ROULEUR_ANA_BASE_ADDR+0x0B4)

+3 −0
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ static const struct reg_default rouleur_defaults[] = {
	{ ROULEUR_ANA_MBHC_CTL_CLK,               0x30 },
	{ ROULEUR_ANA_MBHC_ZDET_CALIB_RESULT,     0x00 },
	{ ROULEUR_ANA_NCP_EN,                     0x00 },
	{ ROULEUR_ANA_NCP_VCTRL,                  0xA7 },
	{ ROULEUR_ANA_HPHPA_CNP_CTL_1,            0x54 },
	{ ROULEUR_ANA_HPHPA_CNP_CTL_2,            0x2B },
	{ ROULEUR_ANA_HPHPA_PA_STATUS,            0x00 },
@@ -51,6 +52,8 @@ static const struct reg_default rouleur_defaults[] = {
	{ ROULEUR_ANA_HPHPA_SPARE_CTL,            0x02 },
	{ ROULEUR_ANA_SURGE_EN,                   0x38 },
	{ ROULEUR_ANA_COMBOPA_CTL,                0x35 },
	{ ROULEUR_ANA_COMBOPA_CTL_4,              0x84 },
	{ ROULEUR_ANA_COMBOPA_CTL_5,              0x05 },
	{ ROULEUR_ANA_RXLDO_CTL,                  0x86 },
	{ ROULEUR_ANA_MBIAS_EN,                   0x00 },
	{ ROULEUR_DIG_SWR_CHIP_ID0,               0x00 },
+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ const u8 rouleur_reg_access_analog[ROULEUR_REG(
	[ROULEUR_REG(ROULEUR_ANA_MBHC_CTL_CLK)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_MBHC_ZDET_CALIB_RESULT)] = RD_REG,
	[ROULEUR_REG(ROULEUR_ANA_NCP_EN)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_NCP_VCTRL)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_HPHPA_CNP_CTL_1)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_HPHPA_CNP_CTL_2)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_HPHPA_PA_STATUS)] = RD_REG,
@@ -46,6 +47,8 @@ const u8 rouleur_reg_access_analog[ROULEUR_REG(
	[ROULEUR_REG(ROULEUR_SWR_HPHPA_HD2)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_SURGE_EN)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_COMBOPA_CTL)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_COMBOPA_CTL_4)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_COMBOPA_CTL_5)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_RXLDO_CTL)] = RD_WR_REG,
	[ROULEUR_REG(ROULEUR_ANA_MBIAS_EN)] = RD_WR_REG,
};
+42 −16
Original line number Diff line number Diff line
@@ -361,6 +361,8 @@ static int rouleur_rx_clk_enable(struct snd_soc_component *component)
				ROULEUR_ANA_HPHPA_FSM_CLK, 0x7F, 0x11);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_HPHPA_FSM_CLK, 0x80, 0x80);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_NCP_VCTRL, 0x07, 0x06);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_NCP_EN, 0x01, 0x01);
		usleep_range(500, 510);
@@ -591,12 +593,12 @@ static int rouleur_codec_ear_lo_dac_event(struct snd_soc_dapm_widget *w,
		snd_soc_component_update_bits(component,
				ROULEUR_DIG_SWR_CDC_RX0_CTL,
				0x80, 0x00);
		snd_soc_component_update_bits(component,
				ROULEUR_DIG_SWR_CDC_RX_GAIN_CTL,
				0x04, 0x04);
		snd_soc_component_update_bits(component,
				ROULEUR_DIG_SWR_CDC_RX_CLK_CTL,
				0x01, 0x01);
		snd_soc_component_update_bits(component,
				ROULEUR_DIG_SWR_CDC_RX_GAIN_CTL,
				0x04, 0x04);

		break;
	case SND_SOC_DAPM_POST_PMD:
@@ -635,7 +637,7 @@ static int rouleur_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w,
				    true);

		set_bit(HPH_PA_DELAY, &rouleur->status_mask);
		usleep_range(5000, 5100);
		usleep_range(200, 210);
		snd_soc_component_update_bits(component,
			ROULEUR_DIG_SWR_PDM_WD_CTL1,
			0x03, 0x03);
@@ -671,9 +673,8 @@ static int rouleur_codec_enable_hphr_pa(struct snd_soc_dapm_widget *w,
		break;
	case SND_SOC_DAPM_POST_PMD:
		/*
		 * 7ms sleep is required after PA is disabled as per
		 * HW requirement. If compander is disabled, then
		 * 20ms delay is required.
		 * 5ms sleep is required after PA is disabled as per
		 * HW requirement.
		 */
		if (test_bit(HPH_PA_DELAY, &rouleur->status_mask)) {

@@ -710,7 +711,7 @@ static int rouleur_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w,
				    rouleur->rx_swr_dev->dev_num,
				    true);
		set_bit(HPH_PA_DELAY, &rouleur->status_mask);
		usleep_range(5000, 5100);
		usleep_range(200, 210);
		snd_soc_component_update_bits(component,
				ROULEUR_DIG_SWR_PDM_WD_CTL0,
				0x03, 0x03);
@@ -783,12 +784,26 @@ static int rouleur_codec_enable_ear_pa(struct snd_soc_dapm_widget *w,
		ret = swr_slvdev_datapath_control(rouleur->rx_swr_dev,
			    rouleur->rx_swr_dev->dev_num,
			    true);
		usleep_range(5000, 5100);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL_5,
				0x04, 0x00);
		usleep_range(1000, 1010);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL_4,
				0x0F, 0x0F);
		usleep_range(1000, 1010);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL,
				0x40, 0x00);
		snd_soc_component_update_bits(component,
				ROULEUR_DIG_SWR_PDM_WD_CTL0,
				0x03, 0x03);
		break;
	case SND_SOC_DAPM_POST_PMU:
		usleep_range(5000, 5100);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL_4,
				0x0F, 0x04);
		if (rouleur->update_wcd_event)
			rouleur->update_wcd_event(rouleur->handle,
						WCD_BOLERO_EVT_RX_MUTE,
@@ -830,15 +845,26 @@ static int rouleur_codec_enable_lo_pa(struct snd_soc_dapm_widget *w,
		ret = swr_slvdev_datapath_control(rouleur->rx_swr_dev,
			    rouleur->rx_swr_dev->dev_num,
			    true);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL_5,
				0x04, 0x00);
		usleep_range(1000, 1010);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL_4,
				0x0F, 0x0F);
		usleep_range(1000, 1010);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL,
				0x40, 0x40);
		usleep_range(5000, 5100);
		snd_soc_component_update_bits(component,
				ROULEUR_DIG_SWR_PDM_WD_CTL0,
				0x03, 0x03);
		break;
	case SND_SOC_DAPM_POST_PMU:
		usleep_range(5000, 5100);
		snd_soc_component_update_bits(component,
				ROULEUR_ANA_COMBOPA_CTL_4,
				0x0F, 0x04);
		if (rouleur->update_wcd_event)
			rouleur->update_wcd_event(rouleur->handle,
						WCD_BOLERO_EVT_RX_MUTE,
@@ -1400,6 +1426,7 @@ static int rouleur_event_notify(struct notifier_block *block,
		rouleur_init_reg(component);
		regcache_mark_dirty(rouleur->regmap);
		regcache_sync(rouleur->regmap);
		rouleur->dev_up = true;
		/* Initialize MBHC module */
		mbhc = &rouleur->mbhc->wcd_mbhc;
		ret = rouleur_mbhc_post_ssr_init(rouleur->mbhc, component);
@@ -1412,7 +1439,6 @@ static int rouleur_event_notify(struct notifier_block *block,
				mdelay(500);
		}
		rouleur->mbhc->wcd_mbhc.deinit_in_progress = false;
		rouleur->dev_up = true;
		break;
	default:
		dev_err(component->dev, "%s: invalid event %d\n", __func__,