Browse Source

[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>
Takashi Iwai 20 years ago
parent
commit
8cfbbac6ad

+ 3 - 1
Documentation/sound/alsa/ALSA-Configuration.txt

@@ -733,11 +733,13 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
 			* Chaintech ZNF3-150
 			* Chaintech ZNF3-150
 			* Chaintech ZNF3-250
 			* Chaintech ZNF3-250
 			* Chaintech 9CJS
 			* Chaintech 9CJS
+			* Chaintech AV-710
 			* Shuttle SN25P
 			* Shuttle SN25P
 
 
     model       - Use the given board model, one of the following:
     model       - Use the given board model, one of the following:
 		  revo71, amp2000, prodigy71, prodigy192, aureon51,
 		  revo71, amp2000, prodigy71, prodigy192, aureon51,
-		  aureon71, universe, k8x800, phase22, phase28, ms300
+		  aureon71, universe, k8x800, phase22, phase28, ms300,
+		  av710
 
 
     Module supports up to 8 cards and autoprobe.
     Module supports up to 8 cards and autoprobe.
 
 

+ 30 - 0
sound/pci/ice1712/amp.c

@@ -30,16 +30,39 @@
 #include <sound/core.h>
 #include <sound/core.h>
 
 
 #include "ice1712.h"
 #include "ice1712.h"
+#include "envy24ht.h"
 #include "amp.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 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 */
 	/* only use basic functionality for now */
 
 
 	ice->num_total_dacs = 2;	/* only PSDOUT0 is connected */
 	ice->num_total_dacs = 2;	/* only PSDOUT0 is connected */
 	ice->num_total_adcs = 2;
 	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;
 	return 0;
 }
 }
 
 
@@ -53,6 +76,13 @@ static int __devinit snd_vt1724_amp_add_controls(ice1712_t *ice)
 
 
 /* entry point */
 /* entry point */
 struct snd_ice1712_card_info snd_vt1724_amp_cards[] __devinitdata = {
 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,
 		.subvendor = VT1724_SUBDEVICE_AUDIO2000,
 		.name = "AMP Ltd AUDIO2000",
 		.name = "AMP Ltd AUDIO2000",

+ 15 - 1
sound/pci/ice1712/amp.h

@@ -24,9 +24,23 @@
  *
  *
  */      
  */      
 
 
-#define  AMP_AUDIO2000_DEVICE_DESC 	       "{AMP Ltd,AUDIO2000},"
+#define  AMP_AUDIO2000_DEVICE_DESC 	       "{AMP Ltd,AUDIO2000},"\
+					       "{Chaintech,AV-710},"
 
 
+#if 0
 #define VT1724_SUBDEVICE_AUDIO2000	0x12142417	/* Advanced Micro Peripherals Ltd AUDIO2000 */
 #define VT1724_SUBDEVICE_AUDIO2000	0x12142417	/* Advanced Micro Peripherals Ltd AUDIO2000 */
+#else
+#define VT1724_SUBDEVICE_AUDIO2000	0x00030003	/* a dummy ID for AMP Audio2000 */
+#endif
+#define VT1724_SUBDEVICE_AV710		0x12142417	/* AV710 - the same ID with Audio2000! */
+
+/* WM8728 on I2C for AV710 */
+#define WM_DEV		0x36
+
+#define WM_ATTEN_L	0x00
+#define WM_ATTEN_R	0x01
+#define WM_DAC_CTRL	0x02
+#define WM_INT_CTRL	0x03
 
 
 extern struct snd_ice1712_card_info  snd_vt1724_amp_cards[];
 extern struct snd_ice1712_card_info  snd_vt1724_amp_cards[];