Audio: add 192k samplerate support.
authorsugar <sugar.zhang@rock-chips.com>
Wed, 5 Nov 2014 05:25:47 +0000 (13:25 +0800)
committersugar <sugar.zhang@rock-chips.com>
Wed, 5 Nov 2014 05:25:47 +0000 (13:25 +0800)
include/sound/pcm_params.h [changed mode: 0644->0755]
sound/soc/codecs/hdmi_i2s.c [changed mode: 0644->0755]
sound/soc/codecs/rk312x_codec.c
sound/soc/rockchip/rk_hdmi_i2s.c [changed mode: 0644->0755]
sound/soc/rockchip/rk_pcm.c

old mode 100644 (file)
new mode 100755 (executable)
index 37ae12e..3aa1e07
@@ -354,4 +354,7 @@ params_period_bytes(const struct snd_pcm_hw_params *p)
                params_channels(p)) / 8;
 }
 
+#define HW_PARAMS_FLAG_LPCM 0
+#define HW_PARAMS_FLAG_NLPCM 1
+
 #endif /* __SOUND_PCM_PARAMS_H */
old mode 100644 (file)
new mode 100755 (executable)
index ac55278..2d790ee
@@ -29,7 +29,8 @@ struct snd_soc_dai_driver hdmi_i2s_dai = {
                .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),
index a58cf54cbbcacba3ea5a057d05291f61f983ae28..872f619b063f1622267d8dad75273aaac2185b60 100755 (executable)
@@ -1995,7 +1995,8 @@ static void rk312x_shutdown(struct snd_pcm_substream *substream,
                              SNDRV_PCM_RATE_32000 |    \
                              SNDRV_PCM_RATE_44100 |    \
                              SNDRV_PCM_RATE_48000 |    \
-                             SNDRV_PCM_RATE_96000)
+                             SNDRV_PCM_RATE_96000 |    \
+                             SNDRV_PCM_RATE_192000)
 
 #define RK312x_CAPTURE_RATES (SNDRV_PCM_RATE_8000 |\
                              SNDRV_PCM_RATE_16000 |    \
old mode 100644 (file)
new mode 100755 (executable)
index b89339f..fe9c716
@@ -30,6 +30,7 @@ static int hdmi_i2s_hifi_hw_params(struct snd_pcm_substream *substream,
        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__);
@@ -48,13 +49,21 @@ static int hdmi_i2s_hifi_hw_params(struct snd_pcm_substream *substream,
        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));
@@ -66,13 +75,15 @@ static int hdmi_i2s_hifi_hw_params(struct snd_pcm_substream *substream,
                __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;
 }
index d90c142967adb202815d62598f387c02d98ba7e9..dad8e63e34dd1c7ee6a86daa4c6350248a4e1d88 100755 (executable)
@@ -36,7 +36,7 @@ static const struct snd_pcm_hardware rockchip_pcm_hardware = {
        .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,
@@ -46,7 +46,7 @@ static const struct snd_dmaengine_pcm_config rockchip_dmaengine_pcm_config = {
        .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)