linux/sound/soc/fsl/efika-audio-fabric.c
<<
>>
Prefs
   1/*
   2 * Efika driver for the PSC of the Freescale MPC52xx
   3 * configured as AC97 interface
   4 *
   5 * Copyright 2008 Jon Smirl, Digispeaker
   6 * Author: Jon Smirl <jonsmirl@gmail.com>
   7 *
   8 * This file is licensed under the terms of the GNU General Public License
   9 * version 2. This program is licensed "as is" without any warranty of any
  10 * 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_device.h>
  19#include <linux/of_platform.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