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
aoa
core
alsa.c
Go to the documentation of this file.
1
/*
2
* Apple Onboard Audio Alsa helpers
3
*
4
* Copyright 2006 Johannes Berg <
[email protected]
>
5
*
6
* GPL v2, can be found in COPYING.
7
*/
8
#include <linux/module.h>
9
#include "
alsa.h
"
10
11
static
int
index
= -1;
12
module_param
(
index
,
int
, 0444);
13
MODULE_PARM_DESC
(
index
,
"index for AOA sound card."
);
14
15
static
struct
aoa_card
*
aoa_card
;
16
17
int
aoa_alsa_init
(
char
*
name
,
struct
module
*
mod
,
struct
device
*
dev
)
18
{
19
struct
snd_card
*
alsa_card
;
20
int
err
;
21
22
if
(aoa_card)
23
/* cannot be EEXIST due to usage in aoa_fabric_register */
24
return
-
EBUSY
;
25
26
err =
snd_card_create
(
index
, name, mod,
sizeof
(
struct
aoa_card),
27
&alsa_card);
28
if
(err < 0)
29
return
err
;
30
aoa_card = alsa_card->
private_data
;
31
aoa_card->
alsa_card
=
alsa_card
;
32
alsa_card->
dev
=
dev
;
33
strlcpy
(alsa_card->
driver
,
"AppleOnbdAudio"
,
sizeof
(alsa_card->
driver
));
34
strlcpy
(alsa_card->
shortname
, name,
sizeof
(alsa_card->
shortname
));
35
strlcpy
(alsa_card->
longname
, name,
sizeof
(alsa_card->
longname
));
36
strlcpy
(alsa_card->
mixername
, name,
sizeof
(alsa_card->
mixername
));
37
err =
snd_card_register
(aoa_card->
alsa_card
);
38
if
(err < 0) {
39
printk
(
KERN_ERR
"snd-aoa: couldn't register alsa card\n"
);
40
snd_card_free
(aoa_card->
alsa_card
);
41
aoa_card =
NULL
;
42
return
err
;
43
}
44
return
0;
45
}
46
47
struct
snd_card
*
aoa_get_card
(
void
)
48
{
49
if
(aoa_card)
50
return
aoa_card->
alsa_card
;
51
return
NULL
;
52
}
53
EXPORT_SYMBOL_GPL
(
aoa_get_card
);
54
55
void
aoa_alsa_cleanup
(
void
)
56
{
57
if
(aoa_card) {
58
snd_card_free
(aoa_card->
alsa_card
);
59
aoa_card =
NULL
;
60
}
61
}
62
63
int
aoa_snd_device_new
(
snd_device_type_t
type
,
64
void
* device_data,
struct
snd_device_ops
* ops)
65
{
66
struct
snd_card
*
card
=
aoa_get_card
();
67
int
err
;
68
69
if
(!card)
return
-
ENOMEM
;
70
71
err =
snd_device_new
(card, type, device_data, ops);
72
if
(err) {
73
printk
(
KERN_ERR
"snd-aoa: failed to create snd device (%d)\n"
, err);
74
return
err
;
75
}
76
err =
snd_device_register
(card, device_data);
77
if
(err) {
78
printk
(
KERN_ERR
"snd-aoa: failed to register "
79
"snd device (%d)\n"
, err);
80
printk
(
KERN_ERR
"snd-aoa: have you forgotten the "
81
"dev_register callback?\n"
);
82
snd_device_free
(card, device_data);
83
}
84
return
err
;
85
}
86
EXPORT_SYMBOL_GPL
(
aoa_snd_device_new
);
87
88
int
aoa_snd_ctl_add
(
struct
snd_kcontrol
*
control
)
89
{
90
int
err
;
91
92
if
(!aoa_card)
return
-
ENODEV
;
93
94
err =
snd_ctl_add
(aoa_card->
alsa_card
, control);
95
if
(err)
96
printk
(
KERN_ERR
"snd-aoa: failed to add alsa control (%d)\n"
,
97
err);
98
return
err
;
99
}
100
EXPORT_SYMBOL_GPL
(
aoa_snd_ctl_add
);
Generated on Thu Jan 10 2013 15:03:31 for Linux Kernel by
1.8.2