blob: 01a0890ef9db0409ab4b605b5b1ffc688d0e6b2f [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* arch/arm/mach-msm/qdsp5/audmgr.h
2 *
3 * Copyright (C) 2008 Google, Inc.
Duy Truong790f06d2013-02-13 16:38:12 -08004 * Copyright (c) 2008-2009, 2012 The Linux Foundation. All rights reserved.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07005 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17#ifndef _AUDIO_RPC_H_
18#define _AUDIO_RPC_H_
19
20#include <mach/qdsp5/qdsp5audppcmdi.h>
21
22enum rpc_aud_def_sample_rate_type {
23 RPC_AUD_DEF_SAMPLE_RATE_NONE,
24 RPC_AUD_DEF_SAMPLE_RATE_8000,
25 RPC_AUD_DEF_SAMPLE_RATE_11025,
26 RPC_AUD_DEF_SAMPLE_RATE_12000,
27 RPC_AUD_DEF_SAMPLE_RATE_16000,
28 RPC_AUD_DEF_SAMPLE_RATE_22050,
29 RPC_AUD_DEF_SAMPLE_RATE_24000,
30 RPC_AUD_DEF_SAMPLE_RATE_32000,
31 RPC_AUD_DEF_SAMPLE_RATE_44100,
32 RPC_AUD_DEF_SAMPLE_RATE_48000,
33 RPC_AUD_DEF_SAMPLE_RATE_MAX,
34};
35
36enum rpc_aud_def_method_type {
37 RPC_AUD_DEF_METHOD_NONE,
38 RPC_AUD_DEF_METHOD_KEY_BEEP,
39 RPC_AUD_DEF_METHOD_PLAYBACK,
40 RPC_AUD_DEF_METHOD_VOICE,
41 RPC_AUD_DEF_METHOD_RECORD,
42 RPC_AUD_DEF_METHOD_HOST_PCM,
43 RPC_AUD_DEF_METHOD_MIDI_OUT,
44 RPC_AUD_DEF_METHOD_RECORD_SBC,
45 RPC_AUD_DEF_METHOD_DTMF_RINGER,
46 RPC_AUD_DEF_METHOD_MAX,
47};
48
49enum rpc_aud_def_codec_type {
50 RPC_AUD_DEF_CODEC_NONE,
51 RPC_AUD_DEF_CODEC_DTMF,
52 RPC_AUD_DEF_CODEC_MIDI,
53 RPC_AUD_DEF_CODEC_MP3,
54 RPC_AUD_DEF_CODEC_PCM,
55 RPC_AUD_DEF_CODEC_AAC,
56 RPC_AUD_DEF_CODEC_WMA,
57 RPC_AUD_DEF_CODEC_RA,
58 RPC_AUD_DEF_CODEC_ADPCM,
59 RPC_AUD_DEF_CODEC_GAUDIO,
60 RPC_AUD_DEF_CODEC_VOC_EVRC,
61 RPC_AUD_DEF_CODEC_VOC_13K,
62 RPC_AUD_DEF_CODEC_VOC_4GV_NB,
63 RPC_AUD_DEF_CODEC_VOC_AMR,
64 RPC_AUD_DEF_CODEC_VOC_EFR,
65 RPC_AUD_DEF_CODEC_VOC_FR,
66 RPC_AUD_DEF_CODEC_VOC_HR,
67 RPC_AUD_DEF_CODEC_VOC_CDMA,
68 RPC_AUD_DEF_CODEC_VOC_CDMA_WB,
69 RPC_AUD_DEF_CODEC_VOC_UMTS,
70 RPC_AUD_DEF_CODEC_VOC_UMTS_WB,
71 RPC_AUD_DEF_CODEC_SBC,
72 RPC_AUD_DEF_CODEC_VOC_PCM,
73 RPC_AUD_DEF_CODEC_AMR_WB,
74 RPC_AUD_DEF_CODEC_AMR_WB_PLUS,
75 RPC_AUD_DEF_CODEC_AAC_BSAC,
76 RPC_AUD_DEF_CODEC_MAX,
77 RPC_AUD_DEF_CODEC_AMR_NB,
78 RPC_AUD_DEF_CODEC_13K,
79 RPC_AUD_DEF_CODEC_EVRC,
Chaithanya Krishna Bacharaju8e838cc2012-08-16 11:32:46 +053080 RPC_AUD_DEF_CODEC_AC3,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070081 RPC_AUD_DEF_CODEC_MAX_002,
82};
83
84enum rpc_snd_method_type {
85 RPC_SND_METHOD_VOICE = 0,
86 RPC_SND_METHOD_KEY_BEEP,
87 RPC_SND_METHOD_MESSAGE,
88 RPC_SND_METHOD_RING,
89 RPC_SND_METHOD_MIDI,
90 RPC_SND_METHOD_AUX,
91 RPC_SND_METHOD_MAX,
92};
93
94enum rpc_voc_codec_type {
95 RPC_VOC_CODEC_DEFAULT,
96 RPC_VOC_CODEC_ON_CHIP_0 = RPC_VOC_CODEC_DEFAULT,
97 RPC_VOC_CODEC_ON_CHIP_1,
98 RPC_VOC_CODEC_STEREO_HEADSET,
99 RPC_VOC_CODEC_ON_CHIP_AUX,
100 RPC_VOC_CODEC_BT_OFF_BOARD,
101 RPC_VOC_CODEC_BT_A2DP,
102 RPC_VOC_CODEC_OFF_BOARD,
103 RPC_VOC_CODEC_SDAC,
104 RPC_VOC_CODEC_RX_EXT_SDAC_TX_INTERNAL,
105 RPC_VOC_CODEC_IN_STEREO_SADC_OUT_MONO_HANDSET,
106 RPC_VOC_CODEC_IN_STEREO_SADC_OUT_STEREO_HEADSET,
107 RPC_VOC_CODEC_TX_INT_SADC_RX_EXT_AUXPCM,
108 RPC_VOC_CODEC_EXT_STEREO_SADC_OUT_MONO_HANDSET,
109 RPC_VOC_CODEC_EXT_STEREO_SADC_OUT_STEREO_HEADSET,
110 RPC_VOC_CODEC_TTY_ON_CHIP_1,
111 RPC_VOC_CODEC_TTY_OFF_BOARD,
112 RPC_VOC_CODEC_TTY_VCO,
113 RPC_VOC_CODEC_TTY_HCO,
114 RPC_VOC_CODEC_ON_CHIP_0_DUAL_MIC,
115 RPC_VOC_CODEC_MAX,
116 RPC_VOC_CODEC_NONE,
117};
118
119enum rpc_audmgr_status_type {
120 RPC_AUDMGR_STATUS_READY,
121 RPC_AUDMGR_STATUS_CODEC_CONFIG,
122 RPC_AUDMGR_STATUS_PENDING,
123 RPC_AUDMGR_STATUS_SUSPEND,
124 RPC_AUDMGR_STATUS_FAILURE,
125 RPC_AUDMGR_STATUS_VOLUME_CHANGE,
126 RPC_AUDMGR_STATUS_DISABLED,
127 RPC_AUDMGR_STATUS_ERROR,
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530128 RPC_AUDMGR_STATUS_DEVICE_CONFIG,
129 RPC_AUDMGR_STATUS_DEVICE_INFO
130
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700131};
132
133struct rpc_audmgr_enable_client_args {
134 uint32_t set_to_one;
135 uint32_t tx_sample_rate;
136 uint32_t rx_sample_rate;
137 uint32_t def_method;
138 uint32_t codec_type;
139 uint32_t snd_method;
140
141 uint32_t cb_func;
142 uint32_t client_data;
143};
144
145#define AUDMGR_ENABLE_CLIENT 2
146#define AUDMGR_DISABLE_CLIENT 3
147#define AUDMGR_SUSPEND_EVENT_RSP 4
148#define AUDMGR_REGISTER_OPERATION_LISTENER 5
149#define AUDMGR_UNREGISTER_OPERATION_LISTENER 6
150#define AUDMGR_REGISTER_CODEC_LISTENER 7
151#define AUDMGR_GET_RX_SAMPLE_RATE 8
152#define AUDMGR_GET_TX_SAMPLE_RATE 9
153#define AUDMGR_SET_DEVICE_MODE 10
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530154#define MIN_RPC_DATA_LENGTH 16
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700155
156#define AUDMGR_PROG_VERS "rs30000013:0x7feccbff"
157#define AUDMGR_PROG 0x30000013
158#define AUDMGR_VERS 0x7feccbff
159#define AUDMGR_VERS_COMP 0x00010001
160#define AUDMGR_VERS_COMP_VER2 0x00020001
161#define AUDMGR_VERS_COMP_VER3 0x00030001
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530162#define AUDMGR_VERS_COMP_VER4 0x00040001
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700163
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530164struct cad_device_info_type {
165 uint32_t rx_device;
166 uint32_t tx_device;
167 uint32_t ear_mute;
168 uint32_t mic_mute;
169 uint32_t volume;
170};
171
172struct rpc_audmgr_cb_common {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700173 uint32_t cb_id; /* cb_func */
174 uint32_t status; /* Audmgr status */
175 uint32_t set_to_one; /* Pointer status (1 = valid, 0 = invalid) */
176 uint32_t disc;
177 /* disc = AUDMGR_STATUS_READY => data=handle
178 disc = AUDMGR_STATUS_CODEC_CONFIG => data = volume
179 disc = AUDMGR_STATUS_DISABLED => data =status_disabled
180 disc = AUDMGR_STATUS_VOLUME_CHANGE => data = volume_change */
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530181};
182
183struct rpc_audmgr_cb_ready {
184 struct rpc_audmgr_cb_common c_data;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700185 union {
186 uint32_t handle;
187 uint32_t volume;
188 uint32_t status_disabled;
189 uint32_t volume_change;
190 } u;
191 uint32_t client_data;
192};
193
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530194struct rpc_audmgr_cb_device_info {
195 struct rpc_audmgr_cb_common c_data;
196 struct cad_device_info_type d;
197 uint32_t client_data;
198};
199
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700200#define AUDMGR_CB_FUNC_PTR 1
201#define AUDMGR_OPR_LSTNR_CB_FUNC_PTR 2
202#define AUDMGR_CODEC_LSTR_FUNC_PTR 3
203
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530204struct dev_evt_msg {
205 struct cad_device_info_type dev_type;
206 uint32_t acdb_id;
207 int session_info;
208 uint32_t sample_rate;
209};
210
211typedef void (*device_info_func)(struct dev_evt_msg *evt_msg, void *private);
212
213struct device_info_callback {
214 device_info_func func;
215 void *private;
216};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700217
218struct audmgr {
219 wait_queue_head_t wait;
220 uint32_t handle;
221 int state;
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530222 struct dev_evt_msg evt;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700223};
224
225struct audmgr_config {
226 uint32_t tx_rate;
227 uint32_t rx_rate;
228 uint32_t def_method;
229 uint32_t codec;
230 uint32_t snd_method;
231};
232
Chaithanya Krishna Bacharajudb3e9af2012-06-29 16:06:40 +0530233int audmgr_register_device_info_callback(struct device_info_callback *dcb);
234int audmgr_deregister_device_info_callback(struct device_info_callback *dcb);
235
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700236int audmgr_open(struct audmgr *am);
237int audmgr_close(struct audmgr *am);
238int audmgr_enable(struct audmgr *am, struct audmgr_config *cfg);
239int audmgr_disable(struct audmgr *am);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700240#endif