aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/vow/mt6735/vow.h
blob: 1a74d2c635b92b01a6f134426bb7b9735473ca91 (plain) (blame)
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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#ifndef __VOW_H__
#define __VOW_H__

#include <linux/compat.h>
#include <linux/fs.h>
#include <linux/uaccess.h>

/***********************************************************************************
** VOW Control Message
************************************************************************************/
#define VOW_DEVNAME "vow"
#define VOW_IOC_MAGIC    'a' 

//below is control message
#if 0

#define TEST_VOW_PRINT            _IO(VOW_IOC_MAGIC,  0x00)
#define VOWEINT_GET_BUFSIZE       _IOW(VOW_IOC_MAGIC, 0x01, unsigned long)
#define VOW_GET_STATUS            _IOW(VOW_IOC_MAGIC, 0x02, unsigned long)
#define VOW_SET_CONTROL           _IOW(VOW_IOC_MAGIC, 0x03, unsigned long)
#define VOW_SET_SPEAKER_MODEL     _IOW(VOW_IOC_MAGIC, 0x04, unsigned long)
#define VOW_CLR_SPEAKER_MODEL     _IOW(VOW_IOC_MAGIC, 0x05, unsigned long)
#define VOW_SET_INIT_MODEL        _IOW(VOW_IOC_MAGIC, 0x06, unsigned long)
#define VOW_SET_FIR_MODEL         _IOW(VOW_IOC_MAGIC, 0x07, unsigned long)
#define VOW_SET_NOISE_MODEL       _IOW(VOW_IOC_MAGIC, 0x08, unsigned long)
#define VOW_SET_APREG_INFO        _IOW(VOW_IOC_MAGIC, 0x09, unsigned long)
#define VOW_SET_REG_MODE          _IOW(VOW_IOC_MAGIC, 0x0A, unsigned long)
#define VOW_FAKE_WAKEUP           _IOW(VOW_IOC_MAGIC, 0x0B, unsigned long) 

#else

#if 1
enum VOW_MESSAGE_TEMP
{
 TEST_VOW_PRINT = 0, 
 VOWEINT_GET_BUFSIZE,
 VOW_GET_STATUS,
 VOW_SET_CONTROL,
 VOW_SET_SPEAKER_MODEL,
 VOW_CLR_SPEAKER_MODEL,
 VOW_SET_INIT_MODEL,
 VOW_SET_FIR_MODEL,
 VOW_SET_NOISE_MODEL,
 VOW_SET_APREG_INFO,
 VOW_SET_REG_MODE,
 VOW_FAKE_WAKEUP,
};

#else 

#define TEST_VOW_PRINT            0x00
#define VOWEINT_GET_BUFSIZE       0x01
#define VOW_GET_STATUS            0x02
#define VOW_SET_CONTROL           0x03
#define VOW_SET_SPEAKER_MODEL     0x04
#define VOW_CLR_SPEAKER_MODEL     0x05
#define VOW_SET_INIT_MODEL        0x06
#define VOW_SET_FIR_MODEL         0x07
#define VOW_SET_NOISE_MODEL       0x08
#define VOW_SET_APREG_INFO        0x09
#define VOW_SET_REG_MODE          0x0A
#define VOW_FAKE_WAKEUP           0x0B 

#endif

#endif


/***********************************************************************************
** VOW IPI Service
************************************************************************************/
#define MD32_IPI_AUDMSG_BASE      0x5F00 
#define AP_IPI_AUDMSG_BASE        0x7F00

#define CLR_SPEAKER_MODEL_FLAG    0x3535

#define MD32_DM_BASE          0xF0030000
#define MD32_PM_BASE          0xF0020000

#define MAX_VOW_SPEAKER_MODEL         10

#define VOW_SWAPTCM_TIMEOUT           50
#define VOW_IPIMSG_TIMEOUT            50
#define VOW_WAITCHECK_INTERVAL_MS      1
#define MAX_VOW_INFO_LEN               4
#define VOW_VOICE_DATA_LENGTH_BYTES  320

/***********************************************************************************
** Type Define
************************************************************************************/
enum VOW_Control_Cmd
{
    VOWControlCmd_Init = 0,
    VOWControlCmd_ReadVoiceData,
    VOWControlCmd_EnableDebug,
    VOWControlCmd_DisableDebug,
};

typedef enum vow_ipi_msgid_t {
   //AP to MD32 MSG
   AP_IPIMSG_VOW_ENABLE = AP_IPI_AUDMSG_BASE,
   AP_IPIMSG_VOW_DISABLE,
   AP_IPIMSG_VOW_SETMODE,
   AP_IPIMSG_VOW_APREGDATA_ADDR,
   AP_IPIMSG_VOW_DATAREADY_ACK,
   AP_IPIMSG_SET_VOW_MODEL,
   AP_IPIMSG_VOW_SETGAIN,
   AP_IPIMSG_VOW_SET_FLAG,
   AP_IPIMSG_VOW_RECOGNIZE_OK_ACK,
   AP_IPIMSG_VOW_CHECKREG,
   AP_IPIMSG_VOW_SET_SMART_DEVICE,

   //MD32 to AP MSG
   MD32_IPIMSG_VOW_ENABLE_ACK = MD32_IPI_AUDMSG_BASE,
   MD32_IPIMSG_VOW_DISABLE_ACK,
   MD32_IPIMSG_VOW_SETMODE_ACK,
   MD32_IPIMSG_VOW_APREGDATA_ADDR_ACK,
   MD32_IPIMSG_VOW_DATAREADY,
   MD32_IPIMSG_SET_VOW_MODEL_ACK,
   MD32_IPIMSG_VOW_SETGAIN_ACK,
   MD32_IPIMSG_SET_FLAG_ACK, 
   MD32_IPIMSG_VOW_RECOGNIZE_OK,
   MD32_IPIMSG_VOW_SET_SMART_DEVICE_ACK,
}vow_ipi_msgid_t;

typedef enum VOW_REG_MODE_T {
   VOW_MODE_MD32_VOW = 0,
   VOW_MODE_VOICECOMMAND,
   VOW_MODE_MULTIPLE_KEY,
   VOW_MODE_MULTIPLE_KEY_VOICECOMMAND
}VOW_REG_MODE_T;

typedef enum VOW_EINT_STATUS{
    VOW_EINT_DISABLE = -2,
    VOW_EINT_FAIL = -1,
    VOW_EINT_PASS = 0,
    VOW_EINT_RETRY = 1,
    NUM_OF_VOW_EINT_STATUS
}VOW_EINT_STATUS;

typedef enum VOW_FLAG_TYPE{
    VOW_FLAG_DEBUG,
    VOW_FLAG_PRE_LEARN,
    VOW_FLAG_DMIC_LOWPOWER,
    NUM_OF_VOW_FLAG_TYPE
}VOW_FLAG_TYPE;

typedef enum VOW_PWR_STATUS{
    VOW_PWR_OFF = 0,
    VOW_PWR_ON = 1,
    NUM_OF_VOW_PWR_STATUS
}VOW_PWR_STATUS;

typedef enum VOW_IPI_RESULT
{
   VOW_IPI_SUCCESS = 0,
   VOW_IPI_CLR_SMODEL_ID_NOTMATCH,
   VOW_IPI_SET_SMODEL_NO_FREE_SLOT,
}VOW_IPI_RESULT;

typedef enum VOW_MODEL_TYPE{
    VOW_MODEL_INIT = 0,
    VOW_MODEL_SPEAKER = 1, 
    VOW_MODEL_NOISE = 2, 
    VOW_MODEL_FIR = 3
}VOW_MODEL_TYPE;

typedef struct
{
    short id;
    short size;
    short *buf;
} vow_ipi_msg_t;

struct VOW_EINT_DATA_STRUCT{
   int size;        // size of data section
   int eint_status; // eint status
   int id;
   char *data;      // reserved for future extension
}VOW_EINT_DATA_STRUCT;


#ifdef CONFIG_COMPAT

typedef struct {
   void *model_ptr;
   int  id;
   int  enabled;
}VOW_SPEAKER_MODEL_T;

typedef struct {
   long  id;
   long  addr;
   long  size;
   void *data;
}VOW_MODEL_INFO_T;

typedef struct {
   compat_uptr_t *model_ptr; 
   compat_size_t  id;
   compat_size_t  enabled;
}VOW_SPEAKER_MODEL_KERNEL_T;

typedef struct {
   compat_size_t  id;
   compat_size_t  addr;
   compat_size_t  size;
   compat_uptr_t *data;
}VOW_MODEL_INFO_KERNEL_T;

#else
typedef struct{
   void *model_ptr;
   int  id;
   int  enabled;
}VOW_SPEAKER_MODEL_T;

typedef struct{
   long  id;
   long  addr;
   long  size;
   void *data;
}VOW_MODEL_INFO_T;


#endif

void VowDrv_SetFlag(VOW_FLAG_TYPE type, bool set);


#define ReadREG(_addr, _value) ((_value) = *(volatile unsigned int *)(_addr) )
#define WriteREG(_addr, _value) (*(volatile unsigned int *)(_addr) = (_value))
#define ReadREG16(_addr, _value) ((_value) = *(volatile unsigned short *)(_addr) )
#define WriteREG16(_addr, _value) (*(volatile unsigned short *)(_addr) = (_value))

#endif //__VOW_H__