summaryrefslogtreecommitdiff
path: root/arch/arm/mach-wmt/include/mach/wmt_i2s.h
blob: 9e7268c11d11c468c2e7a4e1b140d541b4710fd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
/*++
linux/include/asm-arm/arch-wmt/wmt_i2s.h

Copyright (c) 2008  WonderMedia Technologies, Inc.

This program is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software Foundation,
either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program.  If not, see <http://www.gnu.org/licenses/>.

WonderMedia Technologies, Inc.
10F, 529, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C.
--*/
/* Be sure that virtual mapping is defined right */
#ifndef __ASM_ARCH_HARDWARE_H
#error "You must include hardware.h, not wmt_i2s.h"
#endif

#ifndef _WMT_I2S_H_
#define _WMT_I2S_H_


/******************************************************************************
 *
 * Address constant for each register.
 *
 ******************************************************************************/
#define	DACCFG_ADDR       		(I2S_BASE_ADDR + 0x0040)
#define HDACKGEN_ADDR			(I2S_BASE_ADDR + 0x0070)
#define ADCCFG_ADDR				(I2S_BASE_ADDR + 0x0080)
#define AADCF0CFG_ADDR			(I2S_BASE_ADDR + 0x008C)
#define AADCF0STA_ADDR			(I2S_BASE_ADDR + 0x0090)
#define AADCF1CFG_ADDR			(I2S_BASE_ADDR + 0x009C)
#define AADCF1STA_ADDR			(I2S_BASE_ADDR + 0x00A0)
#define DGOCFG_ADDR				(I2S_BASE_ADDR + 0x00C0)

#define ASMPFCFG_ADDR			(I2S_BASE_ADDR + 0x0180)
#define ASMPFRDY_ADDR			(I2S_BASE_ADDR + 0x0184)
#define ASMPF2HDACFG_ADDR		(I2S_BASE_ADDR + 0x0188)
#define ASMPF2HDACHCFG_ADDR		(I2S_BASE_ADDR + 0x018C)
#define ASMPFCHCFG0_ADDR		(I2S_BASE_ADDR + 0x0194)
#define ASMPFCHCFG1_ADDR		(I2S_BASE_ADDR + 0x0198)
#define AUDPRFRST_ADDR			(I2S_BASE_ADDR + 0x0244)
#define AADCFOBDOUT_DMA_ADDR	(I2S_BASE_ADDR + 0x0300)
#define ASMPFDP_DMA_ADDR		(I2S_BASE_ADDR + 0x0360)
#define DZDRQ8_CFG_ADDR			(I2S_BASE_ADDR + 0x03A0)
#define DZDRQ9_CFG_ADDR			(I2S_BASE_ADDR + 0x03A4)
#define DZDRQA_CFG_ADDR			(I2S_BASE_ADDR + 0x03A8)
#define DGOCS0A_ADDR			(I2S_BASE_ADDR + 0x0114)
#define DGOCS1A_ADDR			(I2S_BASE_ADDR + 0x012C)


/******************************************************************************
 *
 * Register pointer.
 *
 ******************************************************************************/
#define	DACCFG_REG        		(REG32_PTR(DACCFG_ADDR))
#define	HDACKGEN_REG        	(REG32_PTR(HDACKGEN_ADDR))
#define	ADCCFG_REG        		(REG32_PTR(ADCCFG_ADDR))
#define	AADCF0CFG_REG      		(REG32_PTR(AADCF0CFG_ADDR))
#define	AADCF0STA_REG        	(REG32_PTR(AADCF0STA_ADDR))
#define	AADCF1CFG_REG      		(REG32_PTR(AADCF1CFG_ADDR))
#define	AADCF1STA_REG        	(REG32_PTR(AADCF1STA_ADDR))
#define	DGOCFG_REG        		(REG32_PTR(DGOCFG_ADDR))

#define	ASMPFCFG_REG        	(REG32_PTR(ASMPFCFG_ADDR))
#define	ASMPFRDY_REG        	(REG32_PTR(ASMPFRDY_ADDR))
#define	ASMPF2HDACFG_REG        (REG32_PTR(ASMPF2HDACFG_ADDR))
#define	ASMPF2HDACHCFG_REG      (REG32_PTR(ASMPF2HDACHCFG_ADDR))
#define	ASMPFCHCFG0_REG        	(REG32_PTR(ASMPFCHCFG0_ADDR))
#define	ASMPFCHCFG1_REG        	(REG32_PTR(ASMPFCHCFG1_ADDR))
#define	AUDPRFRST_REG        	(REG32_PTR(AUDPRFRST_ADDR))
#define	AADCFOBDOUT_DMA_REG		(REG32_PTR(AADCFOBDOUT_DMA_ADDR))
#define	ASMPFDP_DMA_REG			(REG32_PTR(ASMPFDP_DMA_ADDR))
#define	DZDRQ8_CFG_REG			(REG32_PTR(DZDRQ8_CFG_ADDR))
#define	DZDRQ9_CFG_REG			(REG32_PTR(DZDRQ9_CFG_ADDR))
#define	DZDRQA_CFG_REG			(REG32_PTR(DZDRQA_CFG_ADDR))
#define	DGOCS0A_REG				(REG32_PTR(DGOCS0A_ADDR))
#define	DGOCS1A_REG				(REG32_PTR(DGOCS1A_ADDR))


/******************************************************************************
 *
 * Register value.
 *
 ******************************************************************************/
#define	DACCFG_VAL        		(REG32_VAL(DACCFG_ADDR))
#define	HDACKGEN_VAL        	(REG32_VAL(HDACKGEN_ADDR))
#define	ADCCFG_VAL        		(REG32_VAL(ADCCFG_ADDR))
#define	AADCF0CFG_VAL      		(REG32_VAL(AADCF0CFG_ADDR))
#define	AADCF0STA_VAL     		(REG32_VAL(AADCF0STA_ADDR))
#define	AADCF1CFG_VAL      		(REG32_VAL(AADCF1CFG_ADDR))
#define	AADCF1STA_VAL     		(REG32_VAL(AADCF1STA_ADDR))
#define	DGOCFG_VAL     			(REG32_VAL(DGOCFG_ADDR))

#define	ASMPFCFG_VAL        	(REG32_VAL(ASMPFCFG_ADDR))
#define	ASMPFRDY_VAL        	(REG32_VAL(ASMPFRDY_ADDR))
#define	ASMPF2HDACFG_VAL        (REG32_VAL(ASMPF2HDACFG_ADDR))
#define	ASMPF2HDACHCFG_VAL      (REG32_VAL(ASMPF2HDACHCFG_ADDR))
#define	ASMPFCHCFG0_VAL        	(REG32_VAL(ASMPFCHCFG0_ADDR))
#define	ASMPFCHCFG1_VAL        	(REG32_VAL(ASMPFCHCFG1_ADDR))
#define	AUDPRFRST_VAL        	(REG32_VAL(AUDPRFRST_ADDR))
#define	AADCFOBDOUT_DMA_VAL		(REG32_VAL(AADCFOBDOUT_DMA_ADDR))
#define	ASMPFDP_DMA_VAL			(REG32_VAL(ASMPFDP_DMA_ADDR))
#define	DZDRQ8_CFG_VAL			(REG32_VAL(DZDRQ8_CFG_ADDR))
#define	DZDRQ9_CFG_VAL			(REG32_VAL(DZDRQ9_CFG_ADDR))
#define	DZDRQA_CFG_VAL			(REG32_VAL(DZDRQA_CFG_ADDR))
#define	DGOCS0A_VAL				(REG32_VAL(DGOCS0A_ADDR))
#define	DGOCS1A_VAL				(REG32_VAL(DGOCS1A_ADDR))


/******************************************************************************
 *
 * 
 *
 ******************************************************************************/
#define DACITF_ENABLE				BIT22			/* DAC interface enable */

#define ASMPF_8BIT_SMP				0x00			/* sample quantization config for 8 bit */
#define ASMPF_16BIT_SMP				0x10			/* sample quantization config for 16 bit */
#define ASMPF_32BIT_SMP				0x20			/* sample quantization config for 32 bit */
#define ASMPF_ENABLE				BIT6			/* sample FIFO enable */
#define ASMPF_EXCH_FMT				BIT7			/* sample FIFO exchange unsigned/signed format enable */
#define ASMPF_EXCH_ENDIAN			BIT8			/* sample FIFO exchange little/big endian enable */

#define AADCF_ENABLE				BIT0			/* ADC FIFO enable */
#define AADCF16_ENABLE				BIT1			/* ADC FIFO 16-bits enable */
#define AADCITF_ENABLE				BIT2			/* ADC interface enable */
#define DGOITF_ENABLE				BIT7			/* ADGO(SPDIF-out) interface enable */
#define ADGIF16_ENABLE				BIT14			/* ADGI FIFO 16-bits enable */
#define ADGIITF_ENABLE				BIT1			/* ADGI(SPDIF-in) interface enable */
#define ADGI_EXTRACTOR_ENABLE		BIT0			/* ADGI-Extractor enable */

#define ASMPF_RESET					BIT1			/* sample FIFO reset */
#define DACITF_RESET				BIT2			/* DAC interface reset */
#define ADCITF_RESET				BIT3			/* ADC interface & ADC FIFO reset */
#define DGOITF_RESET				BIT4			/* SPDIF out reset */

#define HDACKGEN_ENABLE				BIT4			/* HDAudio Reference Clock enable */


#define WMT_SND_I2C_BUS				0x00
#define WMT_SND_SPI_BUS				0x01

#define WMT_SND_LINEIN_1			0x00
#define WMT_SND_MICIN_1				0x01
#define WMT_SND_DMIC_IN				0x02
#define WMT_SND_LINEIN_12			0x03
#define WMT_SND_LINEIN_2			0x04
#define WMT_SND_MICIN_2				0x05
#define WMT_SND_MICIN_12			0x06









struct i2s_ints_s {
	/* Tx FIFO Status. */
	unsigned int tfoe;      /* Tx FIFO Overrun Error */
	unsigned int tfue;      /* Tx FIFO Underrun Error */
	unsigned int tfa;       /* Tx FIFO Almost Empty */
	unsigned int tfe;       /* Tx FIFO Empty */

	/* Tx FIFO Status. */
	unsigned int rfoe;      /* Tx FIFO Overrun Error */
	unsigned int rfue;      /* Tx FIFO Underrun Error */
	unsigned int rfa;       /* Tx FIFO Almost Full */
	unsigned int rff;       /* Tx FIFO Full */

};

struct i2s_s {
	/* Interrupt status counters.*/
	struct i2s_ints_s             ints;
	/* I2S Controller info. */
	const unsigned int      irq;            /* I2S controller irq*/
	unsigned int            ref;            /* I2S reference counter*/
	unsigned int			channels;
	int						format;
	unsigned int			fragment_sz;
	unsigned int			rate;
	/* Basic handlers.*/
	void                    (*init)(int mode);
	void                    (*exit)(void);
};

#endif /* __WMT_I2S_H */