2019-04-19 12:21:52 +02:00
// SPDX-License-Identifier: GPL-2.0
//
// Copyright 2009 Simtec Electronics
2009-08-20 22:50:43 +01:00
2011-07-15 12:38:28 -04:00
# include <linux/module.h>
2009-08-20 22:50:43 +01:00
# include <sound/soc.h>
# include "s3c24xx_simtec.h"
static const struct snd_soc_dapm_widget dapm_widgets [ ] = {
SND_SOC_DAPM_LINE ( " GSM Out " , NULL ) ,
SND_SOC_DAPM_LINE ( " GSM In " , NULL ) ,
SND_SOC_DAPM_LINE ( " Line In " , NULL ) ,
SND_SOC_DAPM_LINE ( " Line Out " , NULL ) ,
SND_SOC_DAPM_LINE ( " ZV " , NULL ) ,
SND_SOC_DAPM_MIC ( " Mic Jack " , NULL ) ,
SND_SOC_DAPM_HP ( " Headphone Jack " , NULL ) ,
} ;
static const struct snd_soc_dapm_route base_map [ ] = {
/* Headphone connected to HP{L,R}OUT and HP{L,R}COM */
{ " Headphone Jack " , NULL , " HPLOUT " } ,
{ " Headphone Jack " , NULL , " HPLCOM " } ,
{ " Headphone Jack " , NULL , " HPROUT " } ,
{ " Headphone Jack " , NULL , " HPRCOM " } ,
/* ZV connected to Line1 */
{ " LINE1L " , NULL , " ZV " } ,
{ " LINE1R " , NULL , " ZV " } ,
/* Line In connected to Line2 */
{ " LINE2L " , NULL , " Line In " } ,
{ " LINE2R " , NULL , " Line In " } ,
/* Microphone connected to MIC3R and MIC_BIAS */
{ " MIC3L " , NULL , " Mic Jack " } ,
/* GSM connected to MONO_LOUT and MIC3L (in) */
{ " GSM Out " , NULL , " MONO_LOUT " } ,
{ " MIC3L " , NULL , " GSM In " } ,
/* Speaker is connected to LINEOUT{LN,LP,RN,RP}, however we are
* not using the DAPM to power it up and down as there it makes
* a click when powering up . */
} ;
/**
* simtec_hermes_init - initialise and add controls
* @ codec ; The codec instance to attach to .
*
* Attach our controls and configure the necessary codec
* mappings for our sound card instance .
*/
2010-03-17 20:15:21 +00:00
static int simtec_hermes_init ( struct snd_soc_pcm_runtime * rtd )
2009-08-20 22:50:43 +01:00
{
2010-03-17 20:15:21 +00:00
simtec_audio_init ( rtd ) ;
2009-08-20 22:50:43 +01:00
return 0 ;
}
2019-06-06 13:10:16 +09:00
SND_SOC_DAILINK_DEFS ( tlv320aic33 ,
DAILINK_COMP_ARRAY ( COMP_CPU ( " s3c24xx-iis " ) ) ,
DAILINK_COMP_ARRAY ( COMP_CODEC ( " tlv320aic3x-codec.0-001a " ,
" tlv320aic3x-hifi " ) ) ,
DAILINK_COMP_ARRAY ( COMP_PLATFORM ( " s3c24xx-iis " ) ) ) ;
2009-08-20 22:50:43 +01:00
static struct snd_soc_dai_link simtec_dai_aic33 = {
. name = " tlv320aic33 " ,
. stream_name = " TLV320AIC33 " ,
. init = simtec_hermes_init ,
2019-06-06 13:10:16 +09:00
SND_SOC_DAILINK_REG ( tlv320aic33 ) ,
2009-08-20 22:50:43 +01:00
} ;
/* simtec audio machine driver */
static struct snd_soc_card snd_soc_machine_simtec_aic33 = {
. name = " Simtec-Hermes " ,
2011-12-22 10:53:15 +08:00
. owner = THIS_MODULE ,
2009-08-20 22:50:43 +01:00
. dai_link = & simtec_dai_aic33 ,
. num_links = 1 ,
2011-10-08 12:19:12 +01:00
. dapm_widgets = dapm_widgets ,
. num_dapm_widgets = ARRAY_SIZE ( dapm_widgets ) ,
. dapm_routes = base_map ,
. num_dapm_routes = ARRAY_SIZE ( base_map ) ,
2009-08-20 22:50:43 +01:00
} ;
2012-12-07 09:26:15 -05:00
static int simtec_audio_hermes_probe ( struct platform_device * pd )
2009-08-20 22:50:43 +01:00
{
dev_info ( & pd - > dev , " probing.... \n " ) ;
2010-03-17 20:15:21 +00:00
return simtec_audio_core_probe ( pd , & snd_soc_machine_simtec_aic33 ) ;
2009-08-20 22:50:43 +01:00
}
static struct platform_driver simtec_audio_hermes_platdrv = {
. driver = {
. name = " s3c24xx-simtec-hermes-snd " ,
. pm = simtec_audio_pm ,
} ,
. probe = simtec_audio_hermes_probe ,
2012-12-07 09:26:15 -05:00
. remove = simtec_audio_remove ,
2009-08-20 22:50:43 +01:00
} ;
2011-11-23 15:20:13 +00:00
module_platform_driver ( simtec_audio_hermes_platdrv ) ;
2009-08-20 22:50:43 +01:00
2011-11-23 15:20:13 +00:00
MODULE_ALIAS ( " platform:s3c24xx-simtec-hermes-snd " ) ;
2009-08-20 22:50:43 +01:00
MODULE_AUTHOR ( " Ben Dooks <ben@simtec.co.uk> " ) ;
MODULE_DESCRIPTION ( " ALSA SoC Simtec Audio support " ) ;
MODULE_LICENSE ( " GPL " ) ;