mirror of
https://github.com/genesi/linux-legacy.git
synced 2026-09-05 22:37:51 +00:00
ENGR00122136 MX28 ALSA: Fail to playback wavfiles with sample rate over 48 khz
To resolve the problem of playing back wavfile with sample rate over 48khz. Signed-off-by: Lionel Xu <r63889@freescale.com> (cherry picked from commit f1af83a27357d7da1a89d79f8ed2d74fbfb7dc34)
This commit is contained in:
@@ -209,6 +209,7 @@ static int mxs_saif_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
|
||||
int clk_id, unsigned int freq, int dir)
|
||||
{
|
||||
struct clk *saif_clk;
|
||||
u32 scr;
|
||||
struct mxs_saif *saif_select = (struct mxs_saif *)cpu_dai->private_data;
|
||||
|
||||
switch (clk_id) {
|
||||
@@ -234,6 +235,68 @@ static int mxs_saif_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
|
||||
static int mxs_saif_set_dai_clkdiv(struct snd_soc_dai *cpu_dai,
|
||||
int div_id, int div)
|
||||
{
|
||||
u32 scr;
|
||||
struct mxs_saif *saif_select = (struct mxs_saif *)cpu_dai->private_data;
|
||||
|
||||
if (saif_select->saif_en == SAIF0)
|
||||
scr = __raw_readl(SAIF0_CTRL);
|
||||
else
|
||||
scr = __raw_readl(SAIF1_CTRL);
|
||||
|
||||
scr &= ~BM_SAIF_CTRL_BITCLK_MULT_RATE;
|
||||
scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
|
||||
switch (div_id) {
|
||||
case IMX_SSP_SYS_MCLK:
|
||||
switch (div) {
|
||||
case 32:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(4);
|
||||
scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 64:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(3);
|
||||
scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 128:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(2);
|
||||
scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 256:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(1);
|
||||
scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 512:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(0);
|
||||
scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 48:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(3);
|
||||
scr |= BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 96:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(2);
|
||||
scr |= BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 192:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(1);
|
||||
scr |= BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
case 384:
|
||||
scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(0);
|
||||
scr |= BM_SAIF_CTRL_BITCLK_BASE_RATE;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (saif_select->saif_en == SAIF0)
|
||||
__raw_writel(scr, SAIF0_CTRL);
|
||||
else
|
||||
__raw_writel(scr, SAIF1_CTRL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,8 +21,9 @@
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
/* SSI clock sources */
|
||||
/* SAIF clock sources */
|
||||
#define IMX_SSP_SYS_CLK 0
|
||||
#define IMX_SSP_SYS_MCLK 1
|
||||
|
||||
#define SAIF0 0
|
||||
#define SAIF1 1
|
||||
|
||||
@@ -69,8 +69,10 @@ static int mxs_evk_audio_hw_params(struct snd_pcm_substream *substream,
|
||||
priv->hw = 1;
|
||||
priv->sysclk = 512 * rate;
|
||||
|
||||
snd_soc_dai_set_sysclk(codec_dai, SGTL5000_SYSCLK, priv->sysclk, 0);
|
||||
snd_soc_dai_set_sysclk(codec_dai, SGTL5000_SYSCLK, (priv->sysclk)/2, 0);
|
||||
snd_soc_dai_set_sysclk(codec_dai, SGTL5000_LRCLK, rate, 0);
|
||||
|
||||
snd_soc_dai_set_clkdiv(cpu_dai, IMX_SSP_SYS_MCLK, 256);
|
||||
/* set codec to slave mode */
|
||||
dai_format = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|
||||
SND_SOC_DAIFMT_CBS_CFS;
|
||||
|
||||
Reference in New Issue
Block a user