.rates = (SNDRV_PCM_RATE_32000 |
SNDRV_PCM_RATE_44100 |
SNDRV_PCM_RATE_48000 |
- SNDRV_PCM_RATE_96000),
+ SNDRV_PCM_RATE_96000 |
+ SNDRV_PCM_RATE_192000),
.formats = (SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_S20_3LE |
SNDRV_PCM_FMTBIT_S24_LE),
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
unsigned int pll_out = 0, dai_fmt = rtd->dai_link->dai_fmt;
+ int div_bclk,div_mclk;
int ret;
DBG("Enter::%s----%d\n", __func__, __LINE__);
case 24000:
case 32000:
case 48000:
+ case 96000:
pll_out = 12288000;
break;
case 11025:
case 22050:
case 44100:
+ case 88200:
pll_out = 11289600;
break;
+ case 176400:
+ pll_out = 11289600*2;
+ break;
+ case 192000:
+ pll_out = 12288000*2;
+ break;
default:
pr_err("Enter:%s, %d, Error rate=%d\n",
__func__, __LINE__, params_rate(params));
__func__, __LINE__,
params_rate(params));
+ div_bclk = 63;
+ div_mclk = pll_out/(params_rate(params)*(div_bclk+1))-1;
+
snd_soc_dai_set_sysclk(cpu_dai, 0, pll_out, 0);
- snd_soc_dai_set_clkdiv(cpu_dai, ROCKCHIP_DIV_BCLK,
- (pll_out / 4) / params_rate(params) - 1);
- snd_soc_dai_set_clkdiv(cpu_dai, ROCKCHIP_DIV_MCLK, 3);
+ snd_soc_dai_set_clkdiv(cpu_dai, ROCKCHIP_DIV_BCLK,div_bclk);
+ snd_soc_dai_set_clkdiv(cpu_dai, ROCKCHIP_DIV_MCLK, div_mclk);
- DBG("Enter:%s, %d, pll_out / 4 / params_rate(params) = %d\n",
- __func__, __LINE__, (pll_out / 4) / params_rate(params));
+ DBG("Enter:%s, %d, div_bclk: %d, div_mclk: %d\n",
+ __func__, __LINE__, div_bclk, div_mclk);
return 0;
}
.channels_max = 8,
.buffer_bytes_max = 128*1024,
.period_bytes_min = 64,
- .period_bytes_max = 2048*4,
+ .period_bytes_max = 32*1024,//2048*4,///PAGE_SIZE*2,
.periods_min = 3,
.periods_max = 128,
.fifo_size = 16,
.pcm_hardware = &rockchip_pcm_hardware,
.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
.compat_filter_fn = NULL,
- .prealloc_buffer_size = PAGE_SIZE * 8,
+ .prealloc_buffer_size = PAGE_SIZE * 32,
};
int rockchip_pcm_platform_register(struct device *dev)