Update of /cvsroot/alsa/alsa-kernel/pci/ice1712 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25277/pci/ice1712
Modified Files: amp.c aureon.c delta.c envy24ht.h ews.c hoontech.c hoontech.h ice1712.c ice1712.h ice1724.c prodigy.c revo.c Log Message: - added model module option to specify board model to snd-ice1712 and snd-ice1724 drivers. - removed ez8 option from ice1724. this can be specified as "model=ez8" option. - rewritten some struct init in C99 style. - function for accessing i2c of ice1724 (for future use). Index: amp.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/amp.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- amp.c 5 Mar 2004 09:08:38 -0000 1.4 +++ amp.c 7 May 2004 10:18:59 -0000 1.5 @@ -54,10 +54,11 @@ /* entry point */ struct snd_ice1712_card_info snd_vt1724_amp_cards[] __devinitdata = { { - VT1724_SUBDEVICE_AUDIO2000, - "AMP Ltd AUDIO2000", - snd_vt1724_amp_init, - snd_vt1724_amp_add_controls, + .subvendor = VT1724_SUBDEVICE_AUDIO2000, + .name = "AMP Ltd AUDIO2000", + .model = "amp2000", + .chip_init = snd_vt1724_amp_init, + .build_controls = snd_vt1724_amp_add_controls, }, { } /* terminator */ }; Index: aureon.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/aureon.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- aureon.c 5 Mar 2004 09:08:39 -0000 1.5 +++ aureon.c 7 May 2004 10:18:59 -0000 1.6 @@ -496,6 +496,7 @@ { .subvendor = VT1724_SUBDEVICE_AUREON51_SKY, .name = "Terratec Aureon 5.1-Sky", + .model = "aureon51", .chip_init = aureon_init, .build_controls = aureon_add_controls, .eeprom_size = sizeof(aureon51_eeprom), @@ -504,6 +505,7 @@ { .subvendor = VT1724_SUBDEVICE_AUREON71_SPACE, .name = "Terratec Aureon 7.1-Space", + .model = "aureon71", .chip_init = aureon_init, .build_controls = aureon_add_controls, .eeprom_size = sizeof(aureon71_eeprom), Index: delta.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/delta.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- delta.c 28 Mar 2004 15:45:32 -0000 1.16 +++ delta.c 7 May 2004 10:18:59 -0000 1.17 @@ -692,56 +692,64 @@ /* entry point */ struct snd_ice1712_card_info snd_ice1712_delta_cards[] __devinitdata = { { - ICE1712_SUBDEVICE_DELTA1010, - "M Audio Delta 1010", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_DELTADIO2496, - "M Audio Delta DiO 2496", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ - }, - { - ICE1712_SUBDEVICE_DELTA66, - "M Audio Delta 66", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ - }, - { - ICE1712_SUBDEVICE_DELTA44, - "M Audio Delta 44", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ - }, - { - ICE1712_SUBDEVICE_AUDIOPHILE, - "M Audio Audiophile 24/96", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_DELTA410, - "M Audio Delta 410", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_DELTA1010LT, - "M Audio Delta 1010LT", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - }, - { - ICE1712_SUBDEVICE_VX442, - "Digigram VX442", - snd_ice1712_delta_init, - snd_ice1712_delta_add_controls, - 1, /* NO MPU */ + .subvendor = ICE1712_SUBDEVICE_DELTA1010, + .name = "M Audio Delta 1010", + .model = "delta1010", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTADIO2496, + .name = "M Audio Delta DiO 2496", + .model = "dio2496", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA66, + .name = "M Audio Delta 66", + .model = "delta66", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA44, + .name = "M Audio Delta 44", + .model = "delta44", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, + }, + { + .subvendor = ICE1712_SUBDEVICE_AUDIOPHILE, + .name = "M Audio Audiophile 24/96", + .model = "audiophile", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA410, + .name = "M Audio Delta 410", + .model = "delta410", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_DELTA1010LT, + .name = "M Audio Delta 1010LT", + .model = "delta1010lt", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + }, + { + .subvendor = ICE1712_SUBDEVICE_VX442, + .name = "Digigram VX442", + .model = "vx442", + .chip_init = snd_ice1712_delta_init, + .build_controls = snd_ice1712_delta_add_controls, + .no_mpu401 = 1, }, { } /* terminator */ }; Index: envy24ht.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/envy24ht.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- envy24ht.h 9 May 2003 14:10:36 -0000 1.3 +++ envy24ht.h 7 May 2004 10:18:59 -0000 1.4 @@ -209,4 +209,7 @@ #define VT1724_MT_PDMA1_COUNT 0x76 /* word */ +unsigned char snd_vt1724_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr); +void snd_vt1724_write_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr, unsigned char data); + #endif /* __SOUND_VT1724_H */ Index: ews.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/ews.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- ews.c 5 Mar 2004 09:08:39 -0000 1.16 +++ ews.c 7 May 2004 10:18:59 -0000 1.17 @@ -971,34 +971,39 @@ /* entry point */ struct snd_ice1712_card_info snd_ice1712_ews_cards[] __devinitdata = { { - ICE1712_SUBDEVICE_EWX2496, - "TerraTec EWX24/96", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWX2496, + .name = "TerraTec EWX24/96", + .model = "ewx2496", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_EWS88MT, - "TerraTec EWS88MT", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWS88MT, + .name = "TerraTec EWS88MT", + .model = "ews88mt", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_EWS88MT_NEW, - "TerraTec EWS88MT", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWS88MT_NEW, + .name = "TerraTec EWS88MT", + .model = "ews88mt_new", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_EWS88D, - "TerraTec EWS88D", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_EWS88D, + .name = "TerraTec EWS88D", + .model = "ews88d", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { - ICE1712_SUBDEVICE_DMX6FIRE, - "TerraTec DMX6Fire", - snd_ice1712_ews_init, - snd_ice1712_ews_add_controls, + .subvendor = ICE1712_SUBDEVICE_DMX6FIRE, + .name = "TerraTec DMX6Fire", + .model = "dmx6fire", + .chip_init = snd_ice1712_ews_init, + .build_controls = snd_ice1712_ews_add_controls, }, { } /* terminator */ }; Index: hoontech.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/hoontech.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- hoontech.c 4 May 2004 06:46:29 -0000 1.5 +++ hoontech.c 7 May 2004 10:18:59 -0000 1.6 @@ -156,20 +156,6 @@ { int box, chn; - /* EZ8 Hack: Change shortname and subvendor id, Recall functions called in - * snd_ice1712_chip_init when it still thinks it is a Hoontech DSP24 card. - */ - if (ice->ez8) { - strcpy(ice->card->shortname, "Event Electronics EZ8"); - ice->eeprom.subvendor = 0; - ice->gpio.write_mask = ice->eeprom.gpiomask; - ice->gpio.direction = ice->eeprom.gpiodir; - snd_ice1712_write(ice, ICE1712_IREG_GPIO_WRITE_MASK, ice->eeprom.gpiomask); - snd_ice1712_write(ice, ICE1712_IREG_GPIO_DIRECTION, ice->eeprom.gpiodir); - snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, ice->eeprom.gpiostate); - return 0; - } - ice->num_total_dacs = 8; ice->num_total_adcs = 8; @@ -231,17 +217,36 @@ } +static int __devinit snd_ice1712_ez8_init(ice1712_t *ice) +{ + ice->gpio.write_mask = ice->eeprom.gpiomask; + ice->gpio.direction = ice->eeprom.gpiodir; + snd_ice1712_write(ice, ICE1712_IREG_GPIO_WRITE_MASK, ice->eeprom.gpiomask); + snd_ice1712_write(ice, ICE1712_IREG_GPIO_DIRECTION, ice->eeprom.gpiodir); + snd_ice1712_write(ice, ICE1712_IREG_GPIO_DATA, ice->eeprom.gpiostate); + return 0; +} + + /* entry point */ struct snd_ice1712_card_info snd_ice1712_hoontech_cards[] __devinitdata = { { - ICE1712_SUBDEVICE_STDSP24, - "Hoontech SoundTrack Audio DSP24", - snd_ice1712_hoontech_init, + .subvendor = ICE1712_SUBDEVICE_STDSP24, + .name = "Hoontech SoundTrack Audio DSP24", + .model = "dsp24", + .chip_init = snd_ice1712_hoontech_init, + }, + { + .subvendor = ICE1712_SUBDEVICE_STDSP24_MEDIA7_1, + .name = "Hoontech STA DSP24 Media 7.1", + .model = "dsp24_71", + .chip_init = snd_ice1712_hoontech_init, }, { - ICE1712_SUBDEVICE_STDSP24_MEDIA7_1, - "Hoontech STA DSP24 Media 7.1", - snd_ice1712_hoontech_init, + .subvendor = ICE1712_SUBDEVICE_EVENT_EZ8, /* a dummy id */ + .name = "Event Electronics EZ8", + .model = "ez8", + .chip_init = snd_ice1712_ez8_init, }, { } /* terminator */ }; Index: hoontech.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/hoontech.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- hoontech.h 16 Dec 2002 14:23:48 -0000 1.3 +++ hoontech.h 7 May 2004 10:18:59 -0000 1.4 @@ -25,12 +25,14 @@ */ #define HOONTECH_DEVICE_DESC \ - "{Hoontech SoundTrack DSP 24}," \ - "{Hoontech SoundTrack DSP 24 Value}," \ - "{Hoontech SoundTrack DSP 24 Media 7.1}," \ + "{Hoontech,SoundTrack DSP 24}," \ + "{Hoontech,SoundTrack DSP 24 Value}," \ + "{Hoontech,SoundTrack DSP 24 Media 7.1}," \ + "{Event Electronics,EZ8}," #define ICE1712_SUBDEVICE_STDSP24 0x12141217 /* Hoontech SoundTrack Audio DSP 24 */ #define ICE1712_SUBDEVICE_STDSP24_MEDIA7_1 0x16141217 /* Hoontech ST Audio DSP24 Media 7.1 */ +#define ICE1712_SUBDEVICE_EVENT_EZ8 0x00010001 /* A dummy id for EZ8 */ extern struct snd_ice1712_card_info snd_ice1712_hoontech_cards[]; Index: ice1712.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/ice1712.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -r1.51 -r1.52 --- ice1712.c 16 Apr 2004 13:08:35 -0000 1.51 +++ ice1712.c 7 May 2004 10:18:59 -0000 1.52 @@ -84,9 +84,9 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static char *model[SNDRV_CARDS]; static int omni[SNDRV_CARDS]; /* Delta44 & 66 Omni I/O support */ static int cs8427_timeout[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = 500}; /* CS8427 S/PDIF transciever reset timeout value in msec */ -static int ez8[SNDRV_CARDS]; /* EZ8 card */ static int boot_devs; module_param_array(index, int, boot_devs, 0444); @@ -104,9 +104,8 @@ module_param_array(cs8427_timeout, int, boot_devs, 0444); MODULE_PARM_DESC(cs8427_timeout, "Define reset timeout for cs8427 chip in msec resolution."); MODULE_PARM_SYNTAX(cs8427_timeout, SNDRV_ENABLED ", allows:{{1,1000}},default=500,skill:advanced"); -module_param_array(ez8, bool, boot_devs, 0444); -MODULE_PARM_DESC(ez8, "Enable Event Electronics EZ8 support."); -MODULE_PARM_SYNTAX(ez8, SNDRV_ENABLED "," SNDRV_ENABLE_DESC); +module_param_array(model, charp, boot_devs, 0444); +MODULE_PARM_DESC(model, "Use the given board model."); #ifndef PCI_VENDOR_ID_ICE #define PCI_VENDOR_ID_ICE 0x1412 @@ -2289,6 +2288,16 @@ * */ +/* + * list of available boards + */ +static struct snd_ice1712_card_info *card_tables[] __devinitdata = { + snd_ice1712_hoontech_cards, + snd_ice1712_delta_cards, + snd_ice1712_ews_cards, + 0, +}; + static unsigned char __devinit snd_ice1712_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr) @@ -2301,7 +2310,7 @@ return inb(ICEREG(ice, I2C_DATA)); } -static int __devinit snd_ice1712_read_eeprom(ice1712_t *ice) +static int __devinit snd_ice1712_read_eeprom(ice1712_t *ice, const char *modelname) { int dev = 0xa0; /* EEPROM device address */ unsigned int i, size; @@ -2310,10 +2319,23 @@ snd_printk("ICE1712 has not detected EEPROM\n"); return -EIO; } - ice->eeprom.subvendor = (snd_ice1712_read_i2c(ice, dev, 0x00) << 0) | - (snd_ice1712_read_i2c(ice, dev, 0x01) << 8) | - (snd_ice1712_read_i2c(ice, dev, 0x02) << 16) | - (snd_ice1712_read_i2c(ice, dev, 0x03) << 24); + if (modelname && *modelname) { + struct snd_ice1712_card_info **tbl, *c; + for (tbl = card_tables; *tbl; tbl++) { + for (c = *tbl; c->subvendor; c++) { + if (c->model && !strcmp(modelname, c->model)) { + /* use the given subvendor */ + printk(KERN_INFO "ice1712: Using board model %s\n", c->name); + ice->eeprom.subvendor = c->subvendor; + break; + } + } + } + } else + ice->eeprom.subvendor = (snd_ice1712_read_i2c(ice, dev, 0x00) << 0) | + (snd_ice1712_read_i2c(ice, dev, 0x01) << 8) | + (snd_ice1712_read_i2c(ice, dev, 0x02) << 16) | + (snd_ice1712_read_i2c(ice, dev, 0x03) << 24); ice->eeprom.size = snd_ice1712_read_i2c(ice, dev, 0x04); if (ice->eeprom.size < 6) ice->eeprom.size = 32; /* FIXME: any cards without the correct size? */ @@ -2486,9 +2508,9 @@ static int __devinit snd_ice1712_create(snd_card_t * card, struct pci_dev *pci, + const char *modelname, int omni, int cs8427_timeout, - int ez8, ice1712_t ** r_ice1712) { ice1712_t *ice; @@ -2517,7 +2539,6 @@ cs8427_timeout = 1; else if (cs8427_timeout > 1000) cs8427_timeout = 1000; - ice->ez8 = ez8 ? 1 : 0; ice->cs8427_timeout = cs8427_timeout; spin_lock_init(&ice->reg_lock); init_MUTEX(&ice->gpio_mutex); @@ -2572,7 +2593,7 @@ ice->irq = pci->irq; - if (snd_ice1712_read_eeprom(ice) < 0) { + if (snd_ice1712_read_eeprom(ice, modelname) < 0) { snd_ice1712_free(ice); return -EIO; } @@ -2607,14 +2628,6 @@ static struct snd_ice1712_card_info no_matched __devinitdata; -static struct snd_ice1712_card_info *card_tables[] __devinitdata = { - snd_ice1712_hoontech_cards, - snd_ice1712_delta_cards, - snd_ice1712_ews_cards, - 0, -}; - - static int __devinit snd_ice1712_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) { @@ -2638,7 +2651,7 @@ strcpy(card->driver, "ICE1712"); strcpy(card->shortname, "ICEnsemble ICE1712"); - if ((err = snd_ice1712_create(card, pci, omni[dev], cs8427_timeout[dev], ez8[dev], &ice)) < 0) { + if ((err = snd_ice1712_create(card, pci, model[dev], omni[dev], cs8427_timeout[dev], &ice)) < 0) { snd_card_free(card); return err; } Index: ice1712.h =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/ice1712.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- ice1712.h 13 Apr 2004 15:39:21 -0000 1.19 +++ ice1712.h 7 May 2004 10:19:00 -0000 1.20 @@ -329,7 +329,6 @@ unsigned int pro_volumes[20]; unsigned int omni: 1; /* Delta Omni I/O */ unsigned int vt1724: 1; - unsigned int ez8: 1; /* EZ8 support */ unsigned int num_total_dacs; /* total DACs */ unsigned int num_total_adcs; /* total ADCs */ unsigned char hoontech_boxbits[4]; @@ -461,6 +460,7 @@ struct snd_ice1712_card_info { unsigned int subvendor; char *name; + char *model; int (*chip_init)(ice1712_t *); int (*build_controls)(ice1712_t *); int no_mpu401: 1; Index: ice1724.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/ice1724.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- ice1724.c 13 Apr 2004 14:59:01 -0000 1.29 +++ ice1724.c 7 May 2004 10:19:00 -0000 1.30 @@ -62,6 +62,7 @@ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; /* Index 0-MAX */ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ +static char *model[SNDRV_CARDS]; static int boot_devs; module_param_array(index, int, boot_devs, 0444); @@ -73,6 +74,8 @@ module_param_array(enable, bool, boot_devs, 0444); MODULE_PARM_DESC(enable, "Enable ICE1724 soundcard."); MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC); +module_param_array(model, charp, boot_devs, 0444); +MODULE_PARM_DESC(model, "Use the given board model."); #ifndef PCI_VENDOR_ID_ICE #define PCI_VENDOR_ID_ICE 0x1412 @@ -1732,9 +1735,7 @@ /* */ -static unsigned char __devinit snd_vt1724_read_i2c(ice1712_t *ice, - unsigned char dev, - unsigned char addr) +unsigned char snd_vt1724_read_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr) { long t = 0x10000; @@ -1744,37 +1745,49 @@ return inb(ICEREG1724(ice, I2C_DATA)); } -static int __devinit snd_vt1724_read_eeprom(ice1712_t *ice) +void snd_vt1724_write_i2c(ice1712_t *ice, unsigned char dev, unsigned char addr, unsigned char data) +{ + long t = 0x10000; + + outb(addr, ICEREG1724(ice, I2C_BYTE_ADDR)); + outb(data, ICEREG1724(ice, I2C_DATA)); + outb(dev | VT1724_I2C_WRITE, ICEREG1724(ice, I2C_DEV_ADDR)); + while (t-- > 0 && (inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_BUSY)) ; +} + +static int __devinit snd_vt1724_read_eeprom(ice1712_t *ice, const char *modelname) { int dev = 0xa0; /* EEPROM device address */ unsigned int i, size; struct snd_ice1712_card_info **tbl, *c; - if ((inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_EEPROM) == 0) { - snd_printk(KERN_WARNING "ICE1724 has not detected EEPROM\n"); - // return -EIO; - } - ice->eeprom.subvendor = (snd_vt1724_read_i2c(ice, dev, 0x00) << 0) | + if (! modelname || ! *modelname) { + if ((inb(ICEREG1724(ice, I2C_CTRL)) & VT1724_I2C_EEPROM) == 0) { + snd_printk(KERN_WARNING "ICE1724 has not detected EEPROM\n"); + // return -EIO; + } + ice->eeprom.subvendor = (snd_vt1724_read_i2c(ice, dev, 0x00) << 0) | (snd_vt1724_read_i2c(ice, dev, 0x01) << 8) | (snd_vt1724_read_i2c(ice, dev, 0x02) << 16) | (snd_vt1724_read_i2c(ice, dev, 0x03) << 24); - - /* if the EEPROM is given by the driver, use it */ + } for (tbl = card_tables; *tbl; tbl++) { for (c = *tbl; c->subvendor; c++) { - if (c->subvendor == ice->eeprom.subvendor) { - if (! c->eeprom_size || ! c->eeprom_data) - goto found; - snd_printdd("using the defined eeprom..\n"); - ice->eeprom.version = 2; - ice->eeprom.size = c->eeprom_size + 6; - memcpy(ice->eeprom.data, c->eeprom_data, c->eeprom_size); - goto read_skipped; - } + if (modelname && c->model && ! strcmp(modelname, c->model)) { + printk(KERN_INFO "ice1724: Using board model %s\n", c->name); + ice->eeprom.subvendor = c->subvendor; + } else if (c->subvendor != ice->eeprom.subvendor) + continue; + if (! c->eeprom_size || ! c->eeprom_data) + break; + /* if the EEPROM is given by the driver, use it */ + snd_printdd("using the defined eeprom..\n"); + ice->eeprom.version = 2; + ice->eeprom.size = c->eeprom_size + 6; + memcpy(ice->eeprom.data, c->eeprom_data, c->eeprom_size); + goto read_skipped; } } - - found: ice->eeprom.size = snd_vt1724_read_i2c(ice, dev, 0x04); if (ice->eeprom.size < 6) ice->eeprom.size = 32; @@ -1928,6 +1941,7 @@ static int __devinit snd_vt1724_create(snd_card_t * card, struct pci_dev *pci, + const char *modelname, ice1712_t ** r_ice1712) { ice1712_t *ice; @@ -1983,7 +1997,7 @@ ice->irq = pci->irq; - if (snd_vt1724_read_eeprom(ice) < 0) { + if (snd_vt1724_read_eeprom(ice, modelname) < 0) { snd_vt1724_free(ice); return -EIO; } @@ -2042,7 +2056,7 @@ strcpy(card->driver, "ICE1724"); strcpy(card->shortname, "ICEnsemble ICE1724"); - if ((err = snd_vt1724_create(card, pci, &ice)) < 0) { + if ((err = snd_vt1724_create(card, pci, model[dev], &ice)) < 0) { snd_card_free(card); return err; } Index: prodigy.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/prodigy.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- prodigy.c 5 Mar 2004 09:08:39 -0000 1.4 +++ prodigy.c 7 May 2004 10:19:00 -0000 1.5 @@ -654,6 +654,7 @@ { .subvendor = VT1724_SUBDEVICE_PRODIGY71, .name = "Audiotrak Prodigy 7.1", + .model = "prodigy71", .chip_init = prodigy_init, .build_controls = prodigy_add_controls, .eeprom_size = sizeof(prodigy71_eeprom), Index: revo.c =================================================================== RCS file: /cvsroot/alsa/alsa-kernel/pci/ice1712/revo.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- revo.c 5 Mar 2004 09:08:39 -0000 1.5 +++ revo.c 7 May 2004 10:19:00 -0000 1.6 @@ -171,10 +171,11 @@ /* entry point */ struct snd_ice1712_card_info snd_vt1724_revo_cards[] __devinitdata = { { - VT1724_SUBDEVICE_REVOLUTION71, - "M Audio Revolution-7.1", - revo_init, - revo_add_controls, + .subvendor = VT1724_SUBDEVICE_REVOLUTION71, + .name = "M Audio Revolution-7.1", + .model = "revo71", + .chip_init = revo_init, + .build_controls = revo_add_controls, }, { } /* terminator */ }; ------------------------------------------------------- This SF.Net email is sponsored by Sleepycat Software Learn developer strategies Cisco, Motorola, Ericsson & Lucent use to deliver higher performing products faster, at low TCO. http://www.sleepycat.com/telcomwpreg.php?From=osdnemail3 _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog