From: Marcus Cooper <codekip...@gmail.com> Signed-off-by: Marcus Cooper <codekip...@gmail.com> --- sound/soc/sunxi/hdmiaudio/sunxi-hdmiaudio.c | 4 +- sound/soc/sunxi/hdmiaudio/sunxi-sndhdmi.c | 197 +--------------------------- 2 files changed, 5 insertions(+), 196 deletions(-)
diff --git a/sound/soc/sunxi/hdmiaudio/sunxi-hdmiaudio.c b/sound/soc/sunxi/hdmiaudio/sunxi-hdmiaudio.c index ced8f47..c3b4beb 100644 --- a/sound/soc/sunxi/hdmiaudio/sunxi-hdmiaudio.c +++ b/sound/soc/sunxi/hdmiaudio/sunxi-hdmiaudio.c @@ -480,7 +480,7 @@ static int sunxi_hdmiaudio_resume(struct snd_soc_dai *cpu_dai) return 0; } -#define SUNXI_I2S_RATES (SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT) +#define SUNXI_HDMI_RATES (SNDRV_PCM_RATE_8000_192000 | SNDRV_PCM_RATE_KNOT) static struct snd_soc_dai_ops sunxi_hdmiaudio_dai_ops = { .trigger = sunxi_hdmiaudio_trigger, .hw_params = sunxi_hdmiaudio_hw_params, @@ -496,7 +496,7 @@ static struct snd_soc_dai_driver sunxi_hdmiaudio_dai = { .playback = { .channels_min = 1, .channels_max = 2, - .rates = SUNXI_I2S_RATES, + .rates = SUNXI_HDMI_RATES, .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE }, .symmetric_rates = 1, diff --git a/sound/soc/sunxi/hdmiaudio/sunxi-sndhdmi.c b/sound/soc/sunxi/hdmiaudio/sunxi-sndhdmi.c index 2d29ad9..ee62f3c 100644 --- a/sound/soc/sunxi/hdmiaudio/sunxi-sndhdmi.c +++ b/sound/soc/sunxi/hdmiaudio/sunxi-sndhdmi.c @@ -26,169 +26,6 @@ #include "sunxi-hdmiaudio.h" -static struct clk *xtal; - -static int clk_users; -static DEFINE_MUTEX(clk_lock); - -#ifdef ENFORCE_RATES -static struct snd_pcm_hw_constraint_list hw_constraints_rates = { - .count = ARRAY_SIZE(rates), - .list = rates, - .mask = 0, -}; -#endif - -static int sunxi_sndhdmi_startup(struct snd_pcm_substream *substream) -{ - int ret = 0; - #ifdef ENFORCE_RATES - struct snd_pcm_runtime *runtime = substream->runtime;; - #endif - mutex_lock(&clk_lock); - mutex_unlock(&clk_lock); - if (!ret) { - #ifdef ENFORCE_RATES - ret = snd_pcm_hw_constraint_list(runtime, 0, - SNDRV_PCM_HW_PARAM_RATE, - &hw_constraints_rates); - if (ret < 0) - - #endif - } - return ret; -} - -static void sunxi_sndhdmi_shutdown(struct snd_pcm_substream *substream) -{ - mutex_lock(&clk_lock); - clk_users -= 1; - if (clk_users == 0) { - clk_put(xtal); - xtal = NULL; - } - mutex_unlock(&clk_lock); -} - -typedef struct __MCLK_SET_INF -{ - __u32 samp_rate; // sample rate - __u16 mult_fs; // multiply of smaple rate - - __u8 clk_div; // mpll division - __u8 mpll; // select mpll, 0 - 24.576 Mhz, 1 - 22.5792 Mhz - -} __mclk_set_inf; - -typedef struct __BCLK_SET_INF -{ - __u8 bitpersamp; // bits per sample - __u8 clk_div; // clock division - __u16 mult_fs; // multiplay of sample rate - -} __bclk_set_inf; - -//bclk divider table -static __bclk_set_inf BCLK_INF[] = -{ - // 16bits per sample - {16, 4, 128}, {16, 6, 192}, {16, 8, 256}, - {16, 12, 384}, {16, 16, 512}, - - //24 bits per sample - {24, 4, 192}, {24, 8, 384}, {24, 16, 768}, - - //32 bits per sample - {32, 2, 128}, {32, 4, 256}, {32, 6, 384}, - {32, 8, 512}, {32, 12, 768}, - - //end flag - {0xff, 0, 0}, -}; - -//mclk divider table -static __mclk_set_inf MCLK_INF[] = -{ - // 8k bitrate - { 8000, 128, 24, 0}, { 8000, 192, 16, 0}, { 8000, 256, 12, 0}, - { 8000, 384, 8, 0}, { 8000, 512, 6, 0}, { 8000, 768, 4, 0}, - - // 16k bitrate - { 16000, 128, 12, 0}, { 16000, 192, 8, 0}, { 16000, 256, 6, 0}, - { 16000, 384, 4, 0}, { 16000, 768, 2, 0}, - - // 32k bitrate - { 32000, 128, 6, 0}, { 32000, 192, 4, 0}, { 32000, 384, 2, 0}, - { 32000, 768, 1, 0}, - - // 64k bitrate - { 64000, 192, 2, 0}, { 64000, 384, 1, 0}, - - //128k bitrate - {128000, 192, 1, 0}, - - // 12k bitrate - { 12000, 128, 16, 0}, { 12000, 256, 8, 0}, { 12000, 512, 4, 0}, - - // 24k bitrate - { 24000, 128, 8, 0}, { 24000, 256, 4, 0}, { 24000, 512, 2, 0}, - - // 48K bitrate - { 48000, 128, 4, 0}, { 48000, 256, 2, 0}, { 48000, 512, 1, 0}, - - // 96k bitrate - { 96000, 128 , 2, 0}, { 96000, 256, 1, 0}, - - //192k bitrate - {192000, 128, 1, 0}, - - //11.025k bitrate - { 11025, 128, 16, 1}, { 11205, 256, 8, 1}, { 11205, 512, 4, 1}, - - //22.05k bitrate - { 22050, 128, 8, 1}, { 22050, 256, 4, 1}, - { 22050, 512, 2, 1}, - - //44.1k bitrate - { 44100, 128, 4, 1}, { 44100, 256, 2, 1}, { 44100, 512, 1, 1}, - - //88.2k bitrate - { 88200, 128, 2, 1}, { 88200, 256, 1, 1}, - - //176.4k bitrate - {176400, 128, 1, 1}, - - //end flag 0xffffffff - {0xffffffff, 0, 0, 0}, -}; - -static s32 get_clock_divder(u32 sample_rate, u32 sample_width, u32 * mclk_div, - u32* mpll, u32* bclk_div, u32* mult_fs) -{ - u32 i, j, ret = -EINVAL; - - for(i=0; i< 100; i++) { - if((MCLK_INF[i].samp_rate == sample_rate) && - ((MCLK_INF[i].mult_fs == 256) || (MCLK_INF[i].mult_fs == 128))) { - for(j=0; j<ARRAY_SIZE(BCLK_INF); j++) { - if((BCLK_INF[j].bitpersamp == sample_width) && - (BCLK_INF[j].mult_fs == MCLK_INF[i].mult_fs)) { - //set mclk and bclk division - *mclk_div = MCLK_INF[i].clk_div; - *mpll = MCLK_INF[i].mpll; - *bclk_div = BCLK_INF[j].clk_div; - *mult_fs = MCLK_INF[i].mult_fs; - ret = 0; - break; - } - } - }else if(MCLK_INF[i].samp_rate == 0xffffffff) - break; - } - - return ret; -} - static int sunxi_sndhdmi_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { @@ -196,38 +33,12 @@ static int sunxi_sndhdmi_hw_params(struct snd_pcm_substream *substream, struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; int ret = 0; - unsigned long rate = params_rate(params); - u32 mclk_div=0, mpll=0, bclk_div=0, mult_fs=0; - - get_clock_divder(rate, 32, &mclk_div, &mpll, &bclk_div, &mult_fs); - - ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | - SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); - if (ret < 0) - return ret; - - ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | - SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS); - if (ret < 0) - return ret; - - ret = snd_soc_dai_set_sysclk(cpu_dai, 0 , mpll, 0); - if (ret < 0) - return ret; - - ret = snd_soc_dai_set_sysclk(codec_dai, 0 , mpll, 0); - if (ret < 0) - return ret; - - ret = snd_soc_dai_set_clkdiv(cpu_dai, SUNXI_DIV_MCLK, mclk_div); - if (ret < 0) - return ret; - ret = snd_soc_dai_set_clkdiv(cpu_dai, SUNXI_DIV_BCLK, bclk_div); + ret = snd_soc_dai_set_fmt(codec_dai, 0); if (ret < 0) return ret; - ret = snd_soc_dai_set_clkdiv(codec_dai, 0, mult_fs); + ret = snd_soc_dai_set_fmt(cpu_dai, 0); if (ret < 0) return ret; @@ -235,9 +46,7 @@ static int sunxi_sndhdmi_hw_params(struct snd_pcm_substream *substream, } static struct snd_soc_ops sunxi_sndhdmi_ops = { - .startup = sunxi_sndhdmi_startup, - .shutdown = sunxi_sndhdmi_shutdown, - .hw_params = sunxi_sndhdmi_hw_params, + .hw_params = sunxi_sndhdmi_hw_params, }; static struct snd_soc_dai_link sunxi_sndhdmi_dai_link = { -- 1.8.3.2 -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.