diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /sound/pci/hda/hda_local.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'sound/pci/hda/hda_local.h')
-rw-r--r-- | sound/pci/hda/hda_local.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h new file mode 100644 index 000000000000..7c7b849875a0 --- /dev/null +++ b/sound/pci/hda/hda_local.h | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * Universal Interface for Intel High Definition Audio Codec | ||
3 | * | ||
4 | * Local helper functions | ||
5 | * | ||
6 | * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License as published by the Free | ||
10 | * Software Foundation; either version 2 of the License, or (at your option) | ||
11 | * any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
14 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
15 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
16 | * more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License along with | ||
19 | * this program; if not, write to the Free Software Foundation, Inc., 59 | ||
20 | * Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
21 | */ | ||
22 | |||
23 | #ifndef __SOUND_HDA_LOCAL_H | ||
24 | #define __SOUND_HDA_LOCAL_H | ||
25 | |||
26 | /* | ||
27 | * for mixer controls | ||
28 | */ | ||
29 | #define HDA_COMPOSE_AMP_VAL(nid,chs,idx,dir) ((nid) | ((chs)<<16) | ((dir)<<18) | ((idx)<<19)) | ||
30 | #define HDA_CODEC_VOLUME_MONO_IDX(xname, xcidx, nid, channel, xindex, direction) \ | ||
31 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xcidx, \ | ||
32 | .info = snd_hda_mixer_amp_volume_info, \ | ||
33 | .get = snd_hda_mixer_amp_volume_get, \ | ||
34 | .put = snd_hda_mixer_amp_volume_put, \ | ||
35 | .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, xindex, direction) } | ||
36 | #define HDA_CODEC_VOLUME_IDX(xname, xcidx, nid, xindex, direction) \ | ||
37 | HDA_CODEC_VOLUME_MONO_IDX(xname, xcidx, nid, 3, xindex, direction) | ||
38 | #define HDA_CODEC_VOLUME_MONO(xname, nid, channel, xindex, direction) \ | ||
39 | HDA_CODEC_VOLUME_MONO_IDX(xname, 0, nid, channel, xindex, direction) | ||
40 | #define HDA_CODEC_VOLUME(xname, nid, xindex, direction) \ | ||
41 | HDA_CODEC_VOLUME_MONO(xname, nid, 3, xindex, direction) | ||
42 | #define HDA_CODEC_MUTE_MONO_IDX(xname, xcidx, nid, channel, xindex, direction) \ | ||
43 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, .index = xcidx, \ | ||
44 | .info = snd_hda_mixer_amp_switch_info, \ | ||
45 | .get = snd_hda_mixer_amp_switch_get, \ | ||
46 | .put = snd_hda_mixer_amp_switch_put, \ | ||
47 | .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, xindex, direction) } | ||
48 | #define HDA_CODEC_MUTE_IDX(xname, xcidx, nid, xindex, direction) \ | ||
49 | HDA_CODEC_MUTE_MONO_IDX(xname, xcidx, nid, 3, xindex, direction) | ||
50 | #define HDA_CODEC_MUTE_MONO(xname, nid, channel, xindex, direction) \ | ||
51 | HDA_CODEC_MUTE_MONO_IDX(xname, 0, nid, channel, xindex, direction) | ||
52 | #define HDA_CODEC_MUTE(xname, nid, xindex, direction) \ | ||
53 | HDA_CODEC_MUTE_MONO(xname, nid, 3, xindex, direction) | ||
54 | |||
55 | int snd_hda_mixer_amp_volume_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo); | ||
56 | int snd_hda_mixer_amp_volume_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol); | ||
57 | int snd_hda_mixer_amp_volume_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol); | ||
58 | int snd_hda_mixer_amp_switch_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo); | ||
59 | int snd_hda_mixer_amp_switch_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol); | ||
60 | int snd_hda_mixer_amp_switch_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol); | ||
61 | |||
62 | int snd_hda_create_spdif_out_ctls(struct hda_codec *codec, hda_nid_t nid); | ||
63 | int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid); | ||
64 | |||
65 | /* | ||
66 | * input MUX helper | ||
67 | */ | ||
68 | #define HDA_MAX_NUM_INPUTS 8 | ||
69 | struct hda_input_mux_item { | ||
70 | const char *label; | ||
71 | unsigned int index; | ||
72 | }; | ||
73 | struct hda_input_mux { | ||
74 | unsigned int num_items; | ||
75 | struct hda_input_mux_item items[HDA_MAX_NUM_INPUTS]; | ||
76 | }; | ||
77 | |||
78 | int snd_hda_input_mux_info(const struct hda_input_mux *imux, snd_ctl_elem_info_t *uinfo); | ||
79 | int snd_hda_input_mux_put(struct hda_codec *codec, const struct hda_input_mux *imux, | ||
80 | snd_ctl_elem_value_t *ucontrol, hda_nid_t nid, | ||
81 | unsigned int *cur_val); | ||
82 | |||
83 | /* | ||
84 | * Multi-channel / digital-out PCM helper | ||
85 | */ | ||
86 | |||
87 | enum { HDA_FRONT, HDA_REAR, HDA_CLFE, HDA_SIDE }; /* index for dac_nidx */ | ||
88 | enum { HDA_DIG_NONE, HDA_DIG_EXCLUSIVE, HDA_DIG_ANALOG_DUP }; /* dig_out_used */ | ||
89 | |||
90 | struct hda_multi_out { | ||
91 | int num_dacs; /* # of DACs, must be more than 1 */ | ||
92 | hda_nid_t *dac_nids; /* DAC list */ | ||
93 | hda_nid_t hp_nid; /* optional DAC for HP, 0 when not exists */ | ||
94 | hda_nid_t dig_out_nid; /* digital out audio widget */ | ||
95 | int max_channels; /* currently supported analog channels */ | ||
96 | int dig_out_used; /* current usage of digital out (HDA_DIG_XXX) */ | ||
97 | }; | ||
98 | |||
99 | int snd_hda_multi_out_dig_open(struct hda_codec *codec, struct hda_multi_out *mout); | ||
100 | int snd_hda_multi_out_dig_close(struct hda_codec *codec, struct hda_multi_out *mout); | ||
101 | int snd_hda_multi_out_analog_open(struct hda_codec *codec, struct hda_multi_out *mout, | ||
102 | snd_pcm_substream_t *substream); | ||
103 | int snd_hda_multi_out_analog_prepare(struct hda_codec *codec, struct hda_multi_out *mout, | ||
104 | unsigned int stream_tag, | ||
105 | unsigned int format, | ||
106 | snd_pcm_substream_t *substream); | ||
107 | int snd_hda_multi_out_analog_cleanup(struct hda_codec *codec, struct hda_multi_out *mout); | ||
108 | |||
109 | /* | ||
110 | * generic codec parser | ||
111 | */ | ||
112 | int snd_hda_parse_generic_codec(struct hda_codec *codec); | ||
113 | |||
114 | /* | ||
115 | * generic proc interface | ||
116 | */ | ||
117 | #ifdef CONFIG_PROC_FS | ||
118 | int snd_hda_codec_proc_new(struct hda_codec *codec); | ||
119 | #else | ||
120 | static inline int snd_hda_codec_proc_new(struct hda_codec *codec) { return 0; } | ||
121 | #endif | ||
122 | |||
123 | /* | ||
124 | * Misc | ||
125 | */ | ||
126 | struct hda_board_config { | ||
127 | const char *modelname; | ||
128 | int config; | ||
129 | unsigned short pci_vendor; | ||
130 | unsigned short pci_device; | ||
131 | }; | ||
132 | |||
133 | int snd_hda_check_board_config(struct hda_codec *codec, struct hda_board_config *tbl); | ||
134 | int snd_hda_add_new_ctls(struct hda_codec *codec, snd_kcontrol_new_t *knew); | ||
135 | |||
136 | /* | ||
137 | * power management | ||
138 | */ | ||
139 | #ifdef CONFIG_PM | ||
140 | int snd_hda_resume_ctls(struct hda_codec *codec, snd_kcontrol_new_t *knew); | ||
141 | int snd_hda_resume_spdif_out(struct hda_codec *codec); | ||
142 | int snd_hda_resume_spdif_in(struct hda_codec *codec); | ||
143 | #endif | ||
144 | |||
145 | /* | ||
146 | * unsolicited event handler | ||
147 | */ | ||
148 | |||
149 | #define HDA_UNSOL_QUEUE_SIZE 64 | ||
150 | |||
151 | struct hda_bus_unsolicited { | ||
152 | /* ring buffer */ | ||
153 | u32 queue[HDA_UNSOL_QUEUE_SIZE * 2]; | ||
154 | unsigned int rp, wp; | ||
155 | |||
156 | /* workqueue */ | ||
157 | struct workqueue_struct *workq; | ||
158 | struct work_struct work; | ||
159 | }; | ||
160 | |||
161 | #endif /* __SOUND_HDA_LOCAL_H */ | ||