diff options
author | Takashi Iwai <tiwai@suse.de> | 2005-05-27 10:10:40 (GMT) |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2005-05-29 08:15:24 (GMT) |
commit | 8cfbbac6ad024c3dc749ff20d7c308794da6e370 (patch) | |
tree | ea9ca27d2c57e16d88ca6fd8add787d0682a36de /sound/pci/ice1712/amp.c | |
parent | 11ca9afcfee3e6667a498b702642b09ac7312a8a (diff) | |
download | linux-8cfbbac6ad024c3dc749ff20d7c308794da6e370.tar.xz |
[ALSA] ice1724 - Add support of Chaintech AV-710
Documentation,ICE1724 driver
Add the support of Chaintech AV-710 to ice1724 driver.
The patch includes the WM-codec initialization fix by
Jaanus Kivistik <jaanus@no.spam.ee>.
Since both AV-710 and AMP Audio2000 have the same SSID, initialize
WM codecs as default for both devices. In case it breaks Audio2000,
you can pass 'model=amp2000' option to avoid WM codec initialization.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/ice1712/amp.c')
-rw-r--r-- | sound/pci/ice1712/amp.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/sound/pci/ice1712/amp.c b/sound/pci/ice1712/amp.c index 7799517..289b0b5 100644 --- a/sound/pci/ice1712/amp.c +++ b/sound/pci/ice1712/amp.c @@ -30,16 +30,39 @@ #include <sound/core.h> #include "ice1712.h" +#include "envy24ht.h" #include "amp.h" +static void wm_put(ice1712_t *ice, int reg, unsigned short val) +{ + unsigned short cval; + cval = (reg << 9) | val; + snd_vt1724_write_i2c(ice, WM_DEV, cval >> 8, cval & 0xff); +} static int __devinit snd_vt1724_amp_init(ice1712_t *ice) { + static unsigned short wm_inits[] = { + WM_ATTEN_L, 0x0000, /* 0 db */ + WM_ATTEN_R, 0x0000, /* 0 db */ + WM_DAC_CTRL, 0x0008, /* 24bit I2S */ + WM_INT_CTRL, 0x0001, /* 24bit I2S */ + }; + + unsigned int i; + /* only use basic functionality for now */ ice->num_total_dacs = 2; /* only PSDOUT0 is connected */ ice->num_total_adcs = 2; + /* Chaintech AV-710 has another codecs, which need initialization */ + /* initialize WM8728 codec */ + if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AV710) { + for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2) + wm_put(ice, wm_inits[i], wm_inits[i+1]); + } + return 0; } @@ -54,6 +77,13 @@ static int __devinit snd_vt1724_amp_add_controls(ice1712_t *ice) /* entry point */ struct snd_ice1712_card_info snd_vt1724_amp_cards[] __devinitdata = { { + .subvendor = VT1724_SUBDEVICE_AV710, + .name = "Chaintech AV-710", + .model = "av710", + .chip_init = snd_vt1724_amp_init, + .build_controls = snd_vt1724_amp_add_controls, + }, + { .subvendor = VT1724_SUBDEVICE_AUDIO2000, .name = "AMP Ltd AUDIO2000", .model = "amp2000", |