2014-03-05 16:34:35 +08:00
/*
* SiRF Audio port driver
*
* Copyright ( c ) 2011 Cambridge Silicon Radio Limited , a CSR plc group company .
*
* Licensed under GPLv2 or later .
*/
# include <linux/module.h>
# include <sound/soc.h>
# include <sound/dmaengine_pcm.h>
struct sirf_audio_port {
struct regmap * regmap ;
struct snd_dmaengine_dai_dma_data playback_dma_data ;
struct snd_dmaengine_dai_dma_data capture_dma_data ;
} ;
static int sirf_audio_port_dai_probe ( struct snd_soc_dai * dai )
{
struct sirf_audio_port * port = snd_soc_dai_get_drvdata ( dai ) ;
2017-02-25 21:59:33 +02:00
2014-03-05 16:34:35 +08:00
snd_soc_dai_init_dma_data ( dai , & port - > playback_dma_data ,
& port - > capture_dma_data ) ;
return 0 ;
}
static struct snd_soc_dai_driver sirf_audio_port_dai = {
. probe = sirf_audio_port_dai_probe ,
. name = " sirf-audio-port " ,
. id = 0 ,
. playback = {
. channels_min = 2 ,
. channels_max = 2 ,
. rates = SNDRV_PCM_RATE_48000 ,
. formats = SNDRV_PCM_FMTBIT_S16_LE ,
} ,
. capture = {
. channels_min = 1 ,
. channels_max = 2 ,
. rates = SNDRV_PCM_RATE_48000 ,
. formats = SNDRV_PCM_FMTBIT_S16_LE ,
} ,
} ;
static const struct snd_soc_component_driver sirf_audio_port_component = {
. name = " sirf-audio-port " ,
} ;
static int sirf_audio_port_probe ( struct platform_device * pdev )
{
int ret ;
struct sirf_audio_port * port ;
port = devm_kzalloc ( & pdev - > dev ,
sizeof ( struct sirf_audio_port ) , GFP_KERNEL ) ;
if ( ! port )
return - ENOMEM ;
ret = devm_snd_soc_register_component ( & pdev - > dev ,
& sirf_audio_port_component , & sirf_audio_port_dai , 1 ) ;
if ( ret )
return ret ;
platform_set_drvdata ( pdev , port ) ;
return devm_snd_dmaengine_pcm_register ( & pdev - > dev , NULL , 0 ) ;
}
static const struct of_device_id sirf_audio_port_of_match [ ] = {
{ . compatible = " sirf,audio-port " , } ,
{ }
} ;
MODULE_DEVICE_TABLE ( of , sirf_audio_port_of_match ) ;
static struct platform_driver sirf_audio_port_driver = {
. driver = {
. name = " sirf-audio-port " ,
. of_match_table = sirf_audio_port_of_match ,
} ,
. probe = sirf_audio_port_probe ,
} ;
module_platform_driver ( sirf_audio_port_driver ) ;
MODULE_DESCRIPTION ( " SiRF Audio Port driver " ) ;
MODULE_AUTHOR ( " RongJun Ying <Rongjun.Ying@csr.com> " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;