2009-05-26 16:34:14 +04:00
/*
* Efika driver for the PSC of the Freescale MPC52xx
* configured as AC97 interface
*
* Copyright 2008 Jon Smirl , Digispeaker
* Author : Jon Smirl < jonsmirl @ gmail . com >
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed " as is " without any warranty of any
* kind , whether express or implied .
*/
# include <linux/init.h>
# include <linux/module.h>
# include <linux/interrupt.h>
# include <linux/device.h>
# include <linux/delay.h>
# include <linux/of_device.h>
# include <linux/of_platform.h>
# include <linux/dma-mapping.h>
# include <sound/core.h>
# include <sound/pcm.h>
# include <sound/pcm_params.h>
# include <sound/initval.h>
# include <sound/soc.h>
# include "mpc5200_dma.h"
# include "mpc5200_psc_ac97.h"
# include "../codecs/stac9766.h"
2009-08-07 18:33:53 +04:00
# define DRV_NAME "efika-audio-fabric"
2009-05-26 16:34:14 +04:00
static struct snd_soc_dai_link efika_fabric_dai [ ] = {
{
. name = " AC97 " ,
. stream_name = " AC97 Analog " ,
2010-03-17 23:15:21 +03:00
. codec_dai_name = " stac9766-hifi-analog " ,
. cpu_dai_name = " mpc5200-psc-ac97.0 " ,
. platform_name = " mpc5200-pcm-audio " ,
. codec_name = " stac9766-codec " ,
2009-05-26 16:34:14 +04:00
} ,
{
. name = " AC97 " ,
. stream_name = " AC97 IEC958 " ,
2010-03-17 23:15:21 +03:00
. codec_dai_name = " stac9766-hifi-IEC958 " ,
. cpu_dai_name = " mpc5200-psc-ac97.1 " ,
. platform_name = " mpc5200-pcm-audio " ,
. codec_name = " stac9766-codec " ,
2009-05-26 16:34:14 +04:00
} ,
} ;
2011-12-22 17:04:54 +04:00
static struct snd_soc_card card = {
. name = " Efika " ,
. owner = THIS_MODULE ,
. dai_link = efika_fabric_dai ,
. num_links = ARRAY_SIZE ( efika_fabric_dai ) ,
} ;
2009-05-26 16:34:14 +04:00
static __init int efika_fabric_init ( void )
{
struct platform_device * pdev ;
int rc ;
2010-02-02 07:34:14 +03:00
if ( ! of_machine_is_compatible ( " bplan,efika " ) )
2009-05-26 16:34:14 +04:00
return - ENODEV ;
pdev = platform_device_alloc ( " soc-audio " , 1 ) ;
if ( ! pdev ) {
pr_err ( " efika_fabric_init: platform_device_alloc() failed \n " ) ;
return - ENODEV ;
}
2010-03-17 23:15:21 +03:00
platform_set_drvdata ( pdev , & card ) ;
2009-05-26 16:34:14 +04:00
rc = platform_device_add ( pdev ) ;
if ( rc ) {
pr_err ( " efika_fabric_init: platform_device_add() failed \n " ) ;
2010-11-25 10:07:25 +03:00
platform_device_put ( pdev ) ;
2009-05-26 16:34:14 +04:00
return - ENODEV ;
}
return 0 ;
}
module_init ( efika_fabric_init ) ;
MODULE_AUTHOR ( " Jon Smirl <jonsmirl@gmail.com> " ) ;
MODULE_DESCRIPTION ( DRV_NAME " : mpc5200 Efika fabric driver " ) ;
MODULE_LICENSE ( " GPL " ) ;