xref: /openbmc/linux/sound/pci/ice1712/vt1720_mobo.c (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1*1da177e4SLinus Torvalds /*
2*1da177e4SLinus Torvalds  *   ALSA driver for VT1720/VT1724 (Envy24PT/Envy24HT)
3*1da177e4SLinus Torvalds  *
4*1da177e4SLinus Torvalds  *   Lowlevel functions for VT1720-based motherboards
5*1da177e4SLinus Torvalds  *
6*1da177e4SLinus Torvalds  *	Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
7*1da177e4SLinus Torvalds  *
8*1da177e4SLinus Torvalds  *   This program is free software; you can redistribute it and/or modify
9*1da177e4SLinus Torvalds  *   it under the terms of the GNU General Public License as published by
10*1da177e4SLinus Torvalds  *   the Free Software Foundation; either version 2 of the License, or
11*1da177e4SLinus Torvalds  *   (at your option) any later version.
12*1da177e4SLinus Torvalds  *
13*1da177e4SLinus Torvalds  *   This program is distributed in the hope that it will be useful,
14*1da177e4SLinus Torvalds  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15*1da177e4SLinus Torvalds  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*1da177e4SLinus Torvalds  *   GNU General Public License for more details.
17*1da177e4SLinus Torvalds  *
18*1da177e4SLinus Torvalds  *   You should have received a copy of the GNU General Public License
19*1da177e4SLinus Torvalds  *   along with this program; if not, write to the Free Software
20*1da177e4SLinus Torvalds  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21*1da177e4SLinus Torvalds  *
22*1da177e4SLinus Torvalds  */
23*1da177e4SLinus Torvalds 
24*1da177e4SLinus Torvalds #include <sound/driver.h>
25*1da177e4SLinus Torvalds #include <asm/io.h>
26*1da177e4SLinus Torvalds #include <linux/delay.h>
27*1da177e4SLinus Torvalds #include <linux/interrupt.h>
28*1da177e4SLinus Torvalds #include <linux/init.h>
29*1da177e4SLinus Torvalds #include <linux/slab.h>
30*1da177e4SLinus Torvalds #include <sound/core.h>
31*1da177e4SLinus Torvalds 
32*1da177e4SLinus Torvalds #include "ice1712.h"
33*1da177e4SLinus Torvalds #include "vt1720_mobo.h"
34*1da177e4SLinus Torvalds 
35*1da177e4SLinus Torvalds 
36*1da177e4SLinus Torvalds static int __devinit k8x800_init(ice1712_t *ice)
37*1da177e4SLinus Torvalds {
38*1da177e4SLinus Torvalds 	ice->vt1720 = 1;
39*1da177e4SLinus Torvalds 
40*1da177e4SLinus Torvalds 	/* VT1616 codec */
41*1da177e4SLinus Torvalds 	ice->num_total_dacs = 6;
42*1da177e4SLinus Torvalds 	ice->num_total_adcs = 2;
43*1da177e4SLinus Torvalds 
44*1da177e4SLinus Torvalds 	/* WM8728 codec */
45*1da177e4SLinus Torvalds 	/* FIXME: TODO */
46*1da177e4SLinus Torvalds 
47*1da177e4SLinus Torvalds 	return 0;
48*1da177e4SLinus Torvalds }
49*1da177e4SLinus Torvalds 
50*1da177e4SLinus Torvalds static int __devinit k8x800_add_controls(ice1712_t *ice)
51*1da177e4SLinus Torvalds {
52*1da177e4SLinus Torvalds 	/* FIXME: needs some quirks for VT1616? */
53*1da177e4SLinus Torvalds 	return 0;
54*1da177e4SLinus Torvalds }
55*1da177e4SLinus Torvalds 
56*1da177e4SLinus Torvalds /* EEPROM image */
57*1da177e4SLinus Torvalds 
58*1da177e4SLinus Torvalds static unsigned char k8x800_eeprom[] __devinitdata = {
59*1da177e4SLinus Torvalds 	0x01,	/* SYSCONF: clock 256, 1ADC, 2DACs */
60*1da177e4SLinus Torvalds 	0x02,	/* ACLINK: ACLINK, packed */
61*1da177e4SLinus Torvalds 	0x00,	/* I2S: - */
62*1da177e4SLinus Torvalds 	0x00,	/* SPDIF: - */
63*1da177e4SLinus Torvalds 	0xff,	/* GPIO_DIR */
64*1da177e4SLinus Torvalds 	0xff,	/* GPIO_DIR1 */
65*1da177e4SLinus Torvalds 	0x00,	/* - */
66*1da177e4SLinus Torvalds 	0xff,	/* GPIO_MASK */
67*1da177e4SLinus Torvalds 	0xff,	/* GPIO_MASK1 */
68*1da177e4SLinus Torvalds 	0x00,	/* - */
69*1da177e4SLinus Torvalds 	0x00,	/* GPIO_STATE */
70*1da177e4SLinus Torvalds 	0x00,	/* GPIO_STATE1 */
71*1da177e4SLinus Torvalds 	0x00,	/* - */
72*1da177e4SLinus Torvalds };
73*1da177e4SLinus Torvalds 
74*1da177e4SLinus Torvalds 
75*1da177e4SLinus Torvalds /* entry point */
76*1da177e4SLinus Torvalds struct snd_ice1712_card_info snd_vt1720_mobo_cards[] __devinitdata = {
77*1da177e4SLinus Torvalds 	{
78*1da177e4SLinus Torvalds 		.subvendor = VT1720_SUBDEVICE_K8X800,
79*1da177e4SLinus Torvalds 		.name = "Albatron K8X800 Pro II",
80*1da177e4SLinus Torvalds 		.model = "k8x800",
81*1da177e4SLinus Torvalds 		.chip_init = k8x800_init,
82*1da177e4SLinus Torvalds 		.build_controls = k8x800_add_controls,
83*1da177e4SLinus Torvalds 		.eeprom_size = sizeof(k8x800_eeprom),
84*1da177e4SLinus Torvalds 		.eeprom_data = k8x800_eeprom,
85*1da177e4SLinus Torvalds 	},
86*1da177e4SLinus Torvalds 	{
87*1da177e4SLinus Torvalds 		.subvendor = VT1720_SUBDEVICE_ZNF3_150,
88*1da177e4SLinus Torvalds 		.name = "Chaintech ZNF3-150",
89*1da177e4SLinus Torvalds 		/* identical with k8x800 */
90*1da177e4SLinus Torvalds 		.chip_init = k8x800_init,
91*1da177e4SLinus Torvalds 		.build_controls = k8x800_add_controls,
92*1da177e4SLinus Torvalds 		.eeprom_size = sizeof(k8x800_eeprom),
93*1da177e4SLinus Torvalds 		.eeprom_data = k8x800_eeprom,
94*1da177e4SLinus Torvalds 	},
95*1da177e4SLinus Torvalds 	{
96*1da177e4SLinus Torvalds 		.subvendor = VT1720_SUBDEVICE_ZNF3_250,
97*1da177e4SLinus Torvalds 		.name = "Chaintech ZNF3-250",
98*1da177e4SLinus Torvalds 		/* identical with k8x800 */
99*1da177e4SLinus Torvalds 		.chip_init = k8x800_init,
100*1da177e4SLinus Torvalds 		.build_controls = k8x800_add_controls,
101*1da177e4SLinus Torvalds 		.eeprom_size = sizeof(k8x800_eeprom),
102*1da177e4SLinus Torvalds 		.eeprom_data = k8x800_eeprom,
103*1da177e4SLinus Torvalds 	},
104*1da177e4SLinus Torvalds 	{
105*1da177e4SLinus Torvalds 		.subvendor = VT1720_SUBDEVICE_9CJS,
106*1da177e4SLinus Torvalds 		.name = "Chaintech 9CJS",
107*1da177e4SLinus Torvalds 		/* identical with k8x800 */
108*1da177e4SLinus Torvalds 		.chip_init = k8x800_init,
109*1da177e4SLinus Torvalds 		.build_controls = k8x800_add_controls,
110*1da177e4SLinus Torvalds 		.eeprom_size = sizeof(k8x800_eeprom),
111*1da177e4SLinus Torvalds 		.eeprom_data = k8x800_eeprom,
112*1da177e4SLinus Torvalds 	},
113*1da177e4SLinus Torvalds 	{ } /* terminator */
114*1da177e4SLinus Torvalds };
115*1da177e4SLinus Torvalds 
116