|
|
@@ -223,10 +223,11 @@ static const struct sun4i_i2s_clk_div sun4i_i2s_mclk_div[] = {
|
|
|
};
|
|
|
|
|
|
static int sun4i_i2s_get_bclk_div(struct sun4i_i2s *i2s,
|
|
|
- unsigned int oversample_rate,
|
|
|
+ unsigned long parent_rate,
|
|
|
+ unsigned int sampling_rate,
|
|
|
unsigned int word_size)
|
|
|
{
|
|
|
- int div = oversample_rate / word_size / 2;
|
|
|
+ int div = parent_rate / sampling_rate / word_size / 2;
|
|
|
int i;
|
|
|
|
|
|
for (i = 0; i < ARRAY_SIZE(sun4i_i2s_bclk_div); i++) {
|
|
|
@@ -316,8 +317,8 @@ static int sun4i_i2s_set_clk_rate(struct snd_soc_dai *dai,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- bclk_div = sun4i_i2s_get_bclk_div(i2s, oversample_rate,
|
|
|
- word_size);
|
|
|
+ bclk_div = sun4i_i2s_get_bclk_div(i2s, i2s->mclk_freq,
|
|
|
+ rate, word_size);
|
|
|
if (bclk_div < 0) {
|
|
|
dev_err(dai->dev, "Unsupported BCLK divider: %d\n", bclk_div);
|
|
|
return -EINVAL;
|