static void snd_als300_init(struct snd_als300 *chip) { unsigned long flags; u32 tmp; spin_lock_irqsave(&chip->reg_lock, flags); chip->revision = (snd_als300_gcr_read(chip->port, MISC_CONTROL) >> 16) & 0x0000000F; /* Setup DRAM */ tmp = snd_als300_gcr_read(chip->port, DRAM_WRITE_CONTROL); snd_als300_gcr_write(chip->port, DRAM_WRITE_CONTROL, (tmp | DRAM_MODE_2) & ~WRITE_TRANS_START); /* Enable IRQ output */ snd_als300_set_irq_flag(chip, IRQ_ENABLE); /* Unmute hardware devices so their outputs get routed to * the onboard mixer */ tmp = snd_als300_gcr_read(chip->port, MISC_CONTROL); snd_als300_gcr_write(chip->port, MISC_CONTROL, tmp | VMUTE_NORMAL | MMUTE_NORMAL); /* Reset volumes */ snd_als300_gcr_write(chip->port, MUS_VOC_VOL, 0); /* Make sure playback transfer is stopped */ tmp = snd_als300_gcr_read(chip->port, PLAYBACK_CONTROL); snd_als300_gcr_write(chip->port, PLAYBACK_CONTROL, tmp & ~TRANSFER_START); spin_unlock_irqrestore(&chip->reg_lock, flags); }
static void snd_als300_init(struct snd_als300 *chip) { unsigned long flags; u32 tmp; snd_als300_dbgcallenter(); spin_lock_irqsave(&chip->reg_lock, flags); chip->revision = (snd_als300_gcr_read(chip->port, MISC_CONTROL) >> 16) & 0x0000000F; /* */ tmp = snd_als300_gcr_read(chip->port, DRAM_WRITE_CONTROL); snd_als300_gcr_write(chip->port, DRAM_WRITE_CONTROL, (tmp | DRAM_MODE_2) & ~WRITE_TRANS_START); /* */ snd_als300_set_irq_flag(chip, IRQ_ENABLE); /* */ tmp = snd_als300_gcr_read(chip->port, MISC_CONTROL); snd_als300_gcr_write(chip->port, MISC_CONTROL, tmp | VMUTE_NORMAL | MMUTE_NORMAL); /* */ snd_als300_gcr_write(chip->port, MUS_VOC_VOL, 0); /* */ tmp = snd_als300_gcr_read(chip->port, PLAYBACK_CONTROL); snd_als300_gcr_write(chip->port, PLAYBACK_CONTROL, tmp & ~TRANSFER_START); spin_unlock_irqrestore(&chip->reg_lock, flags); snd_als300_dbgcallleave(); }
static int snd_als300_free(struct snd_als300 *chip) { snd_als300_set_irq_flag(chip, IRQ_DISABLE); if (chip->irq >= 0) free_irq(chip->irq, chip); pci_release_regions(chip->pci); pci_disable_device(chip->pci); kfree(chip); return 0; }