|
1 /* |
|
2 audio_hw_control_chipset_api.h |
|
3 |
|
4 Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
5 All rights reserved. |
|
6 |
|
7 This program and the accompanying materials are made available |
|
8 under the terms of the Eclipse Public License v1.0 which accompanies |
|
9 this distribution, and is available at |
|
10 http://www.eclipse.org/legal/epl-v10.html |
|
11 |
|
12 Initial Contributors: |
|
13 Nokia Corporation - initial contribution. |
|
14 |
|
15 Contributors: |
|
16 */ |
|
17 |
|
18 #ifndef AUDIO_HWCTRL_CHIPSET_API_H |
|
19 #define AUDIO_HWCTRL_CHIPSET_API_H |
|
20 |
|
21 #ifdef __cplusplus |
|
22 extern "C" { |
|
23 #endif /* __cplusplus */ |
|
24 |
|
25 |
|
26 /* Each OMX header must include all required header files to allow the |
|
27 * header to compile without errors. The includes below are required |
|
28 * for this header file to compile successfully |
|
29 */ |
|
30 |
|
31 #include <OMX_Audio.h> |
|
32 |
|
33 |
|
34 /* structures and enums used by OMX interface */ |
|
35 |
|
36 typedef enum OMX_AUDIO_HWREGISTERTYPE { |
|
37 OMX_AUDIO_IO = 0, |
|
38 OMX_AUDIO_I2C, |
|
39 OMX_AUDIO_SLIMBUS, |
|
40 OMX_AUDIO_CBUS = 0xFFFF |
|
41 } OMX_AUDIO_HWREGISTERTYPE; |
|
42 |
|
43 typedef struct OMX_AUDIO_REGBANKDESCRIPTORTYPE { |
|
44 OMX_U32 nSize; |
|
45 OMX_VERSIONTYPE nVersion; |
|
46 OMX_U32 nRegBankIndex; |
|
47 OMX_U32 nLogicalStartAddr; |
|
48 OMX_U32 nLogicalEndAddr; |
|
49 OMX_AUDIO_HWREGISTERTYPE eRegBankType; |
|
50 |
|
51 } OMX_AUDIO_REGBANKDESCRIPTORTYPE; |
|
52 |
|
53 typedef enum OMX_AUDIO_HWLOOPSTYPE { |
|
54 OMX_AUDIO_NOLOOP = 0, |
|
55 OMX_AUDIO_SIDETONE_LOOP = 0xFFFF |
|
56 /* rest of HW loops are to be defined on a vendor specific basis */ |
|
57 |
|
58 } OMX_AUDIO_HWLOOPSTYPE; |
|
59 |
|
60 typedef enum OMX_AUDIO_HWOPERATIONTYPE { |
|
61 OMX_AUDIO_NOOP = 0, |
|
62 OMX_AUDIO_16BIT_SINGLE_READ, |
|
63 OMX_AUDIO_16BIT_SINGLE_WRITE, |
|
64 OMX_AUDIO_32BIT_SINGLE_READ, |
|
65 OMX_AUDIO_32BIT_SINGLE_WRITE, |
|
66 OMX_AUDIO_16BIT_MULTI_READ, |
|
67 OMX_AUDIO_16BIT_MULTI_WRITE, |
|
68 OMX_AUDIO_32BIT_MULTI_READ, |
|
69 OMX_AUDIO_32BIT_MULTI_WRITE, |
|
70 OMX_AUDIO_16BIT_BURST_MULTI_READ, |
|
71 OMX_AUDIO_16BIT_BURST_MULTI_WRITE, |
|
72 OMX_AUDIO_32BIT_BURST_MULTI_READ, |
|
73 OMX_AUDIO_32BIT_BURST_MULTI_WRITE = 0xFFFF |
|
74 } OMX_AUDIO_HWOPERATIONTYPE; |
|
75 |
|
76 |
|
77 typedef enum OMX_AUDIO_HWCTRL_STATUSTYPE { |
|
78 OMX_AUDIO_OK = 0, |
|
79 OMX_AUDIO_FAIL, |
|
80 /* if callback facility is somehow solved in OpenMAX IL for |
|
81 getconfig/setconfig parameter calls, it is expected */ |
|
82 /* to have here extra status information that can be returned |
|
83 for e.g. multi-read/write commands */ |
|
84 OMX_AUDIO_NOT_SUPPORTED = 0xFFFF |
|
85 } OMX_AUDIO_HWCTRL_STATUSTYPE; |
|
86 |
|
87 |
|
88 |
|
89 /* Configuration parameters */ |
|
90 |
|
91 typedef struct OMX_AUDIO_CONFIG_POWERTYPE { |
|
92 OMX_U32 nSize; |
|
93 OMX_VERSIONTYPE nVersion; |
|
94 OMX_U32 nPortIndex; |
|
95 OMX_U32 nChannel; |
|
96 OMX_BOOL bPower; |
|
97 } OMX_AUDIO_CONFIG_POWERTYPE; |
|
98 |
|
99 |
|
100 typedef struct OMX_AUDIO_CONFIG_VOLUMERAMPTYPE { |
|
101 OMX_U32 nSize; |
|
102 OMX_VERSIONTYPE nVersion; |
|
103 OMX_U32 nPortIndex; |
|
104 OMX_U32 nChannel; |
|
105 OMX_BOOL bLinear; |
|
106 OMX_BS32 sStartVolume; |
|
107 OMX_BS32 sEndVolume; |
|
108 OMX_TICKS nRampDuration; |
|
109 OMX_BOOL bRampTerminate; |
|
110 OMX_BS32 sCurrentVolume; |
|
111 OMX_TICKS nRampCurrentTime; |
|
112 OMX_TICKS nRampMinDuration; |
|
113 OMX_TICKS nRampMaxDuration; |
|
114 OMX_U32 nVolumeStep; |
|
115 } OMX_AUDIO_CONFIG_VOLUMERAMPTYPE; |
|
116 |
|
117 |
|
118 typedef struct OMX_AUDIO_CONFIG_BURSTCONTROLTYPE { |
|
119 OMX_U32 nSize; |
|
120 OMX_VERSIONTYPE nVersion; |
|
121 OMX_U32 nPortIndex; |
|
122 OMX_BOOL bBurstControl; |
|
123 OMX_BOOL bStatus; |
|
124 } OMX_AUDIO_CONFIG_BURSTCONTROLTYPE; |
|
125 |
|
126 typedef struct OMX_AUDIO_CONFIG_REGISTERBANKQUERYTYPE { |
|
127 OMX_U32 nSize; |
|
128 OMX_VERSIONTYPE nVersion; |
|
129 OMX_U32 nPortIndex; |
|
130 OMX_U16 nNumRegisterBanks; |
|
131 } OMX_AUDIO_CONFIG_REGISTERBANKQUERYTYPE; |
|
132 |
|
133 |
|
134 typedef enum OMX_AUDIO_HWREGISTERTYPE { |
|
135 OMX_AUDIO_IO = 0, |
|
136 OMX_AUDIO_I2C, |
|
137 OMX_AUDIO_SLIMBUS, |
|
138 OMX_AUDIO_CBUS = 0xFFFF |
|
139 } OMX_AUDIO_HWREGISTERTYPE; |
|
140 |
|
141 |
|
142 typedef struct OMX_AUDIO_REGBANKDESCRIPTORTYPE { |
|
143 OMX_U32 nSize; |
|
144 OMX_VERSIONTYPE nVersion; |
|
145 OMX_U32 nRegBankIndex; |
|
146 OMX_U32 nLogicalStartAddr; |
|
147 OMX_U32 nLogicalEndAddr; |
|
148 OMX_AUDIO_HWREGISTERTYPE eRegBankType; |
|
149 |
|
150 } OMX_AUDIO_REGBANKDESCRIPTORTYPE; |
|
151 |
|
152 typedef struct OMX_AUDIO_CONFIG_REGISTERBANKTABLETYPE { |
|
153 OMX_U32 nSize; |
|
154 OMX_VERSIONTYPE nVersion; |
|
155 OMX_U32 nPortIndex; |
|
156 OMX_U16 nNumRegisterBanks; |
|
157 OMX_AUDIO_REGBANKDESCRIPTORTYPE RegBankDescriptorTable; |
|
158 } OMX_AUDIO_CONFIG_REGISTERBANKTABLETYPE; |
|
159 |
|
160 |
|
161 typedef struct OMX_AUDIO_CONFIG_CUSTOMHWCONTROLTYPE { |
|
162 OMX_U32 nSize; |
|
163 OMX_VERSIONTYPE nVersion; |
|
164 OMX_U32 nPortIndex; |
|
165 OMX_AUDIO_HWCTRL_STATUSTYPE eStatus; |
|
166 OMX_AUDIO_HWOPERATIONTYPE eHwOperation; |
|
167 OMX_AUDIO_HWREGISTERTYPE eRegisterType; |
|
168 OMX_U16 nDataCount; |
|
169 OMX_U32 nLogicalAddress; |
|
170 OMX_U16 nData; |
|
171 } OMX_AUDIO_CONFIG_CUSTOMHWCONTROLTYPE; |
|
172 |
|
173 typedef struct OMX_AUDIO_CONFIG_HWLOOPSUPPORTTYPE { |
|
174 OMX_U32 nSize; |
|
175 OMX_VERSIONTYPE nVersion; |
|
176 OMX_U32 nPortIndex; |
|
177 OMX_U32 nSupportedLoops; |
|
178 OMX_AUDIO_HWLOOPSTYPE eLoopIndex; |
|
179 |
|
180 } OMX_AUDIO_CONFIG_HWLOOPSUPPORTTYPE; |
|
181 |
|
182 typedef struct OMX_AUDIO_CONFIG_HWLOOPCONTROLTYPE { |
|
183 OMX_U32 nSize; |
|
184 OMX_VERSIONTYPE nVersion; |
|
185 OMX_U32 nPortIndex; |
|
186 OMX_AUDIO_HWLOOPSTYPE eLoopIndex; |
|
187 OMX_U32 nChannel; |
|
188 OMX_BOOL bControlSwitch; |
|
189 OMX_BOOL bLinear; |
|
190 OMX_BS32 sLoopVolume; |
|
191 |
|
192 } OMX_AUDIO_CONFIG_HWLOOPCONTROLTYPE; |
|
193 |
|
194 |
|
195 |
|
196 /* End of OMX part */ |
|
197 |
|
198 /************ non-OMX interface definition **************/ |
|
199 |
|
200 /* types and constants used by non-OMX APIs */ |
|
201 |
|
202 /* channel ID denoting special case of all channels being selected |
|
203 where possible */ |
|
204 #define AUDIO_COMMON_CHANNEL_ALL 0x7FFFFFFF |
|
205 |
|
206 typedef enum AUDIO_COMMON_SWITCH { |
|
207 AUDIO_COMMON_OFF = 0, |
|
208 AUDIO_COMMON_ON, |
|
209 AUDIO_COMMON_UNSUPPORTED = 0xFFFF |
|
210 } AUDIO_COMMON_SWITCH; |
|
211 |
|
212 |
|
213 typedef enum AUDIO_COMMON_STATUS { |
|
214 AUDIO_COMMON_OK = 0, |
|
215 AUDIO_COMMON_FAIL, |
|
216 AUDIO_COMMON_UNSUPPORTED = 0xFFFF |
|
217 } AUDIO_COMMON_STATUS; |
|
218 |
|
219 typedef enum AUDIO_HAL_HW_LOOPS { |
|
220 AUDIO_NOLOOP = 0, |
|
221 AUDIO_SIDETONE_LOOP = 0xFFFF |
|
222 /* rest of HW loops are to be defined on a vendor specific basis */ |
|
223 |
|
224 } AUDIO_HAL_HW_LOOPS; |
|
225 |
|
226 typedef enum AUDIO_HAL_HW_OPERATION{ |
|
227 AUDIO_HAL_NOOP = 0, |
|
228 AUDIO_HAL_16BIT_SINGLE_READ, |
|
229 AUDIO_HAL_16BIT_SINGLE_WRITE, |
|
230 AUDIO_HAL_32BIT_SINGLE_READ, |
|
231 AUDIO_HAL_32BIT_SINGLE_WRITE, |
|
232 AUDIO_HAL_16BIT_MULTI_READ, |
|
233 AUDIO_HAL_16BIT_MULTI_WRITE, |
|
234 AUDIO_HAL_32BIT_MULTI_READ, |
|
235 AUDIO_HAL_32BIT_MULTI_WRITE, |
|
236 AUDIO_HAL_16BIT_BURST_MULTI_READ, |
|
237 AUDIO_HAL_16BIT_BURST_MULTI_WRITE, |
|
238 AUDIO_HAL_32BIT_BURST_MULTI_READ, |
|
239 AUDIO_HAL_32BIT_BURST_MULTI_WRITE = 0xFFFF |
|
240 } AUDIO_HAL_HW_OPERATION; |
|
241 |
|
242 typedef enum AUDIO_HAL_HW_REGISTER_TYPE { |
|
243 OMX_AUDIO_IO = 0, |
|
244 OMX_AUDIO_I2C, |
|
245 OMX_AUDIO_SLIMBUS, |
|
246 OMX_AUDIO_CBUS = 0xFFFF |
|
247 } AUDIO_HAL_HW_REGISTER_TYPE; |
|
248 |
|
249 |
|
250 /** 16 bit unsigned quantity that is 16 bit word aligned */ |
|
251 typedef unsigned short uint16; |
|
252 |
|
253 /** 16 bit signed quantity that is 16 bit word aligned */ |
|
254 typedef signed short int16; |
|
255 |
|
256 /** 32 bit unsigned quantity that is 32 bit word aligned */ |
|
257 typedef unsigned long uint32; |
|
258 |
|
259 /** signed quantity that is 32 bit word aligned */ |
|
260 typedef signed long int32; |
|
261 |
|
262 typedef struct AUDIO_HAL_REGBANK_DESCRIPTOR{ |
|
263 uint32 reg_bank_index; |
|
264 uint32 logical_start_addr; |
|
265 uint32 logical_end_addr; |
|
266 AUDIO_HAL_HW_REGISTER_TYPE reg_bank_type; |
|
267 } AUDIO_HAL_REGBANK_DESCRIPTOR; |
|
268 |
|
269 typedef struct AUDIO_HAL_GAIN_DESCRIPTOR { |
|
270 uint32 channel_index; |
|
271 uint16 gain_index; |
|
272 uint32 linear; |
|
273 int32 min_gain; |
|
274 int32 max_gain; |
|
275 uint32 gain_step; |
|
276 uint32 analog_gain; |
|
277 |
|
278 } AUDIO_HAL_GAIN_DESCRIPTOR; |
|
279 |
|
280 typedef struct AUDIO_TIMED_RAMP_INFO { |
|
281 |
|
282 uint32 linear, |
|
283 int32 ramp_start_volume; |
|
284 int32 ramp_end_volume; |
|
285 int32 current_volume; |
|
286 uint32 current_time_hi; |
|
287 uint32 current_time_lo; |
|
288 uint32 ramp_min_duration_hi; |
|
289 uint32 ramp_min_duration_lo; |
|
290 uint32 ramp_max_duration_hi; |
|
291 uint32 ramp_max_duration_lo; |
|
292 int32 min_volume; |
|
293 int32 max_volume; |
|
294 uint32 volume_step; |
|
295 |
|
296 } AUDIO_TIMED_RAMP_INFO; |
|
297 |
|
298 |
|
299 /* API functions */ |
|
300 |
|
301 /* The convention for the functions will be: */ |
|
302 /* <supplier>_<component>_<API function name(...)> */ |
|
303 |
|
304 /* HAL layer */ |
|
305 |
|
306 void audio_hal_mute_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
307 uint32 channel_index, |
|
308 AUDIO_COMMON_SWITCH mute_control); |
|
309 |
|
310 AUDIO_COMMON_SWITCH audio_hal_mute_status (uint32 channel_index); |
|
311 |
|
312 void audio_hal_power_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
313 uint32 channel_index, AUDIO_COMMON_SWITCH power_control); |
|
314 |
|
315 AUDIO_COMMON_SWITCH audio_hal_power_status(uint32 channel_index); |
|
316 |
|
317 void audio_hal_gain_capabilities_query(uint32* num_channels, uint16* max_num_gains); |
|
318 |
|
319 void audio_hal_gains_descriptor_query(AUDIO_HAL_GAIN_DESCRIPTOR* gain_descriptor_table); |
|
320 |
|
321 void audio_hal_loop_gain_capabilities_query(AUDIO_HAL_HW_LOOPS* num_loops, uint16* max_num_gains); |
|
322 |
|
323 void audio_hal_supported_loops_query (uint16* supported_loop_indexes); |
|
324 |
|
325 void audio_hal_loop_gains_descriptor_query (AUDIO_HAL_HW_LOOPS loop_index, |
|
326 AUDIO_HAL_GAIN_DESCRIPTOR* gain_descriptor_table); |
|
327 |
|
328 AUDIO_COMMON_STATUS audio_hal_gain_control (uint32 channel_index, uint16 gain_index, |
|
329 uint32 linear, int32 gain_value); |
|
330 |
|
331 AUDIO_COMMON_STATUS audio_hal_gain_query (uint32 channel_index, uint16 gain_index, |
|
332 uint32 linear, int32* gain_value); |
|
333 |
|
334 AUDIO_COMMON_STATUS audio_hal_loop_control(AUDIO_HAL_HW_LOOPS loop_index, AUDIO_COMMON_SWITCH loop_switch, |
|
335 uint16 channel_index, uint16 gain_index, uint32 linear, |
|
336 int32 loop_gain_value); |
|
337 |
|
338 |
|
339 uint16 audio_hal_registerbank_query(); |
|
340 |
|
341 void audio_hal_regbank_descriptors_query(AUDIO_HAL_REGBANK_DESCRIPTOR* register_banks); |
|
342 |
|
343 void audio_hal_custom_hw_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status, uint32 extra_status_info), |
|
344 AUDIO_HAL_HW_OPERATION hw_operation, AUDIO_HAL_HW_REGISTER_TYPE register_type, |
|
345 uint16 num_data, uint32* address_data_sequence); |
|
346 |
|
347 |
|
348 /* Sequencer layer */ |
|
349 void audio_sequencer_mute_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
350 uint32 channel_index, AUDIO_COMMON_SWITCH mute_control); |
|
351 |
|
352 void audio_sequencer_power_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
353 uint32 channel_index, AUDIO_COMMON_SWITCH power_control); |
|
354 |
|
355 AUDIO_COMMON_STATUS audio_sequencer_burst_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
356 AUDIO_COMMON_SWITCH burst_control); |
|
357 |
|
358 void audio_sequencer_volume_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
359 uint32 channel_index, uint32 linear, int32 volume); |
|
360 |
|
361 void audio_sequencer_volume_query(uint32 channel_index, uint32 linear, int32* min_volume, |
|
362 int32* max_volume, int32* current_volume); |
|
363 |
|
364 /* Timing critical layer */ |
|
365 void audio_timed_mute_control(void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
366 uint32 channel_index, AUDIO_COMMON_SWITCH mute_control); |
|
367 |
|
368 void audio_timed_volume_ramp_control (void (*call_back_fn_ptr)(AUDIO_COMMON_STATUS status), |
|
369 uint32 channel_index, uint32 linear, int32 start_volume, |
|
370 int32 end_volume, uint32 ramp_duration_hi, uint32 ram_duration_lo, |
|
371 AUDIO_COMMON_SWITCH ramp_terminate); |
|
372 |
|
373 void audio_timed_volume_ramp_query (uint32 channel_index, AUDIO_TIMED_RAMP_INFO* volume_ramp_info); |
|
374 |
|
375 |
|
376 |
|
377 |
|
378 #ifdef __cplusplus |
|
379 } |
|
380 #endif /* __cplusplus */ |
|
381 |
|
382 #endif |