blob: d775a9334df6c9f52486e4982ab0bfd5fb92e86a [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* arch/arm/mach-msm/qdsp5/audmgr.h
2 *
Duy Truong790f06d2013-02-13 16:38:12 -08003 * Copyright 2008,2012 (c) The Linux Foundation. All rights reserved.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07004 * Copyright (C) 2008 Google, Inc.
5 *
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 _ARCH_ARM_MACH_MSM_AUDMGR_NEW_H
18#define _ARCH_ARM_MACH_MSM_AUDMGR_NEW_H
19
20enum rpc_aud_def_sample_rate_type {
21 RPC_AUD_DEF_SAMPLE_RATE_NONE,
22 RPC_AUD_DEF_SAMPLE_RATE_8000,
23 RPC_AUD_DEF_SAMPLE_RATE_11025,
24 RPC_AUD_DEF_SAMPLE_RATE_12000,
25 RPC_AUD_DEF_SAMPLE_RATE_16000,
26 RPC_AUD_DEF_SAMPLE_RATE_22050,
27 RPC_AUD_DEF_SAMPLE_RATE_24000,
28 RPC_AUD_DEF_SAMPLE_RATE_32000,
29 RPC_AUD_DEF_SAMPLE_RATE_44100,
30 RPC_AUD_DEF_SAMPLE_RATE_48000,
31 RPC_AUD_DEF_SAMPLE_RATE_MAX,
32};
33
34enum rpc_aud_def_method_type {
35 RPC_AUD_DEF_METHOD_NONE,
36 RPC_AUD_DEF_METHOD_KEY_BEEP,
37 RPC_AUD_DEF_METHOD_PLAYBACK,
38 RPC_AUD_DEF_METHOD_VOICE,
39 RPC_AUD_DEF_METHOD_RECORD,
40 RPC_AUD_DEF_METHOD_HOST_PCM,
41 RPC_AUD_DEF_METHOD_MIDI_OUT,
42 RPC_AUD_DEF_METHOD_RECORD_SBC,
43 RPC_AUD_DEF_METHOD_DTMF_RINGER,
44 RPC_AUD_DEF_METHOD_MAX,
45};
46
47enum rpc_aud_def_codec_type {
48 RPC_AUD_DEF_CODEC_NONE,
49 RPC_AUD_DEF_CODEC_DTMF,
50 RPC_AUD_DEF_CODEC_MIDI,
51 RPC_AUD_DEF_CODEC_MP3,
52 RPC_AUD_DEF_CODEC_PCM,
53 RPC_AUD_DEF_CODEC_AAC,
54 RPC_AUD_DEF_CODEC_WMA,
55 RPC_AUD_DEF_CODEC_RA,
56 RPC_AUD_DEF_CODEC_ADPCM,
57 RPC_AUD_DEF_CODEC_GAUDIO,
58 RPC_AUD_DEF_CODEC_VOC_EVRC,
59 RPC_AUD_DEF_CODEC_VOC_13K,
60 RPC_AUD_DEF_CODEC_VOC_4GV_NB,
61 RPC_AUD_DEF_CODEC_VOC_AMR,
62 RPC_AUD_DEF_CODEC_VOC_EFR,
63 RPC_AUD_DEF_CODEC_VOC_FR,
64 RPC_AUD_DEF_CODEC_VOC_HR,
65 RPC_AUD_DEF_CODEC_VOC_CDMA,
66 RPC_AUD_DEF_CODEC_VOC_CDMA_WB,
67 RPC_AUD_DEF_CODEC_VOC_UMTS,
68 RPC_AUD_DEF_CODEC_VOC_UMTS_WB,
69 RPC_AUD_DEF_CODEC_SBC,
70 RPC_AUD_DEF_CODEC_VOC_PCM,
71 RPC_AUD_DEF_CODEC_AMR_WB,
72 RPC_AUD_DEF_CODEC_AMR_WB_PLUS,
73 RPC_AUD_DEF_CODEC_AAC_BSAC,
74 RPC_AUD_DEF_CODEC_MAX,
75 RPC_AUD_DEF_CODEC_AMR_NB,
76 RPC_AUD_DEF_CODEC_13K,
77 RPC_AUD_DEF_CODEC_EVRC,
Chaithanya Krishna Bacharaju8e838cc2012-08-16 11:32:46 +053078 RPC_AUD_DEF_CODEC_AC3,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070079 RPC_AUD_DEF_CODEC_MAX_002,
80};
81
82enum rpc_snd_method_type {
83 RPC_SND_METHOD_VOICE = 0,
84 RPC_SND_METHOD_KEY_BEEP,
85 RPC_SND_METHOD_MESSAGE,
86 RPC_SND_METHOD_RING,
87 RPC_SND_METHOD_MIDI,
88 RPC_SND_METHOD_AUX,
89 RPC_SND_METHOD_MAX,
90};
91
92enum rpc_voc_codec_type {
93 RPC_VOC_CODEC_DEFAULT,
94 RPC_VOC_CODEC_ON_CHIP_0 = RPC_VOC_CODEC_DEFAULT,
95 RPC_VOC_CODEC_ON_CHIP_1,
96 RPC_VOC_CODEC_STEREO_HEADSET,
97 RPC_VOC_CODEC_ON_CHIP_AUX,
98 RPC_VOC_CODEC_BT_OFF_BOARD,
99 RPC_VOC_CODEC_BT_A2DP,
100 RPC_VOC_CODEC_OFF_BOARD,
101 RPC_VOC_CODEC_SDAC,
102 RPC_VOC_CODEC_RX_EXT_SDAC_TX_INTERNAL,
103 RPC_VOC_CODEC_IN_STEREO_SADC_OUT_MONO_HANDSET,
104 RPC_VOC_CODEC_IN_STEREO_SADC_OUT_STEREO_HEADSET,
105 RPC_VOC_CODEC_TX_INT_SADC_RX_EXT_AUXPCM,
106 RPC_VOC_CODEC_EXT_STEREO_SADC_OUT_MONO_HANDSET,
107 RPC_VOC_CODEC_EXT_STEREO_SADC_OUT_STEREO_HEADSET,
108 RPC_VOC_CODEC_TTY_ON_CHIP_1,
109 RPC_VOC_CODEC_TTY_OFF_BOARD,
110 RPC_VOC_CODEC_TTY_VCO,
111 RPC_VOC_CODEC_TTY_HCO,
112 RPC_VOC_CODEC_ON_CHIP_0_DUAL_MIC,
113 RPC_VOC_CODEC_MAX,
114 RPC_VOC_CODEC_NONE,
115};
116
117enum rpc_audmgr_status_type {
118 RPC_AUDMGR_STATUS_READY,
119 RPC_AUDMGR_STATUS_CODEC_CONFIG,
120 RPC_AUDMGR_STATUS_PENDING,
121 RPC_AUDMGR_STATUS_SUSPEND,
122 RPC_AUDMGR_STATUS_FAILURE,
123 RPC_AUDMGR_STATUS_VOLUME_CHANGE,
124 RPC_AUDMGR_STATUS_DISABLED,
125 RPC_AUDMGR_STATUS_ERROR,
126};
127
128struct rpc_audmgr_enable_client_args {
129 uint32_t set_to_one;
130 uint32_t tx_sample_rate;
131 uint32_t rx_sample_rate;
132 uint32_t def_method;
133 uint32_t codec_type;
134 uint32_t snd_method;
135
136 uint32_t cb_func;
137 uint32_t client_data;
138};
139
140#define AUDMGR_ENABLE_CLIENT 2
141#define AUDMGR_DISABLE_CLIENT 3
142#define AUDMGR_SUSPEND_EVENT_RSP 4
143#define AUDMGR_REGISTER_OPERATION_LISTENER 5
144#define AUDMGR_UNREGISTER_OPERATION_LISTENER 6
145#define AUDMGR_REGISTER_CODEC_LISTENER 7
146#define AUDMGR_GET_RX_SAMPLE_RATE 8
147#define AUDMGR_GET_TX_SAMPLE_RATE 9
148#define AUDMGR_SET_DEVICE_MODE 10
149
150#define AUDMGR_PROG 0x30000013
151#define AUDMGR_VERS MSM_RPC_VERS(1,0)
152
153struct rpc_audmgr_cb_func_ptr {
154 uint32_t cb_id;
155 uint32_t status; /* Audmgr status */
156 uint32_t set_to_one; /* Pointer status (1 = valid, 0 = invalid) */
157 uint32_t disc;
158 /* disc = AUDMGR_STATUS_READY => data=handle
159 disc = AUDMGR_STATUS_CODEC_CONFIG => data = handle
160 disc = AUDMGR_STATUS_DISABLED => data =status_disabled
161 disc = AUDMGR_STATUS_VOLUME_CHANGE => data = volume-change */
162 union {
163 uint32_t handle;
164 uint32_t volume;
165 uint32_t status_disabled;
166 uint32_t volume_change;
167 } u;
168};
169
170#define AUDMGR_CB_FUNC_PTR 1
171#define AUDMGR_OPR_LSTNR_CB_FUNC_PTR 2
172#define AUDMGR_CODEC_LSTR_FUNC_PTR 3
173
174#define AUDMGR_CB_PROG 0x31000013
175#define AUDMGR_CB_VERS 0xf8e3e2d9
176
177struct audmgr {
178 wait_queue_head_t wait;
179 uint32_t handle;
180 struct msm_rpc_endpoint *ept;
181 struct task_struct *task;
182 int state;
183};
184
185struct audmgr_config {
186 uint32_t tx_rate;
187 uint32_t rx_rate;
188 uint32_t def_method;
189 uint32_t codec;
190 uint32_t snd_method;
191};
192
193int audmgr_open(struct audmgr *am);
194int audmgr_close(struct audmgr *am);
195int audmgr_enable(struct audmgr *am, struct audmgr_config *cfg);
196int audmgr_disable(struct audmgr *am);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700197#endif