diff options
Diffstat (limited to 'sound/pci/cs5535audio/cs5535audio.h')
-rw-r--r-- | sound/pci/cs5535audio/cs5535audio.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/sound/pci/cs5535audio/cs5535audio.h b/sound/pci/cs5535audio/cs5535audio.h new file mode 100644 index 000000000000..e28177fb0991 --- /dev/null +++ b/sound/pci/cs5535audio/cs5535audio.h | |||
@@ -0,0 +1,123 @@ | |||
1 | #ifndef __SOUND_CS5535AUDIO_H | ||
2 | #define __SOUND_CS5535AUDIO_H | ||
3 | |||
4 | #define cs_writel(cs5535au, reg, val) outl(val, (int) cs5535au->port + reg) | ||
5 | #define cs_writeb(cs5535au, reg, val) outb(val, (int) cs5535au->port + reg) | ||
6 | #define cs_readl(cs5535au, reg) inl((unsigned short) (cs5535au->port + reg)) | ||
7 | #define cs_readw(cs5535au, reg) inw((unsigned short) (cs5535au->port + reg)) | ||
8 | #define cs_readb(cs5535au, reg) inb((unsigned short) (cs5535au->port + reg)) | ||
9 | |||
10 | #define CS5535AUDIO_MAX_DESCRIPTORS 128 | ||
11 | |||
12 | /* acc_codec bar0 reg addrs */ | ||
13 | #define ACC_GPIO_STATUS 0x00 | ||
14 | #define ACC_CODEC_STATUS 0x08 | ||
15 | #define ACC_CODEC_CNTL 0x0C | ||
16 | #define ACC_IRQ_STATUS 0x12 | ||
17 | #define ACC_BM0_CMD 0x20 | ||
18 | #define ACC_BM1_CMD 0x28 | ||
19 | #define ACC_BM2_CMD 0x30 | ||
20 | #define ACC_BM3_CMD 0x38 | ||
21 | #define ACC_BM4_CMD 0x40 | ||
22 | #define ACC_BM5_CMD 0x48 | ||
23 | #define ACC_BM6_CMD 0x50 | ||
24 | #define ACC_BM7_CMD 0x58 | ||
25 | #define ACC_BM0_PRD 0x24 | ||
26 | #define ACC_BM1_PRD 0x2C | ||
27 | #define ACC_BM2_PRD 0x34 | ||
28 | #define ACC_BM3_PRD 0x3C | ||
29 | #define ACC_BM4_PRD 0x44 | ||
30 | #define ACC_BM5_PRD 0x4C | ||
31 | #define ACC_BM6_PRD 0x54 | ||
32 | #define ACC_BM7_PRD 0x5C | ||
33 | #define ACC_BM0_STATUS 0x21 | ||
34 | #define ACC_BM1_STATUS 0x29 | ||
35 | #define ACC_BM2_STATUS 0x31 | ||
36 | #define ACC_BM3_STATUS 0x39 | ||
37 | #define ACC_BM4_STATUS 0x41 | ||
38 | #define ACC_BM5_STATUS 0x49 | ||
39 | #define ACC_BM6_STATUS 0x51 | ||
40 | #define ACC_BM7_STATUS 0x59 | ||
41 | #define ACC_BM0_PNTR 0x60 | ||
42 | #define ACC_BM1_PNTR 0x64 | ||
43 | #define ACC_BM2_PNTR 0x68 | ||
44 | #define ACC_BM3_PNTR 0x6C | ||
45 | #define ACC_BM4_PNTR 0x70 | ||
46 | #define ACC_BM5_PNTR 0x74 | ||
47 | #define ACC_BM6_PNTR 0x78 | ||
48 | #define ACC_BM7_PNTR 0x7C | ||
49 | /* acc_codec bar0 reg bits */ | ||
50 | /* ACC_IRQ_STATUS */ | ||
51 | #define IRQ_STS 0 | ||
52 | #define WU_IRQ_STS 1 | ||
53 | #define BM0_IRQ_STS 2 | ||
54 | #define BM1_IRQ_STS 3 | ||
55 | #define BM2_IRQ_STS 4 | ||
56 | #define BM3_IRQ_STS 5 | ||
57 | #define BM4_IRQ_STS 6 | ||
58 | #define BM5_IRQ_STS 7 | ||
59 | #define BM6_IRQ_STS 8 | ||
60 | #define BM7_IRQ_STS 9 | ||
61 | /* ACC_BMX_STATUS */ | ||
62 | #define EOP (1<<0) | ||
63 | #define BM_EOP_ERR (1<<1) | ||
64 | /* ACC_BMX_CTL */ | ||
65 | #define BM_CTL_EN 0x00000001 | ||
66 | #define BM_CTL_PAUSE 0x00000011 | ||
67 | #define BM_CTL_DIS 0x00000000 | ||
68 | #define BM_CTL_BYTE_ORD_LE 0x00000000 | ||
69 | #define BM_CTL_BYTE_ORD_BE 0x00000100 | ||
70 | /* cs5535 specific ac97 codec register defines */ | ||
71 | #define CMD_MASK 0xFF00FFFF | ||
72 | #define CMD_NEW 0x00010000 | ||
73 | #define STS_NEW 0x00020000 | ||
74 | #define PRM_RDY_STS 0x00800000 | ||
75 | #define ACC_CODEC_CNTL_WR_CMD (~0x80000000) | ||
76 | #define ACC_CODEC_CNTL_RD_CMD 0x80000000 | ||
77 | #define PRD_JMP 0x2000 | ||
78 | #define PRD_EOP 0x4000 | ||
79 | #define PRD_EOT 0x8000 | ||
80 | |||
81 | typedef struct _snd_cs5535audio cs5535audio_t; | ||
82 | typedef struct snd_cs5535audio_dma cs5535audio_dma_t; | ||
83 | typedef struct snd_cs5535audio_dma_ops cs5535audio_dma_ops_t; | ||
84 | |||
85 | enum { CS5535AUDIO_DMA_PLAYBACK, CS5535AUDIO_DMA_CAPTURE, NUM_CS5535AUDIO_DMAS }; | ||
86 | struct snd_cs5535audio_dma_ops { | ||
87 | int type; | ||
88 | void (*enable_dma)(cs5535audio_t *cs5535au); | ||
89 | void (*disable_dma)(cs5535audio_t *cs5535au); | ||
90 | void (*pause_dma)(cs5535audio_t *cs5535au); | ||
91 | void (*setup_prd)(cs5535audio_t *cs5535au, u32 prd_addr); | ||
92 | u32 (*read_dma_pntr)(cs5535audio_t *cs5535au); | ||
93 | }; | ||
94 | |||
95 | typedef struct cs5535audio_dma_desc { | ||
96 | u32 addr; | ||
97 | u16 size; | ||
98 | u16 ctlreserved; | ||
99 | } cs5535audio_dma_desc_t; | ||
100 | |||
101 | struct snd_cs5535audio_dma { | ||
102 | const cs5535audio_dma_ops_t *ops; | ||
103 | struct snd_dma_buffer desc_buf; | ||
104 | snd_pcm_substream_t *substream; | ||
105 | unsigned int buf_addr, buf_bytes; | ||
106 | unsigned int period_bytes, periods; | ||
107 | }; | ||
108 | |||
109 | struct _snd_cs5535audio { | ||
110 | snd_card_t *card; | ||
111 | ac97_t *ac97; | ||
112 | int irq; | ||
113 | struct pci_dev *pci; | ||
114 | unsigned long port; | ||
115 | spinlock_t reg_lock; | ||
116 | snd_pcm_substream_t *playback_substream; | ||
117 | snd_pcm_substream_t *capture_substream; | ||
118 | cs5535audio_dma_t dmas[NUM_CS5535AUDIO_DMAS]; | ||
119 | }; | ||
120 | |||
121 | int __devinit snd_cs5535audio_pcm(cs5535audio_t *cs5535audio); | ||
122 | #endif /* __SOUND_CS5535AUDIO_H */ | ||
123 | |||