| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  *	linux/arch/alpha/kernel/es1888.c | 
 | 3 |  * | 
 | 4 |  * Init the built-in ES1888 sound chip (SB16 compatible) | 
 | 5 |  */ | 
 | 6 |  | 
 | 7 | #include <linux/init.h> | 
 | 8 | #include <asm/io.h> | 
 | 9 | #include "proto.h" | 
 | 10 |  | 
 | 11 | void __init | 
 | 12 | es1888_init(void) | 
 | 13 | { | 
 | 14 | 	/* Sequence of IO reads to init the audio controller */ | 
 | 15 | 	inb(0x0229); | 
 | 16 | 	inb(0x0229); | 
 | 17 | 	inb(0x0229); | 
 | 18 | 	inb(0x022b); | 
 | 19 | 	inb(0x0229); | 
 | 20 | 	inb(0x022b); | 
 | 21 | 	inb(0x0229); | 
 | 22 | 	inb(0x0229); | 
 | 23 | 	inb(0x022b); | 
 | 24 | 	inb(0x0229); | 
 | 25 | 	inb(0x0220); /* This sets the base address to 0x220 */ | 
 | 26 |  | 
 | 27 | 	/* Sequence to set DMA channels */ | 
 | 28 | 	outb(0x01, 0x0226);		/* reset */ | 
 | 29 | 	inb(0x0226);			/* pause */ | 
 | 30 | 	outb(0x00, 0x0226);		/* release reset */ | 
 | 31 | 	while (!(inb(0x022e) & 0x80))	/* wait for bit 7 to assert*/ | 
 | 32 | 		continue; | 
 | 33 | 	inb(0x022a);			/* pause */ | 
 | 34 | 	outb(0xc6, 0x022c);		/* enable extended mode */ | 
 | 35 | 	inb(0x022a);			/* pause, also forces the write */ | 
 | 36 | 	while (inb(0x022c) & 0x80)	/* wait for bit 7 to deassert */ | 
 | 37 | 		continue; | 
 | 38 | 	outb(0xb1, 0x022c);		/* setup for write to Interrupt CR */ | 
 | 39 | 	while (inb(0x022c) & 0x80)	/* wait for bit 7 to deassert */ | 
 | 40 | 		continue; | 
 | 41 | 	outb(0x14, 0x022c);		/* set IRQ 5 */ | 
 | 42 | 	while (inb(0x022c) & 0x80)	/* wait for bit 7 to deassert */ | 
 | 43 | 		continue; | 
 | 44 | 	outb(0xb2, 0x022c);		/* setup for write to DMA CR */ | 
 | 45 | 	while (inb(0x022c) & 0x80)	/* wait for bit 7 to deassert */ | 
 | 46 | 		continue; | 
 | 47 | 	outb(0x18, 0x022c);		/* set DMA channel 1 */ | 
 | 48 | 	inb(0x022c);			/* force the write */ | 
 | 49 | } |