static int rk_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; unsigned long pll_out, rclk_rate; int ret, ratio; RK_SPDIF_DBG("spdif:Entered %s\n", __func__); switch (params_rate(params)) { case 44100: pll_out = 11289600; break; case 32000: pll_out = 8192000; break; case 48000: pll_out = 12288000; break; case 96000: pll_out = 24576000; break; default: printk("rk_spdif: params not support\n"); return -EINVAL; } ratio = 256; rclk_rate = params_rate(params) * ratio; /* Set audio source clock rates */ ret = set_audio_clock_rate(pll_out, rclk_rate); if (ret < 0) return ret; /* Set S/PDIF uses internal source clock */ //ret = snd_soc_dai_set_sysclk(cpu_dai, SND_SOC_SPDIF_INT_MCLK, //rclk_rate, SND_SOC_CLOCK_IN); //if (ret < 0) //return ret; return ret; }
static int smdk_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; unsigned long pll_out, rclk_rate; int ret, ratio; switch (params_rate(params)) { case 44100: pll_out = 45158400; break; case 32000: case 48000: case 96000: pll_out = 49152000; break; default: return -EINVAL; } /* Setting ratio to 512fs helps to use S/PDIF with HDMI without * modify S/PDIF ASoC machine driver. */ ratio = 512; rclk_rate = params_rate(params) * ratio; /* Set audio source clock rates */ ret = set_audio_clock_rate(pll_out, rclk_rate); if (ret < 0) return ret; /* Set S/PDIF uses internal source clock */ ret = snd_soc_dai_set_sysclk(cpu_dai, SND_SOC_SPDIF_INT_MCLK, rclk_rate, SND_SOC_CLOCK_IN); if (ret < 0) return ret; return ret; }
static int smdk_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; unsigned long pll_out, rclk_rate; int ret, ratio; switch (params_rate(params)) { case 44100: pll_out = 45158400; break; case 32000: case 48000: case 96000: pll_out = 49152000; break; default: return -EINVAL; } /* */ ratio = 512; rclk_rate = params_rate(params) * ratio; /* */ ret = set_audio_clock_rate(pll_out, rclk_rate); if (ret < 0) return ret; /* */ ret = snd_soc_dai_set_sysclk(cpu_dai, SND_SOC_SPDIF_INT_MCLK, rclk_rate, SND_SOC_CLOCK_IN); if (ret < 0) return ret; return ret; }