audio_hw.h revision 31aca91506be3beb30ae598cf22f6f940c2aac0b
12dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* 22dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Copyright (C) 2013 The Android Open Source Project 32dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * 42dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Licensed under the Apache License, Version 2.0 (the "License"); 52dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * you may not use this file except in compliance with the License. 62dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * You may obtain a copy of the License at 72dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * 82dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * http://www.apache.org/licenses/LICENSE-2.0 92dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * 102dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Unless required by applicable law or agreed to in writing, software 112dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * distributed under the License is distributed on an "AS IS" BASIS, 122dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * See the License for the specific language governing permissions and 142dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * limitations under the License. 152dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 162dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 17b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#ifndef QCOM_AUDIO_HW_H 18b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define QCOM_AUDIO_HW_H 19b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent 20b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#include <cutils/list.h> 212dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <hardware/audio.h> 222dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 232dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <tinyalsa/asoundlib.h> 244e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda#include <tinycompress/tinycompress.h> 252dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 262dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <audio_route/audio_route.h> 272dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 28c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent#define VISUALIZER_LIBRARY_PATH "/system/lib/soundfx/libqcomvisualizer.so" 29c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent 30b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent/* Flags used to initialize acdb_settings variable that goes to ACDB library */ 31b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define DMIC_FLAG 0x00000002 32b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_OFF 0x00000010 33b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_FULL 0x00000020 34b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_VCO 0x00000040 35b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_HCO 0x00000080 36b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_CLEAR 0xFFFFFF0F 37b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent 382dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ACDB_DEV_TYPE_OUT 1 392dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ACDB_DEV_TYPE_IN 2 402dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 41b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define MAX_SUPPORTED_CHANNEL_MASKS 2 4207eeafd9390a85c5b9ad1642e89d3973615584cbEric Laurent#define DEFAULT_HDMI_OUT_CHANNELS 2 432dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 44b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurenttypedef int snd_device_t; 452dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 462dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* These are the supported use cases by the hardware. 472dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Each usecase is mapped to a specific PCM device. 482dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Refer to pcm_device_table[]. 492dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 502dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef enum { 512dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_INVALID = -1, 522dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Playback usecases */ 532dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_DEEP_BUFFER = 0, 542dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_LOW_LATENCY, 552dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_MULTI_CH, 564e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda USECASE_AUDIO_PLAYBACK_OFFLOAD, 572dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 582dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Capture usecases */ 592dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_RECORD, 602dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_RECORD_LOW_LATENCY, 612dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 622dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_VOICE_CALL, 632dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda AUDIO_USECASE_MAX 642dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda} audio_usecase_t; 652dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 662dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 672dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 682dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* 692dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * tinyAlsa library interprets period size as number of frames 702dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * one frame = channel_count * sizeof (pcm sample) 712dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * so if format = 16-bit PCM and channels = Stereo, frame size = 2 ch * 2 = 4 bytes 722dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * DEEP_BUFFER_OUTPUT_PERIOD_SIZE = 1024 means 1024 * 4 = 4096 bytes 732dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * We should take care of returning proper size when AudioFlinger queries for 742dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * the buffer size of an input/output stream 752dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 762dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 774e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamandaenum { 784e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_EXIT, /* exit compress offload thread loop*/ 794e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_DRAIN, /* send a full drain request to DSP */ 804e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_PARTIAL_DRAIN, /* send a partial drain request to DSP */ 814e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_WAIT_FOR_BUFFER, /* wait for buffer released by DSP */ 824e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda}; 834e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 844e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamandaenum { 854e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_STATE_IDLE, 864e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_STATE_PLAYING, 874e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_STATE_PAUSED, 884e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda}; 894e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 904e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamandastruct offload_cmd { 914e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct listnode node; 924e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int cmd; 934e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int data[]; 944e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda}; 954e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 962dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct stream_out { 972dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_stream_out stream; 98150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 994e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda pthread_cond_t cond; 1002dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm_config config; 1014e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct compr_config compr_config; 1022dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *pcm; 1034e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct compress *compr; 1042dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int standby; 1052dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int pcm_device_id; 1064e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda unsigned int sample_rate; 1072dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t channel_mask; 1084e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda audio_format_t format; 1092dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_devices_t devices; 1102dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_output_flags_t flags; 1112dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t usecase; 1122dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Array of supported channel mask configurations. +1 so that the last entry is always 0 */ 1132dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t supported_channel_masks[MAX_SUPPORTED_CHANNEL_MASKS + 1]; 114a9024defa11f6502ca55425a4803cd00441d51e7Eric Laurent bool muted; 1152ccd7babcde54a8073945dec69660cb60e66a931Glenn Kasten uint64_t written; /* total frames written, not cleared when entering standby */ 116c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent audio_io_handle_t handle; 1172dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1184e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int non_blocking; 1194e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int playback_started; 1204e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int offload_state; 1214e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda pthread_cond_t offload_cond; 1224e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda pthread_t offload_thread; 1234e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct listnode offload_cmd_list; 1244e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda bool offload_thread_blocked; 1254e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 1264e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda stream_callback_t offload_callback; 1274e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda void *offload_cookie; 128352f27bea3ea82b64234485de7a0f87a1991ab06Haynes Mathew George struct compr_gapless_mdata gapless_mdata; 129352f27bea3ea82b64234485de7a0f87a1991ab06Haynes Mathew George int send_new_metadata; 1304e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 1312dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_device *dev; 1322dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1332dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1342dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct stream_in { 1352dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_stream_in stream; 136150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 1372dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm_config config; 1382dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *pcm; 1392dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int standby; 1402dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int source; 1412dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int pcm_device_id; 1422dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int device; 1432dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t channel_mask; 1442dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t usecase; 145f70ffb40ca0c4e8cce15c77fd9edff7f2b6980deRavi Kumar Alamanda bool enable_aec; 1462dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1472dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_device *dev; 1482dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1492dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1502dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef enum { 1512dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda PCM_PLAYBACK, 1522dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda PCM_CAPTURE, 1532dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda VOICE_CALL 1542dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda} usecase_type_t; 1552dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 156096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamandaunion stream_ptr { 157096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda struct stream_in *in; 158096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda struct stream_out *out; 159096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda}; 160096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda 1612dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct audio_usecase { 1623b1816cd594eba53a9869d7b23af36daacf58fa1Ravi Kumar Alamanda struct listnode list; 1632dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t id; 1642dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda usecase_type_t type; 1652dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_devices_t devices; 16671c84b70ff7c428e35ac187ca4a234acac558240Ravi Kumar Alamanda snd_device_t out_snd_device; 16771c84b70ff7c428e35ac187ca4a234acac558240Ravi Kumar Alamanda snd_device_t in_snd_device; 168096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda union stream_ptr stream; 1692dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1702dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1712dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct audio_device { 1722dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_hw_device device; 173150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 1742dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct mixer *mixer; 1752dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_mode_t mode; 176c8400637beb896d2f5d7ae980682cd2d072a9da3Eric Laurent struct stream_in *active_input; 177096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda struct stream_out *primary_output; 1782dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int in_call; 1792dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda float voice_volume; 1802dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool mic_mute; 1812dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int tty_mode; 1822dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool bluetooth_nrec; 1832dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool screen_off; 1842dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *voice_call_rx; 1852dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *voice_call_tx; 186b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent int *snd_dev_ref_cnt; 1873b1816cd594eba53a9869d7b23af36daacf58fa1Ravi Kumar Alamanda struct listnode usecase_list; 1882dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_route *audio_route; 1892dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int acdb_settings; 190c56336bfad4661796b749fc4db7de3a1e6aba06fJean-Michel Trivi bool speaker_lr_swap; 19107eeafd9390a85c5b9ad1642e89d3973615584cbEric Laurent unsigned int cur_hdmi_channels; 1922dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 193b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent void *platform; 194c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent 195c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent void *visualizer_lib; 196c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent int (*visualizer_start_output)(audio_io_handle_t); 197c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent int (*visualizer_stop_output)(audio_io_handle_t); 19831aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung 19931aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung /* The pcm_params use_case_table is loaded by adev_verify_devices() upon 20031aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * calling adev_open(). 20131aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * 20231aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * If an entry is not NULL, it can be used to determine if extended precision 20331aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * or other capabilities are present for the device corresponding to that usecase. 20431aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung */ 20531aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung struct pcm_params *use_case_table[AUDIO_USECASE_MAX]; 2062dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2072dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 208150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent/* 209150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent * NOTE: when multiple mutexes have to be acquired, always take the 210150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent * stream_in or stream_out mutex first, followed by the audio_device mutex. 211150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent */ 212150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent 213b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#endif // QCOM_AUDIO_HW_H 214