0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/delay.h>
0011 #include <linux/interrupt.h>
0012 #include <linux/init.h>
0013 #include <sound/core.h>
0014
0015 #include "ice1712.h"
0016 #include "envy24ht.h"
0017 #include "amp.h"
0018
0019 static void wm_put(struct snd_ice1712 *ice, int reg, unsigned short val)
0020 {
0021 unsigned short cval;
0022 cval = (reg << 9) | val;
0023 snd_vt1724_write_i2c(ice, WM_DEV, cval >> 8, cval & 0xff);
0024 }
0025
0026 static int snd_vt1724_amp_init(struct snd_ice1712 *ice)
0027 {
0028 static const unsigned short wm_inits[] = {
0029 WM_ATTEN_L, 0x0000,
0030 WM_ATTEN_R, 0x0000,
0031 WM_DAC_CTRL, 0x0008,
0032 WM_INT_CTRL, 0x0001,
0033 };
0034
0035 unsigned int i;
0036
0037
0038
0039
0040 ice->num_total_dacs = 6;
0041 ice->num_total_adcs = 2;
0042
0043
0044
0045
0046 if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AV710) {
0047 for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2)
0048 wm_put(ice, wm_inits[i], wm_inits[i+1]);
0049 }
0050
0051 return 0;
0052 }
0053
0054 static int snd_vt1724_amp_add_controls(struct snd_ice1712 *ice)
0055 {
0056 if (ice->ac97)
0057
0058
0059 snd_ac97_write_cache(ice->ac97, 0x5a,
0060 snd_ac97_read(ice->ac97, 0x5a) & ~0x8000);
0061 return 0;
0062 }
0063
0064
0065
0066 struct snd_ice1712_card_info snd_vt1724_amp_cards[] = {
0067 {
0068 .subvendor = VT1724_SUBDEVICE_AV710,
0069 .name = "Chaintech AV-710",
0070 .model = "av710",
0071 .chip_init = snd_vt1724_amp_init,
0072 .build_controls = snd_vt1724_amp_add_controls,
0073 },
0074 {
0075 .subvendor = VT1724_SUBDEVICE_AUDIO2000,
0076 .name = "AMP Ltd AUDIO2000",
0077 .model = "amp2000",
0078 .chip_init = snd_vt1724_amp_init,
0079 .build_controls = snd_vt1724_amp_add_controls,
0080 },
0081 { }
0082 };
0083