Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/sound/aoa/aoa.h
10814 views
1
/*
2
* Apple Onboard Audio definitions
3
*
4
* Copyright 2006 Johannes Berg <[email protected]>
5
*
6
* GPL v2, can be found in COPYING.
7
*/
8
9
#ifndef __AOA_H
10
#define __AOA_H
11
#include <asm/prom.h>
12
#include <linux/module.h>
13
#include <sound/core.h>
14
#include <sound/asound.h>
15
#include <sound/control.h>
16
#include "aoa-gpio.h"
17
#include "soundbus/soundbus.h"
18
19
#define MAX_CODEC_NAME_LEN 32
20
21
struct aoa_codec {
22
char name[MAX_CODEC_NAME_LEN];
23
24
struct module *owner;
25
26
/* called when the fabric wants to init this codec.
27
* Do alsa card manipulations from here. */
28
int (*init)(struct aoa_codec *codec);
29
30
/* called when the fabric is done with the codec.
31
* The alsa card will be cleaned up so don't bother. */
32
void (*exit)(struct aoa_codec *codec);
33
34
/* May be NULL, but can be used by the fabric.
35
* Refcounting is the codec driver's responsibility */
36
struct device_node *node;
37
38
/* assigned by fabric before init() is called, points
39
* to the soundbus device. Cannot be NULL. */
40
struct soundbus_dev *soundbus_dev;
41
42
/* assigned by the fabric before init() is called, points
43
* to the fabric's gpio runtime record for the relevant
44
* device. */
45
struct gpio_runtime *gpio;
46
47
/* assigned by the fabric before init() is called, contains
48
* a codec specific bitmask of what outputs and inputs are
49
* actually connected */
50
u32 connected;
51
52
/* data the fabric can associate with this structure */
53
void *fabric_data;
54
55
/* private! */
56
struct list_head list;
57
struct aoa_fabric *fabric;
58
};
59
60
/* return 0 on success */
61
extern int
62
aoa_codec_register(struct aoa_codec *codec);
63
extern void
64
aoa_codec_unregister(struct aoa_codec *codec);
65
66
#define MAX_LAYOUT_NAME_LEN 32
67
68
struct aoa_fabric {
69
char name[MAX_LAYOUT_NAME_LEN];
70
71
struct module *owner;
72
73
/* once codecs register, they are passed here after.
74
* They are of course not initialised, since the
75
* fabric is responsible for initialising some fields
76
* in the codec structure! */
77
int (*found_codec)(struct aoa_codec *codec);
78
/* called for each codec when it is removed,
79
* also in the case that aoa_fabric_unregister
80
* is called and all codecs are removed
81
* from this fabric.
82
* Also called if found_codec returned 0 but
83
* the codec couldn't initialise. */
84
void (*remove_codec)(struct aoa_codec *codec);
85
/* If found_codec returned 0, and the codec
86
* could be initialised, this is called. */
87
void (*attached_codec)(struct aoa_codec *codec);
88
};
89
90
/* return 0 on success, -EEXIST if another fabric is
91
* registered, -EALREADY if the same fabric is registered.
92
* Passing NULL can be used to test for the presence
93
* of another fabric, if -EALREADY is returned there is
94
* no other fabric present.
95
* In the case that the function returns -EALREADY
96
* and the fabric passed is not NULL, all codecs
97
* that are not assigned yet are passed to the fabric
98
* again for reconsideration. */
99
extern int
100
aoa_fabric_register(struct aoa_fabric *fabric, struct device *dev);
101
102
/* it is vital to call this when the fabric exits!
103
* When calling, the remove_codec will be called
104
* for all codecs, unless it is NULL. */
105
extern void
106
aoa_fabric_unregister(struct aoa_fabric *fabric);
107
108
/* if for some reason you want to get rid of a codec
109
* before the fabric is removed, use this.
110
* Note that remove_codec is called for it! */
111
extern void
112
aoa_fabric_unlink_codec(struct aoa_codec *codec);
113
114
/* alsa help methods */
115
struct aoa_card {
116
struct snd_card *alsa_card;
117
};
118
119
extern int aoa_snd_device_new(snd_device_type_t type,
120
void * device_data, struct snd_device_ops * ops);
121
extern struct snd_card *aoa_get_card(void);
122
extern int aoa_snd_ctl_add(struct snd_kcontrol* control);
123
124
/* GPIO stuff */
125
extern struct gpio_methods *pmf_gpio_methods;
126
extern struct gpio_methods *ftr_gpio_methods;
127
/* extern struct gpio_methods *map_gpio_methods; */
128
129
#endif /* __AOA_H */
130
131