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