blob: 7c6e295bdc01235f7b1ac9959210380e989d81fa [file] [log] [blame]
Flemmard49aa69d2013-05-23 15:30:36 -07001/* include/linux/a1028.h - a1028 voice processor driver
2 *
3 * Copyright (C) 2009 HTC Corporation.
4 *
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 */
15
16#ifndef __LINUX_A1028_H
17#define __LINUX_A1028_H
18
19#include <linux/ioctl.h>
20
21#define A1028_I2C_NAME "audience_a1028"
22#define A1028_MAX_FW_SIZE (32*1024)
23struct a1028img {
24 unsigned char *buf;
25 unsigned img_size;
26};
27
28enum A1028_PathID {
29 A1028_PATH_SUSPEND,
30 A1028_PATH_INCALL_RECEIVER,
31 A1028_PATH_INCALL_HEADSET,
32 A1028_PATH_INCALL_SPEAKER,
33 A1028_PATH_INCALL_BT,
34 A1028_PATH_VR_NO_NS_RECEIVER,
35 A1028_PATH_VR_NO_NS_HEADSET,
36 A1028_PATH_VR_NO_NS_SPEAKER,
37 A1028_PATH_VR_NO_NS_BT,
38 A1028_PATH_VR_NS_RECEIVER,
39 A1028_PATH_VR_NS_HEADSET,
40 A1028_PATH_VR_NS_SPEAKER,
41 A1028_PATH_VR_NS_BT,
42 A1028_PATH_RECORD_RECEIVER,
43 A1028_PATH_RECORD_HEADSET,
44 A1028_PATH_RECORD_SPEAKER,
45 A1028_PATH_RECORD_BT,
46 A1028_PATH_CAMCORDER,
47 A1028_PATH_INCALL_TTY,
48 A1028_PATH_MFG_LOOPBACK,
49 A1028_PATH_MAX
50};
51
52struct A1028_config_data {
53 unsigned int data_len;
54 unsigned int mode_num;
55 unsigned char *cmd_data;
56};
57
58enum A1028_NS_states {
59 A1028_NS_STATE_AUTO,
60 A1028_NS_STATE_OFF,
61 A1028_NS_STATE_CT,
62 A1028_NS_STATE_FT,
63 A1028_NS_NUM_STATES
64};
65
66#define A1028_IOCTL_MAGIC 'u'
67
68#define A1028_BOOTUP_INIT _IOW(A1028_IOCTL_MAGIC, 0x01, struct a1028img *)
69#define A1028_SET_CONFIG _IOW(A1028_IOCTL_MAGIC, 0x02, enum A1028_PathID)
70#define A1028_SET_NS_STATE _IOW(A1028_IOCTL_MAGIC, 0x03, enum A1028_NS_states)
71#define A1028_SET_PARAM _IOW(A1028_IOCTL_MAGIC, 0x04, unsigned)
72#define A1028_SET_MIC_ONOFF _IOW(A1028_IOCTL_MAGIC, 0x50, unsigned)
73#define A1028_SET_MICSEL_ONOFF _IOW(A1028_IOCTL_MAGIC, 0x51, unsigned)
74#define A1028_READ_DATA _IOR(A1028_IOCTL_MAGIC, 0x52, unsigned)
75#define A1028_WRITE_MSG _IOW(A1028_IOCTL_MAGIC, 0x53, unsigned)
76#define A1028_SYNC_CMD _IO(A1028_IOCTL_MAGIC, 0x54)
77#define A1028_SET_CMD_FILE _IOW(A1028_IOCTL_MAGIC, 0x55, unsigned)
78
79#ifdef __KERNEL__
80
81#define CtrlMode_LAL 0x0001
82#define CtrlMode_LAH 0x0002
83#define CtrlMode_FE 0x0003
84#define CtrlMode_RE 0x0004
85#define A100_msg_Sync 0x80000000
86#define A100_msg_Sync_Ack 0x80000000
87
88#define A100_msg_Reset 0x8002
89#define RESET_IMMEDIATE 0x0000
90#define RESET_DELAYED 0x0001
91
92#define A100_msg_BootloadInitiate 0x8003
93#define A100_msg_GetDeviceParm 0x800B
94#define A100_msg_SetDeviceParmID 0x800C
95#define A100_msg_SetDeviceParm 0x800D
96
97#define PCM0WordLength 0x0100
98#define PCM0DelFromFsTx 0x0101
99#define PCM0DelFromFsRx 0x0102
100#define PCM0LatchEdge 0x0103
101#define PCM0Endianness 0x0105
102#define PCM0TristateEnable 0x0107
103
104#define PCM1WordLength 0x0200
105#define PCM1DelFromFsTx 0x0201
106#define PCM1DelFromFsRx 0x0202
107#define PCM1LatchEdge 0x0203
108#define PCM1Endianness 0x0205
109#define PCM1TristateEnable 0x0207
110
111#define PCMWordLength_16bit 0x10
112#define PCMWordLength_24bit 0x18
113#define PCMWordLength_32bit 0x20
114#define PCMLatchEdge_Tx_F_Rx_R 0x00
115#define PCMLatchEdge_Tx_R_Rx_F 0x03
116#define PCMEndianness_Little 0x00
117#define PCMEndianness_Big 0x01
118#define PCMTristate_Disable 0x00
119#define PCMTristate_Enable 0x01
120
121#define ADC0Gain 0x0300
122#define ADC0Rate 0x0301
123#define ADC0CutoffFreq 0x0302
124
125#define ADC1Gain 0x0400
126#define ADC1Rate 0x0401
127#define ADC1CutoffFreq 0x0402
128
129#define ADC_Gain_0db 0x00
130#define ADC_Gain_6db 0x01
131#define ADC_Gain_12db 0x02
132#define ADC_Gain_18db 0x03
133#define ADC_Gain_24db 0x04
134#define ADC_Gain_30db 0x05
135#define ADC_Rate_8kHz 0x00
136#define ADC_Rate_16kHz 0x01
137#define ADC_CutoffFreq_NO_DC_Filter 0x00
138#define ADC_CutoffFreq_59p68Hz 0x01
139#define ADC_CutoffFreq_7p46Hz 0x02
140#define ADC_CutoffFreq_3p73Hz 0x03
141
142#define A100_msg_Sleep 0x80100001
143
144#define A100_msg_GetAlgorithmParm 0x8016
145#define A100_msg_SetAlgorithmParmID 0x8017
146#define A100_msg_SetAlgorithmParm 0x8018
147
148#define AIS_Global_Supression_Level 0x0000
149#define Mic_Config 0x0002
150#define AEC_Mode 0x0003
151#define AEC_CNG 0x0023
152#define Output_AGC 0x0004
153#define Output_AGC_Target_Level 0x0005
154#define Output_AGC_Noise_Floor 0x0006
155#define Output_AGC_SNR_Improvement 0x0007
156#define Comfort_Noise 0x001A
157#define Comfort_Noise_Level 0x001B
158
159#define Speaker_Volume 0x0012
160#define VEQ_Mode 0x0009
161#define VEQ_Max_FarEnd_Limiter_Level 0x000D
162#define VEQ_Noise_Estimation_Adj 0x0025
163#define Receive_NS 0x000E
164#define Receive_NS_Level 0x000F
165#define SideTone 0x0015
166#define SideTone_Gain 0x0016
167
168#define A100_msg_GetTxDigitalInputGain 0x801A
169#define A100_msg_SetTxDigitalInputGain 0x801B
170
171#define A100_msg_GetRcvDigitalInputGain 0x8022
172#define A100_msg_SetRcvDigitalInputGain 0x8023
173
174#define A100_msg_GetTxDigitalOutputGain 0x801D
175#define A100_msg_SetTxDigitalOutputGain 0x8015
176
177#define A100_msg_Bypass 0x801C
178#define A1028_msg_VP_ON 0x801C0001
179#define A1028_msg_VP_OFF 0x801C0000
180
181#define A100_msg_GetMicRMS 0x8013
182#define A100_msg_GetMicPeak 0x8014
183#define DiagPath_Pri_Input_Mic 0x0000
184#define DiagPath_Sec_Input_Mic 0x0001
185#define DiagPath_Output_Mic 0x0002
186#define DiagPath_Far_End_Input 0x0003
187#define DiagPath_Far_End_Output 0x0004
188#define A100_msg_SwapInputCh 0x8019
189#define A100_msg_OutputKnownSig 0x801E
190
191#define A1028_msg_BOOT 0x0001
192#define A1028_msg_BOOT_ACK 0x01
193
194#define TIMEOUT 20
195#define RETRY_CNT 5
196#define POLLING_RETRY_CNT 3
197#define A1028_ERROR_CODE 0xffff
198#define A1028_SLEEP 0
199#define A1028_ACTIVE 1
200#define A1028_CMD_FIFO_DEPTH 64
201
202enum A1028_config_mode {
203 A1028_CONFIG_FULL,
204 A1028_CONFIG_VP
205};
206
207struct a1028_platform_data {
208 uint32_t gpio_a1028_micsel;
209 uint32_t gpio_a1028_wakeup;
210 uint32_t gpio_a1028_reset;
211 uint32_t gpio_a1028_int;
212 uint32_t gpio_a1028_clk;
213 uint32_t gpio_a1028_micswitch;
214};
215
216
217#endif
218#endif