diff options
author | Jochen Voss <voss@seehuhn.de> | 2006-08-08 15:13:42 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2006-09-23 04:40:23 -0400 |
commit | 96d9e9347c9c5ca980bef22b4add7d437d79034f (patch) | |
tree | 302ad6bbddb84efb58367f46d0a4c21df56a71e5 | |
parent | 683fe1537e660c322c8af953773921e814791193 (diff) |
[ALSA] Revolution 5.1 - register the AK5365 ADC with ALSA
Enable capture support for the M-Audio Revolution 5.1 card,
by registering the ADC with ALSA.
Signed-off-by: Jochen Voss <voss@seehuhn.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
-rw-r--r-- | sound/pci/ice1712/revo.c | 30 | ||||
-rw-r--r-- | sound/pci/ice1712/revo.h | 2 |
2 files changed, 29 insertions, 3 deletions
diff --git a/sound/pci/ice1712/revo.c b/sound/pci/ice1712/revo.c index fec9440cb310..ef64be49a898 100644 --- a/sound/pci/ice1712/revo.c +++ b/sound/pci/ice1712/revo.c | |||
@@ -98,6 +98,9 @@ static unsigned int revo51_num_stereo[] = {2, 1, 1, 2}; | |||
98 | static char *revo51_channel_names[] = {"PCM Playback Volume", "PCM Center Playback Volume", | 98 | static char *revo51_channel_names[] = {"PCM Playback Volume", "PCM Center Playback Volume", |
99 | "PCM LFE Playback Volume", "PCM Rear Playback Volume"}; | 99 | "PCM LFE Playback Volume", "PCM Rear Playback Volume"}; |
100 | 100 | ||
101 | static unsigned int revo51_adc_num_stereo[] = {2}; | ||
102 | static char *revo51_adc_channel_names[] = {"PCM Capture Volume"}; | ||
103 | |||
101 | static struct snd_akm4xxx akm_revo_front __devinitdata = { | 104 | static struct snd_akm4xxx akm_revo_front __devinitdata = { |
102 | .type = SND_AK4381, | 105 | .type = SND_AK4381, |
103 | .num_dacs = 2, | 106 | .num_dacs = 2, |
@@ -159,7 +162,26 @@ static struct snd_ak4xxx_private akm_revo51_priv __devinitdata = { | |||
159 | .data_mask = VT1724_REVO_CDOUT, | 162 | .data_mask = VT1724_REVO_CDOUT, |
160 | .clk_mask = VT1724_REVO_CCLK, | 163 | .clk_mask = VT1724_REVO_CCLK, |
161 | .cs_mask = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2, | 164 | .cs_mask = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2, |
162 | .cs_addr = 0, | 165 | .cs_addr = VT1724_REVO_CS1 | VT1724_REVO_CS2, |
166 | .cs_none = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2, | ||
167 | .add_flags = VT1724_REVO_CCLK, /* high at init */ | ||
168 | .mask_flags = 0, | ||
169 | }; | ||
170 | |||
171 | static struct snd_akm4xxx akm_revo51_adc __devinitdata = { | ||
172 | .type = SND_AK5365, | ||
173 | .num_adcs = 2, | ||
174 | .num_stereo = revo51_adc_num_stereo, | ||
175 | .channel_names = revo51_adc_channel_names | ||
176 | }; | ||
177 | |||
178 | static struct snd_ak4xxx_private akm_revo51_adc_priv __devinitdata = { | ||
179 | .caddr = 2, | ||
180 | .cif = 0, | ||
181 | .data_mask = VT1724_REVO_CDOUT, | ||
182 | .clk_mask = VT1724_REVO_CCLK, | ||
183 | .cs_mask = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2, | ||
184 | .cs_addr = VT1724_REVO_CS0 | VT1724_REVO_CS2, | ||
163 | .cs_none = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2, | 185 | .cs_none = VT1724_REVO_CS0 | VT1724_REVO_CS1 | VT1724_REVO_CS2, |
164 | .add_flags = VT1724_REVO_CCLK, /* high at init */ | 186 | .add_flags = VT1724_REVO_CCLK, /* high at init */ |
165 | .mask_flags = 0, | 187 | .mask_flags = 0, |
@@ -202,9 +224,13 @@ static int __devinit revo_init(struct snd_ice1712 *ice) | |||
202 | snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE); | 224 | snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE); |
203 | break; | 225 | break; |
204 | case VT1724_SUBDEVICE_REVOLUTION51: | 226 | case VT1724_SUBDEVICE_REVOLUTION51: |
205 | ice->akm_codecs = 1; | 227 | ice->akm_codecs = 2; |
206 | if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo51, &akm_revo51_priv, ice)) < 0) | 228 | if ((err = snd_ice1712_akm4xxx_init(ak, &akm_revo51, &akm_revo51_priv, ice)) < 0) |
207 | return err; | 229 | return err; |
230 | err = snd_ice1712_akm4xxx_init(ak + 1, &akm_revo51_adc, | ||
231 | &akm_revo51_adc_priv, ice); | ||
232 | if (err < 0) | ||
233 | return err; | ||
208 | /* unmute all codecs - needed! */ | 234 | /* unmute all codecs - needed! */ |
209 | snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE); | 235 | snd_ice1712_gpio_write_bits(ice, VT1724_REVO_MUTE, VT1724_REVO_MUTE); |
210 | break; | 236 | break; |
diff --git a/sound/pci/ice1712/revo.h b/sound/pci/ice1712/revo.h index dea52ea219df..efbb86ec3289 100644 --- a/sound/pci/ice1712/revo.h +++ b/sound/pci/ice1712/revo.h | |||
@@ -42,7 +42,7 @@ extern struct snd_ice1712_card_info snd_vt1724_revo_cards[]; | |||
42 | #define VT1724_REVO_CCLK 0x02 | 42 | #define VT1724_REVO_CCLK 0x02 |
43 | #define VT1724_REVO_CDIN 0x04 /* not used */ | 43 | #define VT1724_REVO_CDIN 0x04 /* not used */ |
44 | #define VT1724_REVO_CDOUT 0x08 | 44 | #define VT1724_REVO_CDOUT 0x08 |
45 | #define VT1724_REVO_CS0 0x10 /* not used */ | 45 | #define VT1724_REVO_CS0 0x10 /* AK5365 chipselect for Rev. 5.1 */ |
46 | #define VT1724_REVO_CS1 0x20 /* front AKM4381 chipselect */ | 46 | #define VT1724_REVO_CS1 0x20 /* front AKM4381 chipselect */ |
47 | #define VT1724_REVO_CS2 0x40 /* surround AKM4355 chipselect */ | 47 | #define VT1724_REVO_CS2 0x40 /* surround AKM4355 chipselect */ |
48 | #define VT1724_REVO_MUTE (1<<22) /* 0 = all mute, 1 = normal operation */ | 48 | #define VT1724_REVO_MUTE (1<<22) /* 0 = all mute, 1 = normal operation */ |