96 lines · c
1/*2 * Efika driver for the PSC of the Freescale MPC52xx3 * configured as AC97 interface4 *5 * Copyright 2008 Jon Smirl, Digispeaker6 * Author: Jon Smirl <jonsmirl@gmail.com>7 *8 * This file is licensed under the terms of the GNU General Public License9 * version 2. This program is licensed "as is" without any warranty of any10 * kind, whether express or implied.11 */12 13#include <linux/init.h>14#include <linux/module.h>15#include <linux/interrupt.h>16#include <linux/device.h>17#include <linux/delay.h>18#include <linux/of.h>19#include <linux/platform_device.h>20#include <linux/dma-mapping.h>21 22#include <sound/core.h>23#include <sound/pcm.h>24#include <sound/pcm_params.h>25#include <sound/initval.h>26#include <sound/soc.h>27 28#include "mpc5200_dma.h"29 30#define DRV_NAME "efika-audio-fabric"31 32SND_SOC_DAILINK_DEFS(analog,33 DAILINK_COMP_ARRAY(COMP_CPU("mpc5200-psc-ac97.0")),34 DAILINK_COMP_ARRAY(COMP_CODEC("stac9766-codec",35 "stac9766-hifi-analog")),36 DAILINK_COMP_ARRAY(COMP_PLATFORM("mpc5200-pcm-audio")));37 38SND_SOC_DAILINK_DEFS(iec958,39 DAILINK_COMP_ARRAY(COMP_CPU("mpc5200-psc-ac97.1")),40 DAILINK_COMP_ARRAY(COMP_CODEC("stac9766-codec",41 "stac9766-hifi-IEC958")),42 DAILINK_COMP_ARRAY(COMP_PLATFORM("mpc5200-pcm-audio")));43 44static struct snd_soc_dai_link efika_fabric_dai[] = {45{46 .name = "AC97",47 .stream_name = "AC97 Analog",48 SND_SOC_DAILINK_REG(analog),49},50{51 .name = "AC97",52 .stream_name = "AC97 IEC958",53 SND_SOC_DAILINK_REG(iec958),54},55};56 57static struct snd_soc_card card = {58 .name = "Efika",59 .owner = THIS_MODULE,60 .dai_link = efika_fabric_dai,61 .num_links = ARRAY_SIZE(efika_fabric_dai),62};63 64static __init int efika_fabric_init(void)65{66 struct platform_device *pdev;67 int rc;68 69 if (!of_machine_is_compatible("bplan,efika"))70 return -ENODEV;71 72 pdev = platform_device_alloc("soc-audio", 1);73 if (!pdev) {74 pr_err("efika_fabric_init: platform_device_alloc() failed\n");75 return -ENODEV;76 }77 78 platform_set_drvdata(pdev, &card);79 80 rc = platform_device_add(pdev);81 if (rc) {82 pr_err("efika_fabric_init: platform_device_add() failed\n");83 platform_device_put(pdev);84 return -ENODEV;85 }86 return 0;87}88 89module_init(efika_fabric_init);90 91 92MODULE_AUTHOR("Jon Smirl <jonsmirl@gmail.com>");93MODULE_DESCRIPTION(DRV_NAME ": mpc5200 Efika fabric driver");94MODULE_LICENSE("GPL");95 96