2010-10-21 19:40:03 +02:00
/*
* kirkwood - t5325 . c
*
* ( c ) 2010 Arnaud Patard < arnaud . patard @ rtp - net . org >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation ; either version 2 of the License , or ( at your
* option ) any later version .
*/
# include <linux/module.h>
# include <linux/moduleparam.h>
# include <linux/interrupt.h>
# include <linux/platform_device.h>
# include <linux/slab.h>
# include <sound/soc.h>
2012-08-24 15:21:54 +02:00
# include <linux/platform_data/asoc-kirkwood.h>
2010-10-21 19:40:03 +02:00
# include "../codecs/alc5623.h"
static int t5325_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 * codec_dai = rtd - > codec_dai ;
2011-12-28 18:59:30 +08:00
unsigned int freq ;
2010-10-21 19:40:03 +02:00
freq = params_rate ( params ) * 256 ;
return snd_soc_dai_set_sysclk ( codec_dai , 0 , freq , SND_SOC_CLOCK_IN ) ;
}
static struct snd_soc_ops t5325_ops = {
. hw_params = t5325_hw_params ,
} ;
static const struct snd_soc_dapm_widget t5325_dapm_widgets [ ] = {
SND_SOC_DAPM_HP ( " Headphone Jack " , NULL ) ,
SND_SOC_DAPM_SPK ( " Speaker " , NULL ) ,
SND_SOC_DAPM_MIC ( " Mic Jack " , NULL ) ,
} ;
static const struct snd_soc_dapm_route t5325_route [ ] = {
{ " Headphone Jack " , NULL , " HPL " } ,
{ " Headphone Jack " , NULL , " HPR " } ,
{ " Speaker " , NULL , " SPKOUT " } ,
{ " Speaker " , NULL , " SPKOUTN " } ,
{ " MIC1 " , NULL , " Mic Jack " } ,
{ " MIC2 " , NULL , " Mic Jack " } ,
} ;
static int t5325_dai_init ( struct snd_soc_pcm_runtime * rtd )
{
struct snd_soc_codec * codec = rtd - > codec ;
2010-11-05 15:53:46 +02:00
struct snd_soc_dapm_context * dapm = & codec - > dapm ;
2010-10-21 19:40:03 +02:00
2010-11-05 15:53:46 +02:00
snd_soc_dapm_enable_pin ( dapm , " Mic Jack " ) ;
snd_soc_dapm_enable_pin ( dapm , " Headphone Jack " ) ;
snd_soc_dapm_enable_pin ( dapm , " Speaker " ) ;
2010-10-21 19:40:03 +02:00
return 0 ;
}
static struct snd_soc_dai_link t5325_dai [ ] = {
{
. name = " ALC5621 " ,
. stream_name = " ALC5621 HiFi " ,
2013-10-21 10:50:49 +02:00
. cpu_dai_name = " i2s " ,
2013-08-04 20:27:03 +01:00
. platform_name = " mvebu-audio " ,
2010-10-21 19:40:03 +02:00
. codec_dai_name = " alc5621-hifi " ,
. codec_name = " alc562x-codec.0-001a " ,
2011-12-28 18:59:30 +08:00
. dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS ,
2010-10-21 19:40:03 +02:00
. ops = & t5325_ops ,
. init = t5325_dai_init ,
} ,
} ;
static struct snd_soc_card t5325 = {
. name = " t5325 " ,
2011-12-23 14:49:28 +08:00
. owner = THIS_MODULE ,
2010-10-21 19:40:03 +02:00
. dai_link = t5325_dai ,
. num_links = ARRAY_SIZE ( t5325_dai ) ,
2011-12-28 19:03:23 +08:00
. dapm_widgets = t5325_dapm_widgets ,
. num_dapm_widgets = ARRAY_SIZE ( t5325_dapm_widgets ) ,
. dapm_routes = t5325_route ,
. num_dapm_routes = ARRAY_SIZE ( t5325_route ) ,
2010-10-21 19:40:03 +02:00
} ;
2012-12-07 09:26:26 -05:00
static int t5325_probe ( struct platform_device * pdev )
2010-10-21 19:40:03 +02:00
{
2011-12-28 20:30:15 +08:00
struct snd_soc_card * card = & t5325 ;
2010-10-21 19:40:03 +02:00
int ret ;
2011-12-28 20:30:15 +08:00
card - > dev = & pdev - > dev ;
2010-10-21 19:40:03 +02:00
2011-12-28 20:30:15 +08:00
ret = snd_soc_register_card ( card ) ;
if ( ret )
dev_err ( & pdev - > dev , " snd_soc_register_card() failed: %d \n " ,
ret ) ;
2010-10-21 19:40:03 +02:00
return ret ;
}
2012-12-07 09:26:26 -05:00
static int t5325_remove ( struct platform_device * pdev )
2010-10-21 19:40:03 +02:00
{
2011-12-28 20:30:15 +08:00
struct snd_soc_card * card = platform_get_drvdata ( pdev ) ;
snd_soc_unregister_card ( card ) ;
return 0 ;
2010-10-21 19:40:03 +02:00
}
2011-12-28 20:30:15 +08:00
static struct platform_driver t5325_driver = {
. driver = {
. name = " t5325-audio " ,
. owner = THIS_MODULE ,
} ,
. probe = t5325_probe ,
2012-12-07 09:26:26 -05:00
. remove = t5325_remove ,
2011-12-28 20:30:15 +08:00
} ;
module_platform_driver ( t5325_driver ) ;
2010-10-21 19:40:03 +02:00
MODULE_AUTHOR ( " Arnaud Patard <arnaud.patard@rtp-net.org> " ) ;
MODULE_DESCRIPTION ( " ALSA SoC t5325 audio client " ) ;
MODULE_LICENSE ( " GPL " ) ;
2011-12-28 20:30:15 +08:00
MODULE_ALIAS ( " platform:t5325-audio " ) ;