Commit 382305a3 authored by Jaroslav Kysela's avatar Jaroslav Kysela

ALSA CVS update - Takashi Iwai <tiwai@suse.de>

Documentation,ICE1724 driver,ICE1712 driver
- 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).
parent fcdd368f
......@@ -610,6 +610,10 @@ Module parameters
* Hoontech SoundTrack DSP 24 Media 7.1
* Digigram VX442
model - Use the given board model, one of the following:
delta1010, dio2496, delta66, delta44, audiophile, delta410,
delta1010lt, vx442, ewx2496, ews88mt, ews88mt_new, ews88d,
dmx6fire, dsp24, dsp24_71, ez8
omni - Omni I/O support for MidiMan M-Audio Delta44/66
cs8427_timeout - reset timeout for the CS8427 chip (S/PDIF transciever)
in msec resolution, default value is 500 (0.5 sec)
......@@ -626,6 +630,9 @@ Module parameters
* AMP Ltd AUDIO2000
* TerraTec Aureon Sky-5.1, Space-7.1
model - Use the given board model, one of the following:
revo71, amp2000, prodigy71, aureon51, aureon71
Module supports up to 8 cards and autoprobe.
Module snd-intel8x0
......
......@@ -54,10 +54,11 @@ static int __devinit snd_vt1724_amp_add_controls(ice1712_t *ice)
/* 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 */
};
......
......@@ -496,6 +496,7 @@ struct snd_ice1712_card_info snd_vt1724_aureon_cards[] __devinitdata = {
{
.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 @@ struct snd_ice1712_card_info snd_vt1724_aureon_cards[] __devinitdata = {
{
.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),
......
......@@ -692,56 +692,64 @@ static int __devinit snd_ice1712_delta_add_controls(ice1712_t *ice)
/* 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,
.subvendor = ICE1712_SUBDEVICE_DELTA1010,
.name = "M Audio Delta 1010",
.model = "delta1010",
.chip_init = snd_ice1712_delta_init,
.build_controls = 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 */
.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,
},
{
ICE1712_SUBDEVICE_DELTA66,
"M Audio Delta 66",
snd_ice1712_delta_init,
snd_ice1712_delta_add_controls,
1, /* NO MPU */
.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,
},
{
ICE1712_SUBDEVICE_DELTA44,
"M Audio Delta 44",
snd_ice1712_delta_init,
snd_ice1712_delta_add_controls,
1, /* NO MPU */
.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,
},
{
ICE1712_SUBDEVICE_AUDIOPHILE,
"M Audio Audiophile 24/96",
snd_ice1712_delta_init,
snd_ice1712_delta_add_controls,
.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,
},
{
ICE1712_SUBDEVICE_DELTA410,
"M Audio Delta 410",
snd_ice1712_delta_init,
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,
},
{
ICE1712_SUBDEVICE_DELTA1010LT,
"M Audio Delta 1010LT",
snd_ice1712_delta_init,
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,
},
{
ICE1712_SUBDEVICE_VX442,
"Digigram VX442",
snd_ice1712_delta_init,
snd_ice1712_delta_add_controls,
1, /* NO MPU */
.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 */
};
......@@ -209,4 +209,7 @@ enum {
#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 */
......@@ -971,34 +971,39 @@ static int __devinit snd_ice1712_ews_add_controls(ice1712_t *ice)
/* 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 */
};
......@@ -156,20 +156,6 @@ static int __devinit snd_ice1712_hoontech_init(ice1712_t *ice)
{
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_hoontech_init(ice1712_t *ice)
}
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 */
};
......
......@@ -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[];
......
......@@ -84,9 +84,9 @@ MODULE_DEVICES("{"
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_PARM_SYNTAX(omni, SNDRV_ENABLED "," SNDRV_ENABLE_DESC);
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 @@ static snd_kcontrol_new_t snd_ice1712_mixer_pro_peak __devinitdata = {
*
*/
/*
* 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 @@ static unsigned char __devinit snd_ice1712_read_i2c(ice1712_t *ice,
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 @@ static int __devinit snd_ice1712_read_eeprom(ice1712_t *ice)
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 snd_ice1712_dev_free(snd_device_t *device)
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 @@ static int __devinit snd_ice1712_create(snd_card_t * card,
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 @@ static int __devinit snd_ice1712_create(snd_card_t * card,
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 int __devinit snd_ice1712_create(snd_card_t * card,
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 @@ static int __devinit snd_ice1712_probe(struct pci_dev *pci,
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;
}
......
......@@ -329,7 +329,6 @@ struct _snd_ice1712 {
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 @@ static inline u8 snd_ice1712_read(ice1712_t * ice, u8 addr)
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;
......
......@@ -62,6 +62,7 @@ MODULE_DEVICES("{"
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_PARM_SYNTAX(id, SNDRV_ID_DESC);
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 struct snd_ice1712_card_info *card_tables[] __devinitdata = {
/*
*/
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 @@ static unsigned char __devinit snd_vt1724_read_i2c(ice1712_t *ice,
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 snd_vt1724_dev_free(snd_device_t *device)
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 @@ static int __devinit snd_vt1724_create(snd_card_t * card,
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 @@ static int __devinit snd_vt1724_probe(struct pci_dev *pci,
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;
}
......
......@@ -654,6 +654,7 @@ struct snd_ice1712_card_info snd_vt1724_prodigy_cards[] __devinitdata = {
{
.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),
......
......@@ -171,10 +171,11 @@ static int __devinit revo_add_controls(ice1712_t *ice)
/* 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 */
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment