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