PUBLIC int drv_reset(void) { int i; Dprint(("drv_reset():\n")); sb16_outb(DSP_RESET, 1); for(i = 0; i < 1000; i++); /* wait a while */ sb16_outb(DSP_RESET, 0); for(i = 0; i < 1000 && !(sb16_inb(DSP_DATA_AVL) & 0x80); i++); if(sb16_inb(DSP_READ) != 0xAA) return EIO; /* No SoundBlaster */ return OK; }
/*===========================================================================* * dsp_reset *===========================================================================*/ PRIVATE int dsp_reset() { int i; sb16_outb(DSP_RESET, 1); for(i = 0; i < 1000; i++); /* wait a while */ sb16_outb(DSP_RESET, 0); for(i = 0; i < 1000 && !(sb16_inb(DSP_DATA_AVL) & 0x80); i++); if(sb16_inb(DSP_READ) != 0xAA) return EIO; /* No SoundBlaster */ DmaBusy = -1; return OK; }
/*=========================================================================* * mixer_get *=========================================================================*/ PRIVATE int mixer_get(int reg) { int i; sb16_outb(MIXER_REG, reg); for(i = 0; i < 100; i++); return sb16_inb(MIXER_DATA) & 0xff; }
/*===========================================================================* * dsp_command *===========================================================================*/ PRIVATE int dsp_command(int value) { int i; for (i = 0; i < SB_TIMEOUT; i++) { if((sb16_inb(DSP_STATUS) & 0x80) == 0) { sb16_outb(DSP_COMMAND, value); return OK; } } dprint("sb16: SoundBlaster: DSP Command(%x) timeout\n", value); return -1; }