harmony.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Hewlett-Packard Harmony audio driver
  3. * Copyright (C) 2004, Kyle McMartin <[email protected]>
  4. */
  5. #ifndef __HARMONY_H__
  6. #define __HARMONY_H__
  7. struct harmony_buffer {
  8. unsigned long addr;
  9. int buf;
  10. int count;
  11. int size;
  12. int coherent;
  13. };
  14. struct snd_harmony {
  15. int irq;
  16. unsigned long hpa; /* hard physical address */
  17. void __iomem *iobase; /* remapped io address */
  18. struct parisc_device *dev;
  19. struct {
  20. u32 gain;
  21. u32 rate;
  22. u32 format;
  23. u32 stereo;
  24. int playing;
  25. int capturing;
  26. } st;
  27. struct snd_dma_device dma; /* playback/capture */
  28. struct harmony_buffer pbuf;
  29. struct harmony_buffer cbuf;
  30. struct snd_dma_buffer gdma; /* graveyard */
  31. struct snd_dma_buffer sdma; /* silence */
  32. struct {
  33. unsigned long play_intr;
  34. unsigned long rec_intr;
  35. unsigned long graveyard_intr;
  36. unsigned long silence_intr;
  37. } stats;
  38. struct snd_pcm *pcm;
  39. struct snd_card *card;
  40. struct snd_pcm_substream *psubs;
  41. struct snd_pcm_substream *csubs;
  42. struct snd_info_entry *proc;
  43. spinlock_t lock;
  44. spinlock_t mixer_lock;
  45. };
  46. #define MAX_PCM_DEVICES 1
  47. #define MAX_PCM_SUBSTREAMS 4
  48. #define MAX_MIDI_DEVICES 0
  49. #define HARMONY_SIZE 64
  50. #define BUF_SIZE PAGE_SIZE
  51. #define MAX_BUFS 16
  52. #define MAX_BUF_SIZE (MAX_BUFS * BUF_SIZE)
  53. #define PLAYBACK_BUFS MAX_BUFS
  54. #define RECORD_BUFS MAX_BUFS
  55. #define GRAVEYARD_BUFS 1
  56. #define GRAVEYARD_BUFSZ (GRAVEYARD_BUFS*BUF_SIZE)
  57. #define SILENCE_BUFS 1
  58. #define SILENCE_BUFSZ (SILENCE_BUFS*BUF_SIZE)
  59. #define HARMONY_ID 0x000
  60. #define HARMONY_RESET 0x004
  61. #define HARMONY_CNTL 0x008
  62. #define HARMONY_GAINCTL 0x00c
  63. #define HARMONY_PNXTADD 0x010
  64. #define HARMONY_PCURADD 0x014
  65. #define HARMONY_RNXTADD 0x018
  66. #define HARMONY_RCURADD 0x01c
  67. #define HARMONY_DSTATUS 0x020
  68. #define HARMONY_OV 0x024
  69. #define HARMONY_PIO 0x028
  70. #define HARMONY_DIAG 0x03c
  71. #define HARMONY_CNTL_C 0x80000000
  72. #define HARMONY_CNTL_ST 0x00000020
  73. #define HARMONY_CNTL_44100 0x00000015 /* HARMONY_SR_44KHZ */
  74. #define HARMONY_CNTL_8000 0x00000008 /* HARMONY_SR_8KHZ */
  75. #define HARMONY_DSTATUS_ID 0x00000000 /* interrupts off */
  76. #define HARMONY_DSTATUS_PN 0x00000200 /* playback fill */
  77. #define HARMONY_DSTATUS_RN 0x00000002 /* record fill */
  78. #define HARMONY_DSTATUS_IE 0x80000000 /* interrupts on */
  79. #define HARMONY_DF_16BIT_LINEAR 0x00000000
  80. #define HARMONY_DF_8BIT_ULAW 0x00000001
  81. #define HARMONY_DF_8BIT_ALAW 0x00000002
  82. #define HARMONY_SS_MONO 0x00000000
  83. #define HARMONY_SS_STEREO 0x00000001
  84. #define HARMONY_GAIN_SILENCE 0x01F00FFF
  85. #define HARMONY_GAIN_DEFAULT 0x01F00FFF
  86. #define HARMONY_GAIN_HE_SHIFT 27 /* headphones enabled */
  87. #define HARMONY_GAIN_HE_MASK (1 << HARMONY_GAIN_HE_SHIFT)
  88. #define HARMONY_GAIN_LE_SHIFT 26 /* line-out enabled */
  89. #define HARMONY_GAIN_LE_MASK (1 << HARMONY_GAIN_LE_SHIFT)
  90. #define HARMONY_GAIN_SE_SHIFT 25 /* internal-speaker enabled */
  91. #define HARMONY_GAIN_SE_MASK (1 << HARMONY_GAIN_SE_SHIFT)
  92. #define HARMONY_GAIN_IS_SHIFT 24 /* input select - 0 for line, 1 for mic */
  93. #define HARMONY_GAIN_IS_MASK (1 << HARMONY_GAIN_IS_SHIFT)
  94. /* monitor attenuation */
  95. #define HARMONY_GAIN_MA 0x0f
  96. #define HARMONY_GAIN_MA_SHIFT 20
  97. #define HARMONY_GAIN_MA_MASK (HARMONY_GAIN_MA << HARMONY_GAIN_MA_SHIFT)
  98. /* input gain */
  99. #define HARMONY_GAIN_IN 0x0f
  100. #define HARMONY_GAIN_LI_SHIFT 16
  101. #define HARMONY_GAIN_LI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_LI_SHIFT)
  102. #define HARMONY_GAIN_RI_SHIFT 12
  103. #define HARMONY_GAIN_RI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_RI_SHIFT)
  104. /* output gain (master volume) */
  105. #define HARMONY_GAIN_OUT 0x3f
  106. #define HARMONY_GAIN_LO_SHIFT 6
  107. #define HARMONY_GAIN_LO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT)
  108. #define HARMONY_GAIN_RO_SHIFT 0
  109. #define HARMONY_GAIN_RO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_RO_SHIFT)
  110. #define HARMONY_MAX_OUT (HARMONY_GAIN_RO_MASK >> HARMONY_GAIN_RO_SHIFT)
  111. #define HARMONY_MAX_IN (HARMONY_GAIN_RI_MASK >> HARMONY_GAIN_RI_SHIFT)
  112. #define HARMONY_MAX_MON (HARMONY_GAIN_MA_MASK >> HARMONY_GAIN_MA_SHIFT)
  113. #define HARMONY_SR_8KHZ 0x08
  114. #define HARMONY_SR_16KHZ 0x09
  115. #define HARMONY_SR_27KHZ 0x0A
  116. #define HARMONY_SR_32KHZ 0x0B
  117. #define HARMONY_SR_48KHZ 0x0E
  118. #define HARMONY_SR_9KHZ 0x0F
  119. #define HARMONY_SR_5KHZ 0x10
  120. #define HARMONY_SR_11KHZ 0x11
  121. #define HARMONY_SR_18KHZ 0x12
  122. #define HARMONY_SR_22KHZ 0x13
  123. #define HARMONY_SR_37KHZ 0x14
  124. #define HARMONY_SR_44KHZ 0x15
  125. #define HARMONY_SR_33KHZ 0x16
  126. #define HARMONY_SR_6KHZ 0x17
  127. #endif /* __HARMONY_H__ */