• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/sound/soc/s3c24xx/
1/* sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c
2 *
3 * Copyright 2009 Simtec Electronics
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8*/
9
10#include <linux/module.h>
11#include <linux/clk.h>
12#include <linux/platform_device.h>
13
14#include <sound/core.h>
15#include <sound/pcm.h>
16#include <sound/soc.h>
17#include <sound/soc-dapm.h>
18
19#include <plat/audio-simtec.h>
20
21#include "s3c-dma.h"
22#include "s3c24xx-i2s.h"
23#include "s3c24xx_simtec.h"
24
25#include "../codecs/tlv320aic23.h"
26
27/* supported machines:
28 *
29 * Machine	Connections		AMP
30 * -------	-----------		---
31 * BAST		MIC, HPOUT, LOUT, LIN	TPA2001D1 (HPOUTL,R) (gain hardwired)
32 * VR1000	HPOUT, LIN		None
33 * VR2000	LIN, LOUT, MIC, HP	LM4871 (HPOUTL,R)
34 * DePicture	LIN, LOUT, MIC, HP	LM4871 (HPOUTL,R)
35 * Anubis	LIN, LOUT, MIC, HP	TPA2001D1 (HPOUTL,R)
36 */
37
38static const struct snd_soc_dapm_widget dapm_widgets[] = {
39	SND_SOC_DAPM_HP("Headphone Jack", NULL),
40	SND_SOC_DAPM_LINE("Line In", NULL),
41	SND_SOC_DAPM_LINE("Line Out", NULL),
42	SND_SOC_DAPM_MIC("Mic Jack", NULL),
43};
44
45static const struct snd_soc_dapm_route base_map[] = {
46	{ "Headphone Jack", NULL, "LHPOUT"},
47	{ "Headphone Jack", NULL, "RHPOUT"},
48
49	{ "Line Out", NULL, "LOUT" },
50	{ "Line Out", NULL, "ROUT" },
51
52	{ "LLINEIN", NULL, "Line In"},
53	{ "RLINEIN", NULL, "Line In"},
54
55	{ "MICIN", NULL, "Mic Jack"},
56};
57
58/**
59 * simtec_tlv320aic23_init - initialise and add controls
60 * @codec; The codec instance to attach to.
61 *
62 * Attach our controls and configure the necessary codec
63 * mappings for our sound card instance.
64*/
65static int simtec_tlv320aic23_init(struct snd_soc_codec *codec)
66{
67	snd_soc_dapm_new_controls(codec, dapm_widgets,
68				  ARRAY_SIZE(dapm_widgets));
69
70	snd_soc_dapm_add_routes(codec, base_map, ARRAY_SIZE(base_map));
71
72	snd_soc_dapm_enable_pin(codec, "Headphone Jack");
73	snd_soc_dapm_enable_pin(codec, "Line In");
74	snd_soc_dapm_enable_pin(codec, "Line Out");
75	snd_soc_dapm_enable_pin(codec, "Mic Jack");
76
77	simtec_audio_init(codec);
78	snd_soc_dapm_sync(codec);
79
80	return 0;
81}
82
83static struct snd_soc_dai_link simtec_dai_aic23 = {
84	.name		= "tlv320aic23",
85	.stream_name	= "TLV320AIC23",
86	.cpu_dai	= &s3c24xx_i2s_dai,
87	.codec_dai	= &tlv320aic23_dai,
88	.init		= simtec_tlv320aic23_init,
89};
90
91/* simtec audio machine driver */
92static struct snd_soc_card snd_soc_machine_simtec_aic23 = {
93	.name		= "Simtec",
94	.platform	= &s3c24xx_soc_platform,
95	.dai_link	= &simtec_dai_aic23,
96	.num_links	= 1,
97};
98
99/* simtec audio subsystem */
100static struct snd_soc_device simtec_snd_devdata_aic23 = {
101	.card		= &snd_soc_machine_simtec_aic23,
102	.codec_dev	= &soc_codec_dev_tlv320aic23,
103};
104
105static int __devinit simtec_audio_tlv320aic23_probe(struct platform_device *pd)
106{
107	return simtec_audio_core_probe(pd, &simtec_snd_devdata_aic23);
108}
109
110static struct platform_driver simtec_audio_tlv320aic23_platdrv = {
111	.driver	= {
112		.owner	= THIS_MODULE,
113		.name	= "s3c24xx-simtec-tlv320aic23",
114		.pm	= simtec_audio_pm,
115	},
116	.probe	= simtec_audio_tlv320aic23_probe,
117	.remove	= __devexit_p(simtec_audio_remove),
118};
119
120MODULE_ALIAS("platform:s3c24xx-simtec-tlv320aic23");
121
122static int __init simtec_tlv320aic23_modinit(void)
123{
124	return platform_driver_register(&simtec_audio_tlv320aic23_platdrv);
125}
126
127static void __exit simtec_tlv320aic23_modexit(void)
128{
129	platform_driver_unregister(&simtec_audio_tlv320aic23_platdrv);
130}
131
132module_init(simtec_tlv320aic23_modinit);
133module_exit(simtec_tlv320aic23_modexit);
134
135MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
136MODULE_DESCRIPTION("ALSA SoC Simtec Audio support");
137MODULE_LICENSE("GPL");
138