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

Commit 1d052bad authored by Yamit Mehta's avatar Yamit Mehta Committed by Gerrit - the friendly Code Review server
Browse files

ASoC: apq8009: separate bits_per_sample for TX and RX path



After 24bit record if 16bit playback is started,
playback is going at faster rate as same bits_per_sample
is used. To avoid this use separate bits_per_sample
variable for playback and record path.

CRs-Fixed: 2011303
Change-Id: Ie86d5b48ffd54fa8fd69bba228bd8fd2d9626f73
Signed-off-by: default avatarYamit Mehta <ymehta@codeaurora.org>
parent edc93d8c
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -188,7 +188,8 @@ static struct afe_clk_set mi2s_rx_clk = {

static int mi2s_rx_bit_format = SNDRV_PCM_FORMAT_S16_LE;
static int mi2s_tx_bit_format = SNDRV_PCM_FORMAT_S16_LE;
static int bits_per_sample = 16;
static int rx_bits_per_sample = 16;
static int tx_bits_per_sample = 16;

static inline int param_is_mask(int p)
{
@@ -371,18 +372,23 @@ static int mi2s_rx_bit_format_put(struct snd_kcontrol *kcontrol,
	switch (ucontrol->value.integer.value[0]) {
	case 2:
		mi2s_rx_bit_format = SNDRV_PCM_FORMAT_S24_LE;
		bits_per_sample = 32;
		rx_bits_per_sample = 32;
		break;
	case 1:
		mi2s_rx_bit_format = SNDRV_PCM_FORMAT_S24_3LE;
		bits_per_sample = 32;
		rx_bits_per_sample = 32;
		break;
	case 0:
	default:
		mi2s_rx_bit_format = SNDRV_PCM_FORMAT_S16_LE;
		bits_per_sample = 16;
		rx_bits_per_sample = 16;
		break;
	}

	pr_debug("%s: mi2s_rx_bit_format = %d, ucontrol value = %ld\n",
			__func__, mi2s_rx_bit_format,
			ucontrol->value.integer.value[0]);

	return 0;
}

@@ -418,18 +424,23 @@ static int mi2s_tx_bit_format_put(struct snd_kcontrol *kcontrol,
	switch (ucontrol->value.integer.value[0]) {
	case 2:
		mi2s_tx_bit_format = SNDRV_PCM_FORMAT_S24_LE;
		bits_per_sample = 32;
		tx_bits_per_sample = 32;
		break;
	case 1:
		mi2s_tx_bit_format = SNDRV_PCM_FORMAT_S24_3LE;
		bits_per_sample = 32;
		tx_bits_per_sample = 32;
		break;
	case 0:
	default:
		mi2s_tx_bit_format = SNDRV_PCM_FORMAT_S16_LE;
		bits_per_sample = 16;
		tx_bits_per_sample = 16;
		break;
	}

	pr_debug("%s: mi2s_tx_bit_format = %d, ucontrol value = %ld\n",
			__func__, mi2s_tx_bit_format,
			ucontrol->value.integer.value[0]);

	return 0;
}

@@ -660,7 +671,7 @@ static uint32_t get_mi2s_rx_clk_val(void)
{
	uint32_t clk_val;

	clk_val = pri_rx_sample_rate * bits_per_sample * 2;
	clk_val = pri_rx_sample_rate * rx_bits_per_sample * 2;

	return clk_val;
}
@@ -669,7 +680,7 @@ static uint32_t get_mi2s_tx_clk_val(void)
{
	uint32_t clk_val;

	clk_val = pri_tx_sample_rate * bits_per_sample * 2;
	clk_val = pri_tx_sample_rate * tx_bits_per_sample * 2;

	return clk_val;
}