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

Commit dde75303 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ASoC: wsa881x: Remove support for wsa881x 1.x chip revision"

parents 3819f895 cd5e4905
Loading
Loading
Loading
Loading
+5 −45
Original line number Diff line number Diff line
/*
 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
 * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -154,30 +154,6 @@ static struct reg_default wsa881x_defaults[] = {
	{WSA881X_SPKR_STATUS3, 0x00},
};

/* Default register reset values for WSA881x rev 1.0 or 1.1 */
static struct reg_default wsa881x_rev_1_x[] = {
	{WSA881X_INTR_MASK, 0x1F},
	{WSA881X_OTP_REG_28, 0xFF},
	{WSA881X_OTP_REG_29, 0xFF},
	{WSA881X_OTP_REG_30, 0xFF},
	{WSA881X_OTP_REG_31, 0xFF},
	{WSA881X_TEMP_ADC_CTRL, 0x00},
	{WSA881X_ADC_SEL_IBIAS, 0x25},
	{WSA881X_SPKR_DRV_GAIN, 0x01},
	{WSA881X_SPKR_DAC_CTL, 0x40},
	{WSA881X_SPKR_BBM_CTL, 0x00},
	{WSA881X_SPKR_MISC_CTL1, 0x80},
	{WSA881X_SPKR_MISC_CTL2, 0x00},
	{WSA881X_SPKR_BIAS_INT, 0x56},
	{WSA881X_SPKR_BIAS_PSRR, 0x54},
	{WSA881X_BOOST_PS_CTL, 0xC0},
	{WSA881X_BOOST_PRESET_OUT1, 0x77},
	{WSA881X_BOOST_LOOP_STABILITY, 0xAD},
	{WSA881X_SPKR_PROT_ATEST2, 0x00},
	{WSA881X_BONGO_RESRV_REG1, 0x00},
	{WSA881X_BONGO_RESRV_REG2, 0x00},
};

/* Default register reset values for WSA881x rev 2.0 */
static struct reg_default wsa881x_rev_2_0[] = {
	{WSA881X_RESET_CTL, 0x00},
@@ -222,26 +198,10 @@ void wsa881x_regmap_defaults(struct regmap *regmap, u8 version)
		return;
	}

	switch (version) {
	case WSA881X_1_X:
		regcache_cache_only(regmap, true);
		ret = regmap_multi_reg_write(regmap,
					     wsa881x_rev_1_x,
					     ARRAY_SIZE(wsa881x_rev_1_x));
		regcache_cache_only(regmap, false);
		break;
	case WSA881X_2_0:
	regcache_cache_only(regmap, true);
		ret = regmap_multi_reg_write(regmap,
					     wsa881x_rev_2_0,
	ret = regmap_multi_reg_write(regmap, wsa881x_rev_2_0,
				     ARRAY_SIZE(wsa881x_rev_2_0));
	regcache_cache_only(regmap, false);
		break;
	default:
		pr_debug("%s: unknown version", __func__);
		ret = -EINVAL;
		break;
	}

	if (ret)
		pr_debug("%s: Failed to update regmap defaults ret= %d\n",
+67 −143
Original line number Diff line number Diff line
/*
 * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
 * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -217,12 +217,7 @@ static ssize_t wsa881x_codec_version_read(struct snd_info_entry *entry,
		return -EINVAL;
	}

	if (WSA881X_IS_2_0(wsa881x->version))
		len = snprintf(buffer, sizeof(buffer),
			       "WSA881X-SOUNDWIRE_2_0\n");
	else
		len = snprintf(buffer, sizeof(buffer),
			       "WSA881X-SOUNDWIRE_1_0\n");
	len = snprintf(buffer, sizeof(buffer), "WSA881X-SOUNDWIRE_2_0\n");

	return simple_read_from_buffer(buf, count, &pos, buffer, len);
}
@@ -493,7 +488,6 @@ static int wsa881x_visense_txfe_ctrl(struct snd_soc_codec *codec, bool enable,
		__func__, enable, isense1_gain, isense2_gain, vsense_gain);

	if (enable) {
		if (WSA881X_IS_2_0(wsa881x->version)) {
		regmap_multi_reg_write(wsa881x->regmap,
				wsa881x_vi_txfe_en_2_0,
				ARRAY_SIZE(wsa881x_vi_txfe_en_2_0));
@@ -508,11 +502,6 @@ static int wsa881x_visense_txfe_ctrl(struct snd_soc_codec *codec, bool enable,
					WSA881X_SPKR_PROT_FE_GAIN,
					0xF8, 0x40);
		}
		} else {
			regmap_multi_reg_write(wsa881x->regmap,
					       wsa881x_vi_txfe_en,
					       ARRAY_SIZE(wsa881x_vi_txfe_en));
		}
	} else {
		snd_soc_update_bits(codec, WSA881X_SPKR_PROT_FE_VSENSE_VCM,
				    0x08, 0x08);
@@ -843,14 +832,9 @@ static int wsa881x_spkr_pa_event(struct snd_soc_dapm_widget *w,
	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
		snd_soc_update_bits(codec, WSA881X_SPKR_OCP_CTL, 0xC0, 0x80);
		if (WSA881X_IS_2_0(wsa881x->version))
		regmap_multi_reg_write(wsa881x->regmap,
				wsa881x_pre_pmu_pa_2_0,
				ARRAY_SIZE(wsa881x_pre_pmu_pa_2_0));
		else
			regmap_multi_reg_write(wsa881x->regmap,
					wsa881x_pre_pmu_pa,
					ARRAY_SIZE(wsa881x_pre_pmu_pa));
		swr_slvdev_datapath_control(wsa881x->swr_slave,
					    wsa881x->swr_slave->dev_num,
					    true);
@@ -864,7 +848,6 @@ static int wsa881x_spkr_pa_event(struct snd_soc_dapm_widget *w,

		break;
	case SND_SOC_DAPM_POST_PMU:
		if (WSA881X_IS_2_0(wsa881x->version)) {
		if (!wsa881x->comp_enable) {
			max_gain = wsa881x->pa_gain;
			/*
@@ -883,36 +866,6 @@ static int wsa881x_spkr_pa_event(struct snd_soc_dapm_widget *w,
			wsa881x_ramp_pa_gain(codec, min_gain, max_gain,
					     1000);
		}
		} else {
			/*
			 * 710us delay is needed after PA enable as per
			 * HW requirement.
			 */
			usleep_range(710, 720);
			regmap_multi_reg_write(wsa881x->regmap,
					       wsa881x_post_pmu_pa,
					       ARRAY_SIZE(wsa881x_post_pmu_pa));
			if (!wsa881x->comp_enable) {
				max_gain = wsa881x->pa_gain;
				/*
				 * Gain has to set incrementally in 4 steps
				 * as per HW sequence
				 */
				if (max_gain > G_4P5DB)
					min_gain = G_0DB;
				else
					min_gain = max_gain + 3;
				/*
				 * 1ms delay is needed before change in gain
				 * as per HW requirement.
				 */
				usleep_range(1000, 1010);
				wsa881x_ramp_pa_gain(codec, min_gain, max_gain,
						     1000);
			}
			snd_soc_update_bits(codec, WSA881X_ADC_SEL_IBIAS,
					    0x70, 0x40);
		}
		if (wsa881x->visense_enable) {
			wsa881x_visense_txfe_ctrl(codec, ENABLE,
						0x00, 0x03, 0x01);
@@ -999,7 +952,6 @@ static void wsa881x_init(struct snd_soc_codec *codec)
	/* Bring out of digital reset */
	snd_soc_update_bits(codec, WSA881X_CDC_RST_CTL, 0x01, 0x01);

	if (WSA881X_IS_2_0(wsa881x->version)) {
	snd_soc_update_bits(codec, WSA881X_CLOCK_CONFIG, 0x10, 0x10);
	snd_soc_update_bits(codec, WSA881X_SPKR_OCP_CTL, 0x02, 0x02);
	snd_soc_update_bits(codec, WSA881X_SPKR_MISC_CTL1, 0xC0, 0x80);
@@ -1031,27 +983,6 @@ static void wsa881x_init(struct snd_soc_codec *codec)
			    0xFF, 0xB2);
	snd_soc_update_bits(codec, WSA881X_BONGO_RESRV_REG2,
			    0xFF, 0x05);
	} else {
		/* Set DAC polarity to Rising */
		snd_soc_update_bits(codec, WSA881X_SPKR_DAC_CTL, 0x02, 0x02);
		/* set Bias Ref ctrl to 1.225V */
		snd_soc_update_bits(codec, WSA881X_BIAS_REF_CTRL, 0x07, 0x00);
		snd_soc_update_bits(codec, WSA881X_SPKR_BBM_CTL, 0x02, 0x02);
		snd_soc_update_bits(codec, WSA881X_SPKR_MISC_CTL1, 0xC0, 0x00);
		snd_soc_update_bits(codec, WSA881X_SPKR_MISC_CTL2, 0x07, 0x04);
		snd_soc_update_bits(codec, WSA881X_SPKR_BIAS_INT, 0x0F, 0x0F);
		snd_soc_update_bits(codec, WSA881X_SPKR_PA_INT, 0xF0, 0x10);
		snd_soc_update_bits(codec, WSA881X_SPKR_PA_INT, 0x0F, 0x0E);
		snd_soc_update_bits(codec, WSA881X_BOOST_PS_CTL, 0x80, 0x00);
		snd_soc_update_bits(codec, WSA881X_BOOST_PRESET_OUT1,
				    0xF0, 0xB0);
		snd_soc_update_bits(codec, WSA881X_BOOST_PRESET_OUT2,
				    0xF0, 0x30);
		snd_soc_update_bits(codec, WSA881X_SPKR_DRV_EN, 0x0F, 0x0C);
		snd_soc_update_bits(codec, WSA881X_BOOST_CURRENT_LIMIT,
				    0x0F, 0x08);
		snd_soc_update_bits(codec, WSA881X_BOOST_ZX_CTL, 0x20, 0x00);
	}
}

static int32_t wsa881x_resource_acquire(struct snd_soc_codec *codec,
@@ -1091,17 +1022,10 @@ static int32_t wsa881x_temp_reg_read(struct snd_soc_codec *codec,

	wsa881x_resource_acquire(codec, ENABLE);

	if (WSA881X_IS_2_0(wsa881x->version)) {
	snd_soc_update_bits(codec, WSA881X_TADC_VALUE_CTL, 0x01, 0x00);
	wsa_temp_reg->dmeas_msb = snd_soc_read(codec, WSA881X_TEMP_MSB);
	wsa_temp_reg->dmeas_lsb = snd_soc_read(codec, WSA881X_TEMP_LSB);
	snd_soc_update_bits(codec, WSA881X_TADC_VALUE_CTL, 0x01, 0x01);
	} else {
		wsa_temp_reg->dmeas_msb = snd_soc_read(codec,
						   WSA881X_TEMP_DOUT_MSB);
		wsa_temp_reg->dmeas_lsb = snd_soc_read(codec,
						   WSA881X_TEMP_DOUT_LSB);
	}
	wsa_temp_reg->d1_msb = snd_soc_read(codec, WSA881X_OTP_REG_1);
	wsa_temp_reg->d1_lsb = snd_soc_read(codec, WSA881X_OTP_REG_2);
	wsa_temp_reg->d2_msb = snd_soc_read(codec, WSA881X_OTP_REG_3);
+1 −9
Original line number Diff line number Diff line
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -20,14 +20,6 @@

#define WSA881X_MAX_SWR_PORTS   4

enum {
	WSA881X_1_X = 0,
	WSA881X_2_0,
};

#define WSA881X_IS_2_0(ver) \
	((ver == WSA881X_2_0) ? 1 : 0)

extern int wsa881x_set_channel_map(struct snd_soc_codec *codec, u8 *port,
				u8 num_port, unsigned int *ch_mask,
				unsigned int *ch_rate);