Skip to content

Commit

Permalink
ASoC: jz4740: Add dynamic sampling rate support to jz4740-i2s
Browse files Browse the repository at this point in the history
The div clock register is not modified during jz4740_i2s_hw_params.
Hence, default sampling rates are actually used regardless of
sampling rates input from userspace.

This patch adds support to calculate the value of the divider from
the parameters passed from userspace and update the relevant div
registers

Signed-off-by: Zubair Lutfullah Kakakhel <[email protected]>
Acked-by: Lars-Peter Clausen <[email protected]>
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
Zubair Lutfullah Kakakhel authored and broonie committed Feb 4, 2015
1 parent 97bf6af commit 26b0aad
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion sound/soc/jz4740/jz4740-i2s.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@
#define JZ_AIC_I2S_STATUS_BUSY BIT(2)

#define JZ_AIC_CLK_DIV_MASK 0xf
#define I2SDIV_DV_SHIFT 8
#define I2SDIV_DV_MASK (0xf << I2SDIV_DV_SHIFT)

struct jz4740_i2s {
struct resource *mem;
Expand Down Expand Up @@ -237,10 +239,14 @@ static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream,
{
struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
unsigned int sample_size;
uint32_t ctrl;
uint32_t ctrl, div_reg;
int div;

ctrl = jz4740_i2s_read(i2s, JZ_REG_AIC_CTRL);

div_reg = jz4740_i2s_read(i2s, JZ_REG_AIC_CLK_DIV);
div = clk_get_rate(i2s->clk_i2s) / (64 * params_rate(params));

switch (params_format(params)) {
case SNDRV_PCM_FORMAT_S8:
sample_size = 0;
Expand All @@ -264,7 +270,10 @@ static int jz4740_i2s_hw_params(struct snd_pcm_substream *substream,
ctrl |= sample_size << JZ_AIC_CTRL_INPUT_SAMPLE_SIZE_OFFSET;
}

div_reg &= ~I2SDIV_DV_MASK;
div_reg |= (div - 1) << I2SDIV_DV_SHIFT;
jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl);
jz4740_i2s_write(i2s, JZ_REG_AIC_CLK_DIV, div_reg);

return 0;
}
Expand Down

0 comments on commit 26b0aad

Please sign in to comment.