Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Hewlett-Packard Harmony audio driver
0003  * Copyright (C) 2004, Kyle McMartin <kyle@parisc-linux.org>
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; /* hard physical address */
0021         void __iomem *iobase; /* remapped io address */
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; /* playback/capture */
0035         struct harmony_buffer pbuf;
0036     struct harmony_buffer cbuf;
0037 
0038         struct snd_dma_buffer gdma; /* graveyard */
0039         struct snd_dma_buffer sdma; /* silence */
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      /* HARMONY_SR_44KHZ */
0091 #define HARMONY_CNTL_8000       0x00000008      /* HARMONY_SR_8KHZ */
0092 
0093 #define HARMONY_DSTATUS_ID      0x00000000 /* interrupts off */
0094 #define HARMONY_DSTATUS_PN      0x00000200 /* playback fill */
0095 #define HARMONY_DSTATUS_RN      0x00000002 /* record fill */
0096 #define HARMONY_DSTATUS_IE      0x80000000 /* interrupts on */
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 /* headphones enabled */
0109 #define HARMONY_GAIN_HE_MASK    (1 << HARMONY_GAIN_HE_SHIFT)
0110 #define HARMONY_GAIN_LE_SHIFT   26 /* line-out enabled */
0111 #define HARMONY_GAIN_LE_MASK    (1 << HARMONY_GAIN_LE_SHIFT)
0112 #define HARMONY_GAIN_SE_SHIFT   25 /* internal-speaker enabled */
0113 #define HARMONY_GAIN_SE_MASK    (1 << HARMONY_GAIN_SE_SHIFT)
0114 #define HARMONY_GAIN_IS_SHIFT   24 /* input select - 0 for line, 1 for mic */
0115 #define HARMONY_GAIN_IS_MASK    (1 << HARMONY_GAIN_IS_SHIFT)
0116 
0117 /* monitor attenuation */
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 /* input gain */
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 /* output gain (master volume) */
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 /* __HARMONY_H__ */