es1888.c 1.3 KB

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