]> bbs.cooldavid.org Git - net-next-2.6.git/blob - drivers/staging/dream/qdsp5/audmgr_new.h
Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
[net-next-2.6.git] / drivers / staging / dream / qdsp5 / audmgr_new.h
1 /* arch/arm/mach-msm/qdsp5/audmgr.h
2  *
3  * Copyright 2008 (c) QUALCOMM Incorporated.
4  * 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
20 enum 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
34 enum 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
47 enum 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,
78         RPC_AUD_DEF_CODEC_MAX_002,
79 };
80
81 enum rpc_snd_method_type {
82         RPC_SND_METHOD_VOICE = 0,
83         RPC_SND_METHOD_KEY_BEEP,
84         RPC_SND_METHOD_MESSAGE,
85         RPC_SND_METHOD_RING,
86         RPC_SND_METHOD_MIDI,
87         RPC_SND_METHOD_AUX,
88         RPC_SND_METHOD_MAX,
89 };
90
91 enum rpc_voc_codec_type {
92         RPC_VOC_CODEC_DEFAULT,
93         RPC_VOC_CODEC_ON_CHIP_0 = RPC_VOC_CODEC_DEFAULT,
94         RPC_VOC_CODEC_ON_CHIP_1,
95         RPC_VOC_CODEC_STEREO_HEADSET,
96         RPC_VOC_CODEC_ON_CHIP_AUX,
97         RPC_VOC_CODEC_BT_OFF_BOARD,
98         RPC_VOC_CODEC_BT_A2DP,
99         RPC_VOC_CODEC_OFF_BOARD,
100         RPC_VOC_CODEC_SDAC,
101         RPC_VOC_CODEC_RX_EXT_SDAC_TX_INTERNAL,
102         RPC_VOC_CODEC_IN_STEREO_SADC_OUT_MONO_HANDSET,
103         RPC_VOC_CODEC_IN_STEREO_SADC_OUT_STEREO_HEADSET,
104         RPC_VOC_CODEC_TX_INT_SADC_RX_EXT_AUXPCM,
105         RPC_VOC_CODEC_EXT_STEREO_SADC_OUT_MONO_HANDSET,
106         RPC_VOC_CODEC_EXT_STEREO_SADC_OUT_STEREO_HEADSET,
107         RPC_VOC_CODEC_TTY_ON_CHIP_1,
108         RPC_VOC_CODEC_TTY_OFF_BOARD,
109         RPC_VOC_CODEC_TTY_VCO,
110         RPC_VOC_CODEC_TTY_HCO,
111         RPC_VOC_CODEC_ON_CHIP_0_DUAL_MIC,
112         RPC_VOC_CODEC_MAX,
113         RPC_VOC_CODEC_NONE,
114 };
115
116 enum rpc_audmgr_status_type {
117         RPC_AUDMGR_STATUS_READY,
118         RPC_AUDMGR_STATUS_CODEC_CONFIG,
119         RPC_AUDMGR_STATUS_PENDING,
120         RPC_AUDMGR_STATUS_SUSPEND,
121         RPC_AUDMGR_STATUS_FAILURE,
122         RPC_AUDMGR_STATUS_VOLUME_CHANGE,
123         RPC_AUDMGR_STATUS_DISABLED,
124         RPC_AUDMGR_STATUS_ERROR,
125 };
126
127 struct rpc_audmgr_enable_client_args {
128         uint32_t set_to_one;
129         uint32_t tx_sample_rate;
130         uint32_t rx_sample_rate;
131         uint32_t def_method;
132         uint32_t codec_type;
133         uint32_t snd_method;
134
135         uint32_t cb_func;
136         uint32_t client_data;
137 };
138
139 #define AUDMGR_ENABLE_CLIENT                    2
140 #define AUDMGR_DISABLE_CLIENT                   3
141 #define AUDMGR_SUSPEND_EVENT_RSP                4
142 #define AUDMGR_REGISTER_OPERATION_LISTENER      5
143 #define AUDMGR_UNREGISTER_OPERATION_LISTENER    6
144 #define AUDMGR_REGISTER_CODEC_LISTENER          7
145 #define AUDMGR_GET_RX_SAMPLE_RATE               8
146 #define AUDMGR_GET_TX_SAMPLE_RATE               9
147 #define AUDMGR_SET_DEVICE_MODE                  10
148
149 #define AUDMGR_PROG 0x30000013
150 #define AUDMGR_VERS MSM_RPC_VERS(1,0)
151
152 struct rpc_audmgr_cb_func_ptr {
153         uint32_t cb_id;
154         uint32_t status; /* Audmgr status */
155         uint32_t set_to_one;  /* Pointer status (1 = valid, 0  = invalid) */
156         uint32_t disc;
157         /* disc = AUDMGR_STATUS_READY => data=handle
158            disc = AUDMGR_STATUS_CODEC_CONFIG => data = handle
159            disc = AUDMGR_STATUS_DISABLED => data =status_disabled
160            disc = AUDMGR_STATUS_VOLUME_CHANGE => data = volume-change */
161         union {
162                 uint32_t handle;
163                 uint32_t volume;
164                 uint32_t status_disabled;
165                 uint32_t volume_change;
166         } u;
167 };
168
169 #define AUDMGR_CB_FUNC_PTR                      1
170 #define AUDMGR_OPR_LSTNR_CB_FUNC_PTR            2
171 #define AUDMGR_CODEC_LSTR_FUNC_PTR              3
172
173 #define AUDMGR_CB_PROG 0x31000013
174 #define AUDMGR_CB_VERS 0xf8e3e2d9
175
176 struct audmgr {
177         wait_queue_head_t wait;
178         uint32_t handle;
179         struct msm_rpc_endpoint *ept;
180         struct task_struct *task;
181         int state;
182 };
183
184 struct audmgr_config {
185         uint32_t tx_rate;
186         uint32_t rx_rate;
187         uint32_t def_method;
188         uint32_t codec;
189         uint32_t snd_method;
190 };
191
192 int audmgr_open(struct audmgr *am);
193 int audmgr_close(struct audmgr *am);
194 int audmgr_enable(struct audmgr *am, struct audmgr_config *cfg);
195 int audmgr_disable(struct audmgr *am);
196
197 typedef void (*audpp_event_func)(void *private, unsigned id, uint16_t *msg);
198
199 int audpp_enable(int id, audpp_event_func func, void *private);
200 void audpp_disable(int id, void *private);
201
202 int audpp_send_queue1(void *cmd, unsigned len);
203 int audpp_send_queue2(void *cmd, unsigned len);
204 int audpp_send_queue3(void *cmd, unsigned len);
205
206 int audpp_set_volume_and_pan(unsigned id, unsigned volume, int pan);
207 int audpp_pause(unsigned id, int pause);
208 int audpp_flush(unsigned id);
209 void audpp_avsync(int id, unsigned rate);
210 unsigned audpp_avsync_sample_count(int id);
211 unsigned audpp_avsync_byte_count(int id);
212
213 #endif