0001
0002
0003
0004
0005
0006 #ifndef __HARMONY_H__
0007 #define __HARMONY_H__
0008
0009 struct harmony_buffer {
0010 unsigned long addr;
0011 int buf;
0012 int count;
0013 int size;
0014 int coherent;
0015 };
0016
0017 struct snd_harmony {
0018 int irq;
0019
0020 unsigned long hpa;
0021 void __iomem *iobase;
0022
0023 struct parisc_device *dev;
0024
0025 struct {
0026 u32 gain;
0027 u32 rate;
0028 u32 format;
0029 u32 stereo;
0030 int playing;
0031 int capturing;
0032 } st;
0033
0034 struct snd_dma_device dma;
0035 struct harmony_buffer pbuf;
0036 struct harmony_buffer cbuf;
0037
0038 struct snd_dma_buffer gdma;
0039 struct snd_dma_buffer sdma;
0040
0041 struct {
0042 unsigned long play_intr;
0043 unsigned long rec_intr;
0044 unsigned long graveyard_intr;
0045 unsigned long silence_intr;
0046 } stats;
0047
0048 struct snd_pcm *pcm;
0049 struct snd_card *card;
0050 struct snd_pcm_substream *psubs;
0051 struct snd_pcm_substream *csubs;
0052 struct snd_info_entry *proc;
0053
0054 spinlock_t lock;
0055 spinlock_t mixer_lock;
0056 };
0057
0058 #define MAX_PCM_DEVICES 1
0059 #define MAX_PCM_SUBSTREAMS 4
0060 #define MAX_MIDI_DEVICES 0
0061
0062 #define HARMONY_SIZE 64
0063
0064 #define BUF_SIZE PAGE_SIZE
0065 #define MAX_BUFS 16
0066 #define MAX_BUF_SIZE (MAX_BUFS * BUF_SIZE)
0067
0068 #define PLAYBACK_BUFS MAX_BUFS
0069 #define RECORD_BUFS MAX_BUFS
0070 #define GRAVEYARD_BUFS 1
0071 #define GRAVEYARD_BUFSZ (GRAVEYARD_BUFS*BUF_SIZE)
0072 #define SILENCE_BUFS 1
0073 #define SILENCE_BUFSZ (SILENCE_BUFS*BUF_SIZE)
0074
0075 #define HARMONY_ID 0x000
0076 #define HARMONY_RESET 0x004
0077 #define HARMONY_CNTL 0x008
0078 #define HARMONY_GAINCTL 0x00c
0079 #define HARMONY_PNXTADD 0x010
0080 #define HARMONY_PCURADD 0x014
0081 #define HARMONY_RNXTADD 0x018
0082 #define HARMONY_RCURADD 0x01c
0083 #define HARMONY_DSTATUS 0x020
0084 #define HARMONY_OV 0x024
0085 #define HARMONY_PIO 0x028
0086 #define HARMONY_DIAG 0x03c
0087
0088 #define HARMONY_CNTL_C 0x80000000
0089 #define HARMONY_CNTL_ST 0x00000020
0090 #define HARMONY_CNTL_44100 0x00000015
0091 #define HARMONY_CNTL_8000 0x00000008
0092
0093 #define HARMONY_DSTATUS_ID 0x00000000
0094 #define HARMONY_DSTATUS_PN 0x00000200
0095 #define HARMONY_DSTATUS_RN 0x00000002
0096 #define HARMONY_DSTATUS_IE 0x80000000
0097
0098 #define HARMONY_DF_16BIT_LINEAR 0x00000000
0099 #define HARMONY_DF_8BIT_ULAW 0x00000001
0100 #define HARMONY_DF_8BIT_ALAW 0x00000002
0101
0102 #define HARMONY_SS_MONO 0x00000000
0103 #define HARMONY_SS_STEREO 0x00000001
0104
0105 #define HARMONY_GAIN_SILENCE 0x01F00FFF
0106 #define HARMONY_GAIN_DEFAULT 0x01F00FFF
0107
0108 #define HARMONY_GAIN_HE_SHIFT 27
0109 #define HARMONY_GAIN_HE_MASK (1 << HARMONY_GAIN_HE_SHIFT)
0110 #define HARMONY_GAIN_LE_SHIFT 26
0111 #define HARMONY_GAIN_LE_MASK (1 << HARMONY_GAIN_LE_SHIFT)
0112 #define HARMONY_GAIN_SE_SHIFT 25
0113 #define HARMONY_GAIN_SE_MASK (1 << HARMONY_GAIN_SE_SHIFT)
0114 #define HARMONY_GAIN_IS_SHIFT 24
0115 #define HARMONY_GAIN_IS_MASK (1 << HARMONY_GAIN_IS_SHIFT)
0116
0117
0118 #define HARMONY_GAIN_MA 0x0f
0119 #define HARMONY_GAIN_MA_SHIFT 20
0120 #define HARMONY_GAIN_MA_MASK (HARMONY_GAIN_MA << HARMONY_GAIN_MA_SHIFT)
0121
0122
0123 #define HARMONY_GAIN_IN 0x0f
0124 #define HARMONY_GAIN_LI_SHIFT 16
0125 #define HARMONY_GAIN_LI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_LI_SHIFT)
0126 #define HARMONY_GAIN_RI_SHIFT 12
0127 #define HARMONY_GAIN_RI_MASK (HARMONY_GAIN_IN << HARMONY_GAIN_RI_SHIFT)
0128
0129
0130 #define HARMONY_GAIN_OUT 0x3f
0131 #define HARMONY_GAIN_LO_SHIFT 6
0132 #define HARMONY_GAIN_LO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_LO_SHIFT)
0133 #define HARMONY_GAIN_RO_SHIFT 0
0134 #define HARMONY_GAIN_RO_MASK (HARMONY_GAIN_OUT << HARMONY_GAIN_RO_SHIFT)
0135
0136 #define HARMONY_MAX_OUT (HARMONY_GAIN_RO_MASK >> HARMONY_GAIN_RO_SHIFT)
0137 #define HARMONY_MAX_IN (HARMONY_GAIN_RI_MASK >> HARMONY_GAIN_RI_SHIFT)
0138 #define HARMONY_MAX_MON (HARMONY_GAIN_MA_MASK >> HARMONY_GAIN_MA_SHIFT)
0139
0140 #define HARMONY_SR_8KHZ 0x08
0141 #define HARMONY_SR_16KHZ 0x09
0142 #define HARMONY_SR_27KHZ 0x0A
0143 #define HARMONY_SR_32KHZ 0x0B
0144 #define HARMONY_SR_48KHZ 0x0E
0145 #define HARMONY_SR_9KHZ 0x0F
0146 #define HARMONY_SR_5KHZ 0x10
0147 #define HARMONY_SR_11KHZ 0x11
0148 #define HARMONY_SR_18KHZ 0x12
0149 #define HARMONY_SR_22KHZ 0x13
0150 #define HARMONY_SR_37KHZ 0x14
0151 #define HARMONY_SR_44KHZ 0x15
0152 #define HARMONY_SR_33KHZ 0x16
0153 #define HARMONY_SR_6KHZ 0x17
0154
0155 #endif