Commit | Line | Data |
---|---|---|
a7e7f54f CC |
1 | /* |
2 | * File: sound/soc/blackfin/bf5xx-ssm2602.c | |
3 | * Author: Cliff Cai <Cliff.Cai@analog.com> | |
4 | * | |
5 | * Created: Tue June 06 2008 | |
6 | * Description: board driver for SSM2602 sound chip | |
7 | * | |
8 | * Modified: | |
9 | * Copyright 2008 Analog Devices Inc. | |
10 | * | |
11 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | |
12 | * | |
13 | * This program is free software; you can redistribute it and/or modify | |
14 | * it under the terms of the GNU General Public License as published by | |
15 | * the Free Software Foundation; either version 2 of the License, or | |
16 | * (at your option) any later version. | |
17 | * | |
18 | * This program is distributed in the hope that it will be useful, | |
19 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 | * GNU General Public License for more details. | |
22 | * | |
23 | * You should have received a copy of the GNU General Public License | |
24 | * along with this program; if not, see the file COPYING, or write | |
25 | * to the Free Software Foundation, Inc., | |
26 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
27 | */ | |
28 | ||
29 | #include <linux/module.h> | |
30 | #include <linux/moduleparam.h> | |
31 | #include <linux/device.h> | |
32 | ||
33 | #include <sound/core.h> | |
34 | #include <sound/pcm.h> | |
35 | #include <sound/soc.h> | |
a7e7f54f CC |
36 | #include <sound/pcm_params.h> |
37 | ||
38 | #include <asm/dma.h> | |
39 | #include <asm/portmux.h> | |
40 | #include <linux/gpio.h> | |
41 | #include "../codecs/ssm2602.h" | |
42 | #include "bf5xx-sport.h" | |
a7e7f54f | 43 | |
87506549 | 44 | static struct snd_soc_card bf5xx_ssm2602; |
a7e7f54f | 45 | |
d9ca8e76 | 46 | static int bf5xx_ssm2602_dai_init(struct snd_soc_pcm_runtime *rtd) |
a7e7f54f | 47 | { |
a7e7f54f CC |
48 | /* |
49 | * If you are using a crystal source which frequency is not 12MHz | |
50 | * then modify the below case statement with frequency of the crystal. | |
51 | * | |
52 | * If you are using the SPORT to generate clocking then this is | |
53 | * where to do it. | |
54 | */ | |
d9ca8e76 | 55 | return snd_soc_dai_set_sysclk(rtd->codec_dai, SSM2602_SYSCLK, 12000000, |
a7e7f54f | 56 | SND_SOC_CLOCK_IN); |
a7e7f54f CC |
57 | } |
58 | ||
980b0bc6 LPC |
59 | /* CODEC is master for BCLK and LRC in this configuration. */ |
60 | #define BF5XX_SSM2602_DAIFMT (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | \ | |
61 | SND_SOC_DAIFMT_CBM_CFM) | |
62 | ||
2c66cb99 BS |
63 | static struct snd_soc_dai_link bf5xx_ssm2602_dai[] = { |
64 | { | |
65 | .name = "ssm2602", | |
66 | .stream_name = "SSM2602", | |
67 | .cpu_dai_name = "bfin-i2s.0", | |
68 | .codec_dai_name = "ssm2602-hifi", | |
69 | .platform_name = "bfin-i2s-pcm-audio", | |
70 | .codec_name = "ssm2602.0-001b", | |
d9ca8e76 | 71 | .init = bf5xx_ssm2602_dai_init, |
a3a53fe1 | 72 | .dai_fmt = BF5XX_SSM2602_DAIFMT, |
2c66cb99 BS |
73 | }, |
74 | { | |
75 | .name = "ssm2602", | |
76 | .stream_name = "SSM2602", | |
77 | .cpu_dai_name = "bfin-i2s.1", | |
78 | .codec_dai_name = "ssm2602-hifi", | |
79 | .platform_name = "bfin-i2s-pcm-audio", | |
80 | .codec_name = "ssm2602.0-001b", | |
d9ca8e76 | 81 | .init = bf5xx_ssm2602_dai_init, |
a3a53fe1 | 82 | .dai_fmt = BF5XX_SSM2602_DAIFMT, |
2c66cb99 | 83 | }, |
a7e7f54f CC |
84 | }; |
85 | ||
87506549 | 86 | static struct snd_soc_card bf5xx_ssm2602 = { |
bfe4ee0a | 87 | .name = "bfin-ssm2602", |
30e49530 | 88 | .owner = THIS_MODULE, |
2c66cb99 | 89 | .dai_link = &bf5xx_ssm2602_dai[CONFIG_SND_BF5XX_SPORT_NUM], |
a7e7f54f CC |
90 | .num_links = 1, |
91 | }; | |
92 | ||
f274143f | 93 | static struct platform_device *bf5xx_ssm2602_snd_device; |
a7e7f54f CC |
94 | |
95 | static int __init bf5xx_ssm2602_init(void) | |
96 | { | |
97 | int ret; | |
98 | ||
99 | pr_debug("%s enter\n", __func__); | |
f274143f BS |
100 | bf5xx_ssm2602_snd_device = platform_device_alloc("soc-audio", -1); |
101 | if (!bf5xx_ssm2602_snd_device) | |
a7e7f54f CC |
102 | return -ENOMEM; |
103 | ||
f0fba2ad | 104 | platform_set_drvdata(bf5xx_ssm2602_snd_device, &bf5xx_ssm2602); |
f274143f | 105 | ret = platform_device_add(bf5xx_ssm2602_snd_device); |
a7e7f54f CC |
106 | |
107 | if (ret) | |
f274143f | 108 | platform_device_put(bf5xx_ssm2602_snd_device); |
a7e7f54f CC |
109 | |
110 | return ret; | |
111 | } | |
112 | ||
113 | static void __exit bf5xx_ssm2602_exit(void) | |
114 | { | |
115 | pr_debug("%s enter\n", __func__); | |
f274143f | 116 | platform_device_unregister(bf5xx_ssm2602_snd_device); |
a7e7f54f CC |
117 | } |
118 | ||
119 | module_init(bf5xx_ssm2602_init); | |
120 | module_exit(bf5xx_ssm2602_exit); | |
121 | ||
122 | /* Module information */ | |
123 | MODULE_AUTHOR("Cliff Cai"); | |
124 | MODULE_DESCRIPTION("ALSA SoC SSM2602 BF527-EZKIT"); | |
125 | MODULE_LICENSE("GPL"); | |
126 |