audio_hw.h revision 150dbfe8b5b3ab634604d2a309d4ef9fb7602f4a
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 172dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <hardware/audio.h> 182dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 192dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <tinyalsa/asoundlib.h> 202dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 212dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#include <audio_route/audio_route.h> 222dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 232dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ACDB_DEV_TYPE_OUT 1 242dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ACDB_DEV_TYPE_IN 2 252dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2672c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda#define DUALMIC_CONFIG_NONE 0 /* Target does not contain 2 mics */ 2772c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda#define DUALMIC_CONFIG_ENDFIRE 1 2872c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda#define DUALMIC_CONFIG_BROADSIDE 2 2972c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda 302dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* Sound devices specific to the platform 312dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * The DEVICE_OUT_* and DEVICE_IN_* should be mapped to these sound 322dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * devices to enable corresponding mixer paths 332dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 342dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef enum { 3575d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda SND_DEVICE_NONE = 0, 3675d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda 3775d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda /* Playback devices */ 3875d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda SND_DEVICE_MIN, 3975d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda SND_DEVICE_OUT_BEGIN = SND_DEVICE_MIN, 402dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_HANDSET = SND_DEVICE_OUT_BEGIN, 412dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_SPEAKER, 422dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_HEADPHONES, 432dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES, 442dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_VOICE_SPEAKER, 452dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_VOICE_HEADPHONES, 4675d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda SND_DEVICE_OUT_HDMI, 472dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_SPEAKER_AND_HDMI, 482dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_BT_SCO, 4972c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_OUT_VOICE_HANDSET_TMUS, 50f99670408844a07cdfabf9a01078ed7ef4c71bbfRavi Kumar Alamanda SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES, 51f99670408844a07cdfabf9a01078ed7ef4c71bbfRavi Kumar Alamanda SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES, 52f99670408844a07cdfabf9a01078ed7ef4c71bbfRavi Kumar Alamanda SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET, 532dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_OUT_END, 542dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 5575d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda /* 5675d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda * Note: IN_BEGIN should be same as OUT_END because total number of devices 5775d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda * SND_DEVICES_MAX should not exceed MAX_RX + MAX_TX devices. 582dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 5975d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda /* Capture devices */ 602dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_BEGIN = SND_DEVICE_OUT_END, 612dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_HANDSET_MIC = SND_DEVICE_IN_BEGIN, 622dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_SPEAKER_MIC, 632dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_HEADSET_MIC, 642dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_SPEAKER_MIC, 652dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_HEADSET_MIC, 662dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_HDMI_MIC, 6775d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda SND_DEVICE_IN_BT_SCO_MIC, 682dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_CAMCORDER_MIC, 6972c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_DMIC_EF, 7072c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_DMIC_BS, 7172c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_DMIC_EF_TMUS, 7272c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF, 7372c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS, 74f99670408844a07cdfabf9a01078ed7ef4c71bbfRavi Kumar Alamanda SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC, 75f99670408844a07cdfabf9a01078ed7ef4c71bbfRavi Kumar Alamanda SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC, 76f99670408844a07cdfabf9a01078ed7ef4c71bbfRavi Kumar Alamanda SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC, 772dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_REC_MIC, 7872c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_REC_DMIC_EF, 7972c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda SND_DEVICE_IN_VOICE_REC_DMIC_BS, 80c8400637beb896d2f5d7ae980682cd2d072a9da3Eric Laurent SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE, 81c8400637beb896d2f5d7ae980682cd2d072a9da3Eric Laurent SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE, 822dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda SND_DEVICE_IN_END, 832dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 8475d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda SND_DEVICE_MAX = SND_DEVICE_IN_END, 8575d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamanda 862dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda} snd_device_t; 872dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 882dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 892dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* These are the supported use cases by the hardware. 902dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Each usecase is mapped to a specific PCM device. 912dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * Refer to pcm_device_table[]. 922dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 932dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef enum { 942dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_INVALID = -1, 952dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Playback usecases */ 962dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_DEEP_BUFFER = 0, 972dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_LOW_LATENCY, 982dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_PLAYBACK_MULTI_CH, 992dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1002dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Capture usecases */ 1012dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_RECORD, 1022dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_AUDIO_RECORD_LOW_LATENCY, 1032dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1042dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda USECASE_VOICE_CALL, 1052dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1062dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda AUDIO_USECASE_MAX 1072dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda} audio_usecase_t; 1082dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1092dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 1102dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1112dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define SOUND_CARD 0 1122dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1132dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define DEFAULT_OUTPUT_SAMPLING_RATE 48000 1142dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1152dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda/* 1162dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * tinyAlsa library interprets period size as number of frames 1172dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * one frame = channel_count * sizeof (pcm sample) 1182dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * so if format = 16-bit PCM and channels = Stereo, frame size = 2 ch * 2 = 4 bytes 1192dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * DEEP_BUFFER_OUTPUT_PERIOD_SIZE = 1024 means 1024 * 4 = 4096 bytes 1202dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * We should take care of returning proper size when AudioFlinger queries for 1212dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda * the buffer size of an input/output stream 1222dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda */ 1232dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define DEEP_BUFFER_OUTPUT_PERIOD_SIZE 1024 1242dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define DEEP_BUFFER_OUTPUT_PERIOD_COUNT 8 1252dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1262dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define LOW_LATENCY_OUTPUT_PERIOD_SIZE 256 1272dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define LOW_LATENCY_OUTPUT_PERIOD_COUNT 2 1282dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1292dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define HDMI_MULTI_PERIOD_SIZE 336 1302dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define HDMI_MULTI_PERIOD_COUNT 8 1312dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define HDMI_MULTI_DEFAULT_CHANNEL_COUNT 6 1322dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define HDMI_MULTI_PERIOD_BYTES (HDMI_MULTI_PERIOD_SIZE * HDMI_MULTI_DEFAULT_CHANNEL_COUNT * 2) 1332dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1342dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define AUDIO_CAPTURE_PERIOD_SIZE 320 1352dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define AUDIO_CAPTURE_PERIOD_COUNT 2 1362dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1372dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda#define MAX_SUPPORTED_CHANNEL_MASKS 2 1382dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1392dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct stream_out { 1402dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_stream_out stream; 141150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 1422dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm_config config; 1432dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *pcm; 1442dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int standby; 1452dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int pcm_device_id; 1462dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t channel_mask; 1472dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_devices_t devices; 1482dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_output_flags_t flags; 1492dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t usecase; 1502dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Array of supported channel mask configurations. +1 so that the last entry is always 0 */ 1512dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t supported_channel_masks[MAX_SUPPORTED_CHANNEL_MASKS + 1]; 1522dfba2b9264a43951889e591260162a67894c0d0Ravi 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; 1642dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int device; 1652dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_channel_mask_t channel_mask; 1662dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t usecase; 1672dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1682dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_device *dev; 1692dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1702dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1712dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef enum { 1722dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda PCM_PLAYBACK, 1732dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda PCM_CAPTURE, 1742dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda VOICE_CALL 1752dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda} usecase_type_t; 1762dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1772dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda// To store active use cases. 1782dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct audio_usecase { 1792dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_usecase_t id; 1802dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda usecase_type_t type; 1812dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_devices_t devices; 1822dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_usecase *next; 1832dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 1842dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1852dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef void (*acdb_deallocate_t)(); 1862dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*acdb_init_t)(); 18775d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamandatypedef void (*acdb_send_audio_cal_t)(int, int); 18875d924d06336949440090c214af199fd05d5bb06Ravi Kumar Alamandatypedef void (*acdb_send_voice_cal_t)(int, int); 1892dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1902dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_client_init_t)(); 1912dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_client_deinit_t)(); 1922dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_disable_device_t)(); 1932dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_enable_device_t)(int, int, uint32_t); 1942dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_volume_t)(int); 1952dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_mic_mute_t)(int); 1962dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_start_voice_t)(); 1972dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandatypedef int (*csd_stop_voice_t)(); 1982dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 1992dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct audio_device { 2002dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_hw_device device; 201150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent pthread_mutex_t lock; /* see note below on mutex acquisition order */ 2022dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct mixer *mixer; 2032dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_mode_t mode; 2042dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda audio_devices_t out_device; 205c8400637beb896d2f5d7ae980682cd2d072a9da3Eric Laurent struct stream_in *active_input; 2062dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int in_call; 2072dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda float voice_volume; 2082dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool mic_mute; 2092dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int tty_mode; 2102dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool bluetooth_nrec; 2112dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool screen_off; 2122dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *voice_call_rx; 2132dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct pcm *voice_call_tx; 2142dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda snd_device_t cur_out_snd_device; 2152dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda snd_device_t cur_in_snd_device; 2162dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool out_snd_device_active; 2172dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda bool in_snd_device_active; 2182dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_usecase usecase_list; 2192dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda struct audio_route *audio_route; 2202dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda int acdb_settings; 2212dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 22272c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda bool mic_type_analog; 22372c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda bool fluence_in_voice_call; 22472c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda bool fluence_in_voice_rec; 22572c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda int dualmic_config; 22672c411f8ef451934ababc209eef482b9cc7005a8Ravi Kumar Alamanda 2272dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* Audio calibration related functions */ 2282dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda void *acdb_handle; 2292dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda acdb_init_t acdb_init; 2302dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda acdb_deallocate_t acdb_deallocate; 2312dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda acdb_send_audio_cal_t acdb_send_audio_cal; 2322dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda acdb_send_voice_cal_t acdb_send_voice_cal; 2332dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2342dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda /* CSD Client related functions for voice call */ 2352dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda void *csd_client; 2362dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_client_init_t csd_client_init; 2372dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_client_deinit_t csd_client_deinit; 2382dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_disable_device_t csd_disable_device; 2392dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_enable_device_t csd_enable_device; 2402dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_volume_t csd_volume; 2412dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_mic_mute_t csd_mic_mute; 2422dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_start_voice_t csd_start_voice; 2432dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda csd_stop_voice_t csd_stop_voice; 2442dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2452dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 246150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent/* 247150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent * NOTE: when multiple mutexes have to be acquired, always take the 248150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent * stream_in or stream_out mutex first, followed by the audio_device mutex. 249150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent */ 250150dbfe8b5b3ab634604d2a309d4ef9fb7602f4aEric Laurent 2512dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct pcm_config pcm_config_deep_buffer = { 2522dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .channels = 2, 2532dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .rate = DEFAULT_OUTPUT_SAMPLING_RATE, 2542dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_size = DEEP_BUFFER_OUTPUT_PERIOD_SIZE, 2552dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_count = DEEP_BUFFER_OUTPUT_PERIOD_COUNT, 2562dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .format = PCM_FORMAT_S16_LE, 2572dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .start_threshold = DEEP_BUFFER_OUTPUT_PERIOD_SIZE / 4, 2582dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .avail_min = DEEP_BUFFER_OUTPUT_PERIOD_SIZE / 4, 2592dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2602dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2612dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct pcm_config pcm_config_low_latency = { 2622dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .channels = 2, 2632dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .rate = DEFAULT_OUTPUT_SAMPLING_RATE, 2642dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_size = LOW_LATENCY_OUTPUT_PERIOD_SIZE, 2652dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_count = LOW_LATENCY_OUTPUT_PERIOD_COUNT, 2662dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .format = PCM_FORMAT_S16_LE, 2672dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .start_threshold = LOW_LATENCY_OUTPUT_PERIOD_SIZE / 4, 2682dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .avail_min = LOW_LATENCY_OUTPUT_PERIOD_SIZE / 4, 2692dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2702dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2712dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct pcm_config pcm_config_hdmi_multi = { 2722dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .channels = HDMI_MULTI_DEFAULT_CHANNEL_COUNT, /* changed when the stream is opened */ 2732dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .rate = DEFAULT_OUTPUT_SAMPLING_RATE, /* changed when the stream is opened */ 2742dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_size = HDMI_MULTI_PERIOD_SIZE, 2752dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_count = HDMI_MULTI_PERIOD_COUNT, 2762dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .format = PCM_FORMAT_S16_LE, 2772dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .start_threshold = 0, 2782dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .avail_min = 0, 2792dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2802dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2812dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct pcm_config pcm_config_audio_capture = { 2822dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .channels = 2, 2832dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_size = AUDIO_CAPTURE_PERIOD_SIZE, 2842dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_count = AUDIO_CAPTURE_PERIOD_COUNT, 2852dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .format = PCM_FORMAT_S16_LE, 2862dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2872dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 2882dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamandastruct pcm_config pcm_config_voice_call = { 2892dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .channels = 1, 2902dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .rate = 8000, 2912dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_size = 160, 2922dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .period_count = 2, 2932dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda .format = PCM_FORMAT_S16_LE, 2942dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda}; 2952dfba2b9264a43951889e591260162a67894c0d0Ravi Kumar Alamanda 296