|
@@ -44,16 +44,8 @@
|
|
|
|
|
|
static struct snd_soc_card bf5xx_ssm2602;
|
|
static struct snd_soc_card bf5xx_ssm2602;
|
|
|
|
|
|
-static int bf5xx_ssm2602_hw_params(struct snd_pcm_substream *substream,
|
|
|
|
- struct snd_pcm_hw_params *params)
|
|
|
|
|
|
+static int bf5xx_ssm2602_dai_init(struct snd_soc_pcm_runtime *rtd)
|
|
{
|
|
{
|
|
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
|
|
|
- struct snd_soc_dai *codec_dai = rtd->codec_dai;
|
|
|
|
- unsigned int clk = 0;
|
|
|
|
- int ret = 0;
|
|
|
|
-
|
|
|
|
- pr_debug("%s rate %d format %x\n", __func__, params_rate(params),
|
|
|
|
- params_format(params));
|
|
|
|
/*
|
|
/*
|
|
* If you are using a crystal source which frequency is not 12MHz
|
|
* If you are using a crystal source which frequency is not 12MHz
|
|
* then modify the below case statement with frequency of the crystal.
|
|
* then modify the below case statement with frequency of the crystal.
|
|
@@ -61,31 +53,10 @@ static int bf5xx_ssm2602_hw_params(struct snd_pcm_substream *substream,
|
|
* If you are using the SPORT to generate clocking then this is
|
|
* If you are using the SPORT to generate clocking then this is
|
|
* where to do it.
|
|
* where to do it.
|
|
*/
|
|
*/
|
|
-
|
|
|
|
- switch (params_rate(params)) {
|
|
|
|
- case 8000:
|
|
|
|
- case 16000:
|
|
|
|
- case 48000:
|
|
|
|
- case 96000:
|
|
|
|
- case 11025:
|
|
|
|
- case 22050:
|
|
|
|
- case 44100:
|
|
|
|
- clk = 12000000;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- ret = snd_soc_dai_set_sysclk(codec_dai, SSM2602_SYSCLK, clk,
|
|
|
|
|
|
+ return snd_soc_dai_set_sysclk(rtd->codec_dai, SSM2602_SYSCLK, 12000000,
|
|
SND_SOC_CLOCK_IN);
|
|
SND_SOC_CLOCK_IN);
|
|
- if (ret < 0)
|
|
|
|
- return ret;
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-static struct snd_soc_ops bf5xx_ssm2602_ops = {
|
|
|
|
- .hw_params = bf5xx_ssm2602_hw_params,
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
/* CODEC is master for BCLK and LRC in this configuration. */
|
|
/* CODEC is master for BCLK and LRC in this configuration. */
|
|
#define BF5XX_SSM2602_DAIFMT (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | \
|
|
#define BF5XX_SSM2602_DAIFMT (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | \
|
|
SND_SOC_DAIFMT_CBM_CFM)
|
|
SND_SOC_DAIFMT_CBM_CFM)
|
|
@@ -98,7 +69,7 @@ static struct snd_soc_dai_link bf5xx_ssm2602_dai[] = {
|
|
.codec_dai_name = "ssm2602-hifi",
|
|
.codec_dai_name = "ssm2602-hifi",
|
|
.platform_name = "bfin-i2s-pcm-audio",
|
|
.platform_name = "bfin-i2s-pcm-audio",
|
|
.codec_name = "ssm2602.0-001b",
|
|
.codec_name = "ssm2602.0-001b",
|
|
- .ops = &bf5xx_ssm2602_ops,
|
|
|
|
|
|
+ .init = bf5xx_ssm2602_dai_init,
|
|
},
|
|
},
|
|
{
|
|
{
|
|
.name = "ssm2602",
|
|
.name = "ssm2602",
|
|
@@ -107,7 +78,7 @@ static struct snd_soc_dai_link bf5xx_ssm2602_dai[] = {
|
|
.codec_dai_name = "ssm2602-hifi",
|
|
.codec_dai_name = "ssm2602-hifi",
|
|
.platform_name = "bfin-i2s-pcm-audio",
|
|
.platform_name = "bfin-i2s-pcm-audio",
|
|
.codec_name = "ssm2602.0-001b",
|
|
.codec_name = "ssm2602.0-001b",
|
|
- .ops = &bf5xx_ssm2602_ops,
|
|
|
|
|
|
+ .init = bf5xx_ssm2602_dai_init,
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|