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