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 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, 78 RPC_AUD_DEF_CODEC_MAX_002, 79}; 80 81enum 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 91enum 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 116enum 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 127struct 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 152struct 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 176struct 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 184struct 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 192int audmgr_open(struct audmgr *am); 193int audmgr_close(struct audmgr *am); 194int audmgr_enable(struct audmgr *am, struct audmgr_config *cfg); 195int audmgr_disable(struct audmgr *am); 196 197typedef void (*audpp_event_func)(void *private, unsigned id, uint16_t *msg); 198 199int audpp_enable(int id, audpp_event_func func, void *private); 200void audpp_disable(int id, void *private); 201 202int audpp_send_queue1(void *cmd, unsigned len); 203int audpp_send_queue2(void *cmd, unsigned len); 204int audpp_send_queue3(void *cmd, unsigned len); 205 206int audpp_set_volume_and_pan(unsigned id, unsigned volume, int pan); 207int audpp_pause(unsigned id, int pause); 208int audpp_flush(unsigned id); 209void audpp_avsync(int id, unsigned rate); 210unsigned audpp_avsync_sample_count(int id); 211unsigned audpp_avsync_byte_count(int id); 212 213#endif 214