Blame view
sound/soc/blackfin/bf5xx-ad1836.c
3.21 KB
dce944dbb ASoC: new board d... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* * File: sound/soc/blackfin/bf5xx-ad1836.c * Author: Barry Song <Barry.Song@analog.com> * * Created: Aug 4 2009 * Description: Board driver for ad1836 sound chip * * Bugs: Enter bugs at http://blackfin.uclinux.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/device.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/soc.h> |
dce944dbb ASoC: new board d... |
23 24 25 26 27 28 29 30 31 |
#include <sound/pcm_params.h> #include <asm/blackfin.h> #include <asm/cacheflush.h> #include <asm/irq.h> #include <asm/dma.h> #include <asm/portmux.h> #include "../codecs/ad1836.h" |
dce944dbb ASoC: new board d... |
32 33 34 35 36 |
#include "bf5xx-tdm-pcm.h" #include "bf5xx-tdm.h" static struct snd_soc_card bf5xx_ad1836; |
dce944dbb ASoC: new board d... |
37 38 39 40 |
static int bf5xx_ad1836_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { struct snd_soc_pcm_runtime *rtd = substream->private_data; |
f0fba2ad1 ASoC: multi-compo... |
41 42 |
struct snd_soc_dai *cpu_dai = rtd->cpu_dai; struct snd_soc_dai *codec_dai = rtd->codec_dai; |
08db48f1e ASoC: use set_cha... |
43 |
unsigned int channel_map[] = {0, 4, 1, 5, 2, 6, 3, 7}; |
dce944dbb ASoC: new board d... |
44 45 46 47 48 49 50 51 52 53 54 55 |
int ret = 0; /* set cpu DAI configuration */ ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); if (ret < 0) return ret; /* set codec DAI configuration */ ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBM_CFM); if (ret < 0) return ret; |
08db48f1e ASoC: use set_cha... |
56 57 58 59 60 |
/* set cpu DAI channel mapping */ ret = snd_soc_dai_set_channel_map(cpu_dai, ARRAY_SIZE(channel_map), channel_map, ARRAY_SIZE(channel_map), channel_map); if (ret < 0) return ret; |
dce944dbb ASoC: new board d... |
61 62 63 64 |
return 0; } static struct snd_soc_ops bf5xx_ad1836_ops = { |
dce944dbb ASoC: new board d... |
65 66 |
.hw_params = bf5xx_ad1836_hw_params, }; |
2c66cb99d ASoC: Blackfin: p... |
67 68 69 70 71 72 73 |
static struct snd_soc_dai_link bf5xx_ad1836_dai[] = { { .name = "ad1836", .stream_name = "AD1836", .cpu_dai_name = "bfin-tdm.0", .codec_dai_name = "ad1836-hifi", .platform_name = "bfin-tdm-pcm-audio", |
064d58ee3 ASoC: Blackfin: b... |
74 |
.codec_name = "spi0.4", |
2c66cb99d ASoC: Blackfin: p... |
75 76 77 78 79 80 81 82 |
.ops = &bf5xx_ad1836_ops, }, { .name = "ad1836", .stream_name = "AD1836", .cpu_dai_name = "bfin-tdm.1", .codec_dai_name = "ad1836-hifi", .platform_name = "bfin-tdm-pcm-audio", |
064d58ee3 ASoC: Blackfin: b... |
83 |
.codec_name = "spi0.4", |
2c66cb99d ASoC: Blackfin: p... |
84 85 |
.ops = &bf5xx_ad1836_ops, }, |
dce944dbb ASoC: new board d... |
86 87 88 |
}; static struct snd_soc_card bf5xx_ad1836 = { |
bfe4ee0a9 ASoC: Blackfin: s... |
89 |
.name = "bfin-ad1836", |
30e495301 ASoC: blackfin: A... |
90 |
.owner = THIS_MODULE, |
2c66cb99d ASoC: Blackfin: p... |
91 |
.dai_link = &bf5xx_ad1836_dai[CONFIG_SND_BF5XX_SPORT_NUM], |
dce944dbb ASoC: new board d... |
92 93 |
.num_links = 1, }; |
dce944dbb ASoC: new board d... |
94 95 96 97 98 99 100 101 102 |
static struct platform_device *bfxx_ad1836_snd_device; static int __init bf5xx_ad1836_init(void) { int ret; bfxx_ad1836_snd_device = platform_device_alloc("soc-audio", -1); if (!bfxx_ad1836_snd_device) return -ENOMEM; |
f0fba2ad1 ASoC: multi-compo... |
103 |
platform_set_drvdata(bfxx_ad1836_snd_device, &bf5xx_ad1836); |
dce944dbb ASoC: new board d... |
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
ret = platform_device_add(bfxx_ad1836_snd_device); if (ret) platform_device_put(bfxx_ad1836_snd_device); return ret; } static void __exit bf5xx_ad1836_exit(void) { platform_device_unregister(bfxx_ad1836_snd_device); } module_init(bf5xx_ad1836_init); module_exit(bf5xx_ad1836_exit); /* Module information */ MODULE_AUTHOR("Barry Song"); MODULE_DESCRIPTION("ALSA SoC AD1836 board driver"); MODULE_LICENSE("GPL"); |