12dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* 24b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava * Copyright (C) 2013-2014 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 208e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda#include <cutils/str_parms.h> 21b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#include <cutils/list.h> 222dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <hardware/audio.h> 232dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 242dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <tinyalsa/asoundlib.h> 254e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda#include <tinycompress/tinycompress.h> 262dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 272dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <audio_route/audio_route.h> 284b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava#include "voice.h" 292dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 30c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent#define VISUALIZER_LIBRARY_PATH "/system/lib/soundfx/libqcomvisualizer.so" 3141f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George#define OFFLOAD_EFFECTS_BUNDLE_LIBRARY_PATH "/system/lib/soundfx/libqcompostprocbundle.so" 32c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent 33b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent/* Flags used to initialize acdb_settings variable that goes to ACDB library */ 34b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define DMIC_FLAG 0x00000002 35b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_OFF 0x00000010 36b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_FULL 0x00000020 37b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_VCO 0x00000040 38b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_HCO 0x00000080 39b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define TTY_MODE_CLEAR 0xFFFFFF0F 40b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent 412dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ACDB_DEV_TYPE_OUT 1 422dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ACDB_DEV_TYPE_IN 2 432dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 44b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#define MAX_SUPPORTED_CHANNEL_MASKS 2 4507eeafd9390a85c5b9ad1642e89d3973615584cbEric Laurent#define DEFAULT_HDMI_OUT_CHANNELS 2 462dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 47b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurenttypedef int snd_device_t; 482dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 492dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* These are the supported use cases by the hardware. 502dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Each usecase is mapped to a specific PCM device. 512dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Refer to pcm_device_table[]. 522dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 5308dbcfc116e62f5b4007cade7311430ea235a09eRavi Kumar Alamandaenum { 542dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_INVALID = -1, 552dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Playback usecases */ 562dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_DEEP_BUFFER = 0, 572dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_LOW_LATENCY, 582dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_MULTI_CH, 594e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda USECASE_AUDIO_PLAYBACK_OFFLOAD, 602dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 618e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda /* HFP Use case*/ 628e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda USECASE_AUDIO_HFP_SCO, 638e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda USECASE_AUDIO_HFP_SCO_WB, 648e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda 652dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Capture usecases */ 662dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_RECORD, 672dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_RECORD_LOW_LATENCY, 682dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 692dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_VOICE_CALL, 704b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava 714b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava /* Voice extension usecases */ 724b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava USECASE_VOICE2_CALL, 734b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava USECASE_VOLTE_CALL, 744b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava USECASE_QCHAT_CALL, 754b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava USECASE_VOWLAN_CALL, 764b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava USECASE_INCALL_REC_UPLINK, 774b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava USECASE_INCALL_REC_DOWNLINK, 784b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava USECASE_INCALL_REC_UPLINK_AND_DOWNLINK, 7999c752d87eb818fc3cfb2e5c6790b1ea0bc88da5Ravi Kumar Alamanda 8099c752d87eb818fc3cfb2e5c6790b1ea0bc88da5Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_AFE_PROXY, 8199c752d87eb818fc3cfb2e5c6790b1ea0bc88da5Ravi Kumar Alamanda USECASE_AUDIO_RECORD_AFE_PROXY, 8299c752d87eb818fc3cfb2e5c6790b1ea0bc88da5Ravi Kumar Alamanda 832dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda AUDIO_USECASE_MAX 8408dbcfc116e62f5b4007cade7311430ea235a09eRavi Kumar Alamanda}; 8508dbcfc116e62f5b4007cade7311430ea235a09eRavi Kumar Alamanda 8608dbcfc116e62f5b4007cade7311430ea235a09eRavi Kumar Alamandaconst char * const use_case_table[AUDIO_USECASE_MAX]; 872dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 882dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 892dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 902dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* 912dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * tinyAlsa library interprets period size as number of frames 922dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * one frame = channel_count * sizeof (pcm sample) 932dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * so if format = 16-bit PCM and channels = Stereo, frame size = 2 ch * 2 = 4 bytes 942dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * DEEP_BUFFER_OUTPUT_PERIOD_SIZE = 1024 means 1024 * 4 = 4096 bytes 952dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * We should take care of returning proper size when AudioFlinger queries for 962dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * the buffer size of an input/output stream 972dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 982dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 994e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamandaenum { 1004e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_EXIT, /* exit compress offload thread loop*/ 1014e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_DRAIN, /* send a full drain request to DSP */ 1024e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_PARTIAL_DRAIN, /* send a partial drain request to DSP */ 1034e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_CMD_WAIT_FOR_BUFFER, /* wait for buffer released by DSP */ 1044e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda}; 1054e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 1064e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamandaenum { 1074e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_STATE_IDLE, 1084e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_STATE_PLAYING, 1094e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda OFFLOAD_STATE_PAUSED, 1104e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda}; 1114e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 1124e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamandastruct offload_cmd { 1134e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct listnode node; 1144e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int cmd; 1154e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int data[]; 1164e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda}; 1174e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 1182dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct stream_out { 1192dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_stream_out stream; 120150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 1214e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda pthread_cond_t cond; 1222dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm_config config; 1234e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct compr_config compr_config; 1242dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *pcm; 1254e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct compress *compr; 1262dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int standby; 1272dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int pcm_device_id; 1284e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda unsigned int sample_rate; 1292dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t channel_mask; 1304e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda audio_format_t format; 1312dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_devices_t devices; 1322dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_output_flags_t flags; 1332dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t usecase; 1342dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Array of supported channel mask configurations. +1 so that the last entry is always 0 */ 1352dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t supported_channel_masks[MAX_SUPPORTED_CHANNEL_MASKS + 1]; 136a9024defa11f6502ca55425a4803cd00441d51e7Eric Laurent bool muted; 1372ccd7babcde54a8073945dec69660cb60e66a931Glenn Kasten uint64_t written; /* total frames written, not cleared when entering standby */ 138c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent audio_io_handle_t handle; 1392dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1404e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int non_blocking; 1414e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int playback_started; 1424e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda int offload_state; 1434e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda pthread_cond_t offload_cond; 1444e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda pthread_t offload_thread; 1454e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda struct listnode offload_cmd_list; 1464e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda bool offload_thread_blocked; 1474e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 1484e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda stream_callback_t offload_callback; 1494e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda void *offload_cookie; 150352f27bea3ea82b64234485de7a0f87a1991ab06Haynes Mathew George struct compr_gapless_mdata gapless_mdata; 151352f27bea3ea82b64234485de7a0f87a1991ab06Haynes Mathew George int send_new_metadata; 1524e02e5575f2eb440632a60fb8bed0a44ddae83afRavi Kumar Alamanda 1532dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_device *dev; 1542dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1552dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1562dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct stream_in { 1572dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_stream_in stream; 158150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 1592dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm_config config; 1602dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *pcm; 1612dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int standby; 1622dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int source; 1632dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int pcm_device_id; 16499c752d87eb818fc3cfb2e5c6790b1ea0bc88da5Ravi Kumar Alamanda audio_devices_t device; 1652dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t channel_mask; 1662dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t usecase; 167f70ffb40ca0c4e8cce15c77fd9edff7f2b6980deRavi Kumar Alamanda bool enable_aec; 1683ad4e1b9949d04ad90d053458b10fa4dfbfa088eRavi Kumar Alamanda bool enable_ns; 1692dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1702dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_device *dev; 1712dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1722dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1732dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef enum { 1742dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda PCM_PLAYBACK, 1752dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda PCM_CAPTURE, 1768e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda VOICE_CALL, 1778e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda PCM_HFP_CALL 1782dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda} usecase_type_t; 1792dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 180096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamandaunion stream_ptr { 181096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda struct stream_in *in; 182096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda struct stream_out *out; 183096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda}; 184096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda 1852dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct audio_usecase { 1863b1816cd594eba53a9869d7b23af36daacf58fa1Ravi Kumar Alamanda struct listnode list; 1872dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t id; 1882dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda usecase_type_t type; 1892dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_devices_t devices; 19071c84b70ff7c428e35ac187ca4a234acac558240Ravi Kumar Alamanda snd_device_t out_snd_device; 19171c84b70ff7c428e35ac187ca4a234acac558240Ravi Kumar Alamanda snd_device_t in_snd_device; 192096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda union stream_ptr stream; 1932dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1942dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1952dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct audio_device { 1962dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_hw_device device; 197150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 1982dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct mixer *mixer; 1992dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_mode_t mode; 200c8400637beb896d2f5d7ae980682cd2d072a9da3Eric Laurent struct stream_in *active_input; 201096c87f83ccc1439acb639dbab00faf5a393afa7Ravi Kumar Alamanda struct stream_out *primary_output; 20299c752d87eb818fc3cfb2e5c6790b1ea0bc88da5Ravi Kumar Alamanda struct stream_out *voice_tx_output; 20399c752d87eb818fc3cfb2e5c6790b1ea0bc88da5Ravi Kumar Alamanda struct stream_out *current_call_output; 2042dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool bluetooth_nrec; 2052dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool screen_off; 206b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent int *snd_dev_ref_cnt; 2073b1816cd594eba53a9869d7b23af36daacf58fa1Ravi Kumar Alamanda struct listnode usecase_list; 2082dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_route *audio_route; 2092dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int acdb_settings; 210c56336bfad4661796b749fc4db7de3a1e6aba06fJean-Michel Trivi bool speaker_lr_swap; 2114b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava struct voice voice; 21207eeafd9390a85c5b9ad1642e89d3973615584cbEric Laurent unsigned int cur_hdmi_channels; 2139f3065480c81bf01d3af65bfd3da09e1fb74b520Ravi Kumar Alamanda bool bt_wb_speech_enabled; 2147b2b5ab2921c4679455faa3bfbeb1457e5eb5f0dEric Laurent bool mic_muted; 215cefbbac40220d4e7690d204eecff5f6ae3f63069Eric Laurent bool enable_voicerx; 2162dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2174b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava int snd_card; 218b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent void *platform; 2190499d4fc40cafb9fbb0e8eace1657cfaf79c5699Eric Laurent void *extspk; 220c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent 221c4aef75c2c5a0d49cac941d22235ac0b9e435ca0Eric Laurent void *visualizer_lib; 22241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*visualizer_start_output)(audio_io_handle_t, int); 22341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*visualizer_stop_output)(audio_io_handle_t, int); 22431aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung 22531aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung /* The pcm_params use_case_table is loaded by adev_verify_devices() upon 22631aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * calling adev_open(). 22731aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * 22831aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * If an entry is not NULL, it can be used to determine if extended precision 22931aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung * or other capabilities are present for the device corresponding to that usecase. 23031aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung */ 23131aca91506be3beb30ae598cf22f6f940c2aac0bAndy Hung struct pcm_params *use_case_table[AUDIO_USECASE_MAX]; 23241f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George void *offload_effects_lib; 23341f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*offload_effects_start_output)(audio_io_handle_t, int); 23441f86651e362abc62d9d03f5c612c986bf15298fHaynes Mathew George int (*offload_effects_stop_output)(audio_io_handle_t, int); 2352dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2362dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2378e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamandaint select_devices(struct audio_device *adev, 2388e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda audio_usecase_t uc_id); 2394b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava 2408e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamandaint disable_audio_route(struct audio_device *adev, 2418e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda struct audio_usecase *usecase); 2424b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava 2438e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamandaint disable_snd_device(struct audio_device *adev, 2448e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda snd_device_t snd_device); 2454b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava 2468e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamandaint enable_snd_device(struct audio_device *adev, 2478e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda snd_device_t snd_device); 2484b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava 2498e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamandaint enable_audio_route(struct audio_device *adev, 2508e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda struct audio_usecase *usecase); 2514b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava 2528e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamandastruct audio_usecase *get_usecase_from_list(struct audio_device *adev, 2538e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda audio_usecase_t uc_id); 2548e6e98fc5af6d6f79bc71eb37df470380ae82fadRavi Kumar Alamanda 2554b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava#define LITERAL_TO_STRING(x) #x 2564b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava#define CHECK(condition) LOG_ALWAYS_FATAL_IF(!(condition), "%s",\ 2574b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava __FILE__ ":" LITERAL_TO_STRING(__LINE__)\ 2584b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava " ASSERT_FATAL(" #condition ") failed.") 2594b89e37ad290ef955abf8ac1d151728303311345Vineeta Srivastava 260150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent/* 261150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent * NOTE: when multiple mutexes have to be acquired, always take the 262150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent * stream_in or stream_out mutex first, followed by the audio_device mutex. 263150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent */ 264150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent 265b23d5286490ad2dc0edf919d52428fa02dc2b2dcEric Laurent#endif // QCOM_AUDIO_HW_H 266