2009-05-04 18:54:11 +04:00
# include <linux/module.h>
# include <sound/soc.h>
# include <asm/mach-types.h>
# include "../codecs/wm8940.h"
# include "pxa2xx-i2s.h"
static int imote2_asoc_hw_params ( struct snd_pcm_substream * substream ,
struct snd_pcm_hw_params * params )
{
struct snd_soc_pcm_runtime * rtd = substream - > private_data ;
2010-03-17 23:15:21 +03:00
struct snd_soc_dai * codec_dai = rtd - > codec_dai ;
struct snd_soc_dai * cpu_dai = rtd - > cpu_dai ;
2009-05-04 18:54:11 +04:00
unsigned int clk = 0 ;
int ret ;
switch ( params_rate ( params ) ) {
case 8000 :
case 16000 :
case 48000 :
case 96000 :
clk = 12288000 ;
break ;
case 11025 :
case 22050 :
case 44100 :
clk = 11289600 ;
break ;
}
ret = snd_soc_dai_set_sysclk ( codec_dai , 0 , clk ,
SND_SOC_CLOCK_IN ) ;
if ( ret < 0 )
return ret ;
/* set the I2S system clock as input (unused) */
ret = snd_soc_dai_set_sysclk ( cpu_dai , PXA2XX_I2S_SYSCLK , clk ,
SND_SOC_CLOCK_OUT ) ;
return ret ;
}
static struct snd_soc_ops imote2_asoc_ops = {
. hw_params = imote2_asoc_hw_params ,
} ;
static struct snd_soc_dai_link imote2_dai = {
. name = " WM8940 " ,
. stream_name = " WM8940 " ,
2010-08-20 20:18:43 +04:00
. cpu_dai_name = " pxa2xx-i2s " ,
2010-03-17 23:15:21 +03:00
. codec_dai_name = " wm8940-hifi " ,
. platform_name = " pxa-pcm-audio " ,
. codec_name = " wm8940-codec.0-0034 " ,
2011-12-20 12:27:28 +04:00
. dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
SND_SOC_DAIFMT_CBS_CFS ,
2009-05-04 18:54:11 +04:00
. ops = & imote2_asoc_ops ,
} ;
2011-12-15 06:55:24 +04:00
static struct snd_soc_card imote2 = {
2009-05-04 18:54:11 +04:00
. name = " Imote2 " ,
2011-12-22 05:44:43 +04:00
. owner = THIS_MODULE ,
2009-05-04 18:54:11 +04:00
. dai_link = & imote2_dai ,
. num_links = 1 ,
} ;
2012-12-07 18:26:17 +04:00
static int imote2_probe ( struct platform_device * pdev )
2009-05-04 18:54:11 +04:00
{
2011-12-15 06:55:24 +04:00
struct snd_soc_card * card = & imote2 ;
2009-05-04 18:54:11 +04:00
int ret ;
2011-12-15 06:55:24 +04:00
card - > dev = & pdev - > dev ;
2009-05-04 18:54:11 +04:00
2015-09-01 05:32:59 +03:00
ret = devm_snd_soc_register_card ( & pdev - > dev , card ) ;
2009-05-04 18:54:11 +04:00
if ( ret )
2011-12-15 06:55:24 +04:00
dev_err ( & pdev - > dev , " snd_soc_register_card() failed: %d \n " ,
ret ) ;
2009-05-04 18:54:11 +04:00
return ret ;
}
2011-12-15 06:55:24 +04:00
static struct platform_driver imote2_driver = {
. driver = {
. name = " imote2-audio " ,
2013-10-17 14:01:37 +04:00
. pm = & snd_soc_pm_ops ,
2011-12-15 06:55:24 +04:00
} ,
. probe = imote2_probe ,
} ;
module_platform_driver ( imote2_driver ) ;
2009-05-04 18:54:11 +04:00
MODULE_AUTHOR ( " Jonathan Cameron " ) ;
MODULE_DESCRIPTION ( " ALSA SoC Imote 2 " ) ;
MODULE_LICENSE ( " GPL " ) ;
2011-12-15 06:55:24 +04:00
MODULE_ALIAS ( " platform:imote2-audio " ) ;