Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
sound
soc
kirkwood
kirkwood-t5325.c
Go to the documentation of this file.
1
/*
2
* kirkwood-t5325.c
3
*
4
* (c) 2010 Arnaud Patard <
[email protected]
>
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License as published by the
8
* Free Software Foundation; either version 2 of the License, or (at your
9
* option) any later version.
10
*/
11
12
#include <linux/module.h>
13
#include <
linux/moduleparam.h
>
14
#include <
linux/interrupt.h
>
15
#include <
linux/platform_device.h
>
16
#include <linux/slab.h>
17
#include <
sound/soc.h
>
18
#include <
mach/kirkwood.h
>
19
#include <
linux/platform_data/asoc-kirkwood.h
>
20
#include <
asm/mach-types.h
>
21
#include "../codecs/alc5623.h"
22
23
static
int
t5325_hw_params(
struct
snd_pcm_substream
*substream,
24
struct
snd_pcm_hw_params
*
params
)
25
{
26
struct
snd_soc_pcm_runtime
*rtd = substream->
private_data
;
27
struct
snd_soc_dai
*codec_dai = rtd->
codec_dai
;
28
unsigned
int
freq
;
29
30
freq =
params_rate
(params) * 256;
31
32
return
snd_soc_dai_set_sysclk
(codec_dai, 0, freq,
SND_SOC_CLOCK_IN
);
33
34
}
35
36
static
struct
snd_soc_ops
t5325_ops = {
37
.hw_params = t5325_hw_params,
38
};
39
40
static
const
struct
snd_soc_dapm_widget
t5325_dapm_widgets[] = {
41
SND_SOC_DAPM_HP
(
"Headphone Jack"
,
NULL
),
42
SND_SOC_DAPM_SPK
(
"Speaker"
,
NULL
),
43
SND_SOC_DAPM_MIC
(
"Mic Jack"
,
NULL
),
44
};
45
46
static
const
struct
snd_soc_dapm_route
t5325_route[] = {
47
{
"Headphone Jack"
,
NULL
,
"HPL"
},
48
{
"Headphone Jack"
,
NULL
,
"HPR"
},
49
50
{
"Speaker"
,
NULL
,
"SPKOUT"
},
51
{
"Speaker"
,
NULL
,
"SPKOUTN"
},
52
53
{
"MIC1"
,
NULL
,
"Mic Jack"
},
54
{
"MIC2"
,
NULL
,
"Mic Jack"
},
55
};
56
57
static
int
t5325_dai_init(
struct
snd_soc_pcm_runtime
*rtd)
58
{
59
struct
snd_soc_codec
*
codec
= rtd->
codec
;
60
struct
snd_soc_dapm_context
*dapm = &codec->
dapm
;
61
62
snd_soc_dapm_enable_pin
(dapm,
"Mic Jack"
);
63
snd_soc_dapm_enable_pin
(dapm,
"Headphone Jack"
);
64
snd_soc_dapm_enable_pin
(dapm,
"Speaker"
);
65
66
return
0;
67
}
68
69
static
struct
snd_soc_dai_link
t5325_dai[] = {
70
{
71
.name =
"ALC5621"
,
72
.stream_name =
"ALC5621 HiFi"
,
73
.cpu_dai_name =
"kirkwood-i2s"
,
74
.platform_name =
"kirkwood-pcm-audio"
,
75
.codec_dai_name =
"alc5621-hifi"
,
76
.codec_name =
"alc562x-codec.0-001a"
,
77
.dai_fmt =
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_CBS_CFS
,
78
.ops = &t5325_ops,
79
.init = t5325_dai_init,
80
},
81
};
82
83
static
struct
snd_soc_card
t5325 = {
84
.name =
"t5325"
,
85
.owner =
THIS_MODULE
,
86
.dai_link = t5325_dai,
87
.num_links =
ARRAY_SIZE
(t5325_dai),
88
89
.dapm_widgets = t5325_dapm_widgets,
90
.num_dapm_widgets =
ARRAY_SIZE
(t5325_dapm_widgets),
91
.dapm_routes = t5325_route,
92
.num_dapm_routes =
ARRAY_SIZE
(t5325_route),
93
};
94
95
static
int
__devinit
t5325_probe(
struct
platform_device
*pdev)
96
{
97
struct
snd_soc_card
*
card
= &t5325;
98
int
ret
;
99
100
card->
dev
= &pdev->
dev
;
101
102
ret =
snd_soc_register_card
(card);
103
if
(ret)
104
dev_err
(&pdev->
dev
,
"snd_soc_register_card() failed: %d\n"
,
105
ret);
106
return
ret
;
107
}
108
109
static
int
__devexit
t5325_remove(
struct
platform_device
*pdev)
110
{
111
struct
snd_soc_card
*card = platform_get_drvdata(pdev);
112
113
snd_soc_unregister_card
(card);
114
return
0;
115
}
116
117
static
struct
platform_driver
t5325_driver = {
118
.driver = {
119
.name =
"t5325-audio"
,
120
.owner =
THIS_MODULE
,
121
},
122
.probe = t5325_probe,
123
.remove =
__devexit_p
(t5325_remove),
124
};
125
126
module_platform_driver
(t5325_driver);
127
128
MODULE_AUTHOR
(
"Arnaud Patard <
[email protected]
>"
);
129
MODULE_DESCRIPTION
(
"ALSA SoC t5325 audio client"
);
130
MODULE_LICENSE
(
"GPL"
);
131
MODULE_ALIAS
(
"platform:t5325-audio"
);
Generated on Thu Jan 10 2013 15:08:16 for Linux Kernel by
1.8.2