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