static int __init snd_gusclassic_detect(snd_gus_card_t * gus) { snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0); /* reset GF1 */ #ifdef CONFIG_SND_DEBUG_DETECT { unsigned char d; if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { snd_printk("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); return -ENODEV; } } #else if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 0) return -ENODEV; #endif udelay(160); snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 1); /* release reset */ udelay(160); #ifdef CONFIG_SND_DEBUG_DETECT { unsigned char d; if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { snd_printk("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); return -ENODEV; } } #else if ((snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET) & 0x07) != 1) return -ENODEV; #endif return 0; }
static int __init snd_gusextreme_detect(int dev, struct snd_card *card, struct snd_gus_card * gus, struct snd_es1688 *es1688) { unsigned long flags; unsigned char d; /* * This is main stuff - enable access to GF1 chip... * I'm not sure, if this will work for card which have * ES1688 chip in another place than 0x220. * * I used reverse-engineering in DOSEMU. [--jk] * * ULTRINIT.EXE: * 0x230 = 0,2,3 * 0x240 = 2,0,1 * 0x250 = 2,0,3 * 0x260 = 2,2,1 */ spin_lock_irqsave(&es1688->mixer_lock, flags); snd_es1688_mixer_write(es1688, 0x40, 0x0b); /* don't change!!! */ spin_unlock_irqrestore(&es1688->mixer_lock, flags); spin_lock_irqsave(&es1688->reg_lock, flags); outb(gf1_port[dev] & 0x040 ? 2 : 0, ES1688P(es1688, INIT1)); outb(0, 0x201); outb(gf1_port[dev] & 0x020 ? 2 : 0, ES1688P(es1688, INIT1)); outb(0, 0x201); outb(gf1_port[dev] & 0x010 ? 3 : 1, ES1688P(es1688, INIT1)); spin_unlock_irqrestore(&es1688->reg_lock, flags); udelay(100); snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0); /* reset GF1 */ if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { snd_printdd("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); return -EIO; } udelay(160); snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 1); /* release reset */ udelay(160); if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { snd_printdd("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); return -EIO; } return 0; }
static int __devinit snd_gusclassic_detect(struct snd_gus_card *gus) { unsigned char d; snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 0); /* reset GF1 */ if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 0) { snd_printdd("[0x%lx] check 1 failed - 0x%x\n", gus->gf1.port, d); return -ENODEV; } udelay(160); snd_gf1_i_write8(gus, SNDRV_GF1_GB_RESET, 1); /* release reset */ udelay(160); if (((d = snd_gf1_i_look8(gus, SNDRV_GF1_GB_RESET)) & 0x07) != 1) { snd_printdd("[0x%lx] check 2 failed - 0x%x\n", gus->gf1.port, d); return -ENODEV; } return 0; }