1582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/*
26ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar * Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
3582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * Not a contribution.
4582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti *
5582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * Copyright (C) 2013 The Android Open Source Project
6582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti *
7582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * Licensed under the Apache License, Version 2.0 (the "License");
8582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * you may not use this file except in compliance with the License.
9582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * You may obtain a copy of the License at
10582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti *
11582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti *      http://www.apache.org/licenses/LICENSE-2.0
12582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti *
13582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * Unless required by applicable law or agreed to in writing, software
14582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * distributed under the License is distributed on an "AS IS" BASIS,
15582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * See the License for the specific language governing permissions and
17582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * limitations under the License.
18582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti */
19582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
20582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define LOG_TAG "msm8960_platform"
21582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/*#define LOG_NDEBUG 0*/
22582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define LOG_NDDEBUG 0
23582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
24582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#include <stdlib.h>
25582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#include <dlfcn.h>
26582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#include <cutils/log.h>
27582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#include <cutils/properties.h>
28582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#include <audio_hw.h>
29582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#include <platform_api.h>
30582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#include "platform.h"
31582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
32582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define LIB_ACDB_LOADER "libacdbloader.so"
33582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define LIB_CSD_CLIENT "libcsd-client.so"
34582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
35582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/*
36582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * This is the sysfs path for the HDMI audio data block
37582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti */
38582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define AUDIO_DATA_BLOCK_PATH "/sys/class/graphics/fb1/audio_data_block"
39582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define MIXER_XML_PATH "/system/etc/mixer_paths.xml"
40582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
41582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/*
42582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * This file will have a maximum of 38 bytes:
43582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti *
44582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * 4 bytes: number of audio blocks
45582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * 4 bytes: total length of Short Audio Descriptor (SAD) blocks
46582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti * Maximum 10 * 3 bytes: SAD blocks
47582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti */
48582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define MAX_SAD_BLOCKS      10
49582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define SAD_BLOCK_SIZE      3
50582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
51582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/* EDID format ID for LPCM audio */
52582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define EDID_FORMAT_LPCM    1
53582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
54582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletistruct audio_block_header
55582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
56582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int reserved;
57582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int length;
58582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti};
59582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
60582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
61582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef void (*acdb_deallocate_t)();
62582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int  (*acdb_init_t)();
63582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef void (*acdb_send_audio_cal_t)(int, int);
64582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef void (*acdb_send_voice_cal_t)(int, int);
65582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
66582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_client_init_t)();
67582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_client_deinit_t)();
68582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_disable_device_t)();
69582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_enable_device_t)(int, int, uint32_t);
70582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_volume_t)(int);
71582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_mic_mute_t)(int);
72582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_start_voice_t)();
73582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletitypedef int (*csd_stop_voice_t)();
74582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
75582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
76582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletistruct platform_data {
77582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct audio_device *adev;
78582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    bool fluence_in_spkr_mode;
79582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    bool fluence_in_voice_call;
80582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    bool fluence_in_voice_rec;
81582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int  fluence_type;
82582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int  dualmic_config;
83582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    bool ec_ref_enabled;
84582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
85582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* Audio calibration related functions */
86582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    void *acdb_handle;
87582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    acdb_init_t acdb_init;
88582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    acdb_deallocate_t acdb_deallocate;
89582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    acdb_send_audio_cal_t acdb_send_audio_cal;
90582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    acdb_send_voice_cal_t acdb_send_voice_cal;
91582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
92582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* CSD Client related functions for voice call */
93582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    void *csd_client;
94582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_client_init_t csd_client_init;
95582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_client_deinit_t csd_client_deinit;
96582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_disable_device_t csd_disable_device;
97582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_enable_device_t csd_enable_device;
98582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_volume_t csd_volume;
99582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_mic_mute_t csd_mic_mute;
100582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_start_voice_t csd_start_voice;
101582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    csd_stop_voice_t csd_stop_voice;
102582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti};
103582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
104582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletistatic const int pcm_device_table[AUDIO_USECASE_MAX][2] = {
105582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [USECASE_AUDIO_PLAYBACK_DEEP_BUFFER] = {0, 0},
106582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [USECASE_AUDIO_PLAYBACK_LOW_LATENCY] = {14, 14},
107582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [USECASE_AUDIO_PLAYBACK_MULTI_CH] = {1, 1},
108582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [USECASE_AUDIO_RECORD] = {0, 0},
109582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [USECASE_AUDIO_RECORD_LOW_LATENCY] = {14, 14},
110582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [USECASE_VOICE_CALL] = {12, 12},
111582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti};
112582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
113582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/* Array to store sound devices */
114582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletistatic const char * const device_table[SND_DEVICE_MAX] = {
115582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_NONE] = "none",
116582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* Playback sound devices */
117582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_HANDSET] = "handset",
118582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER] = "speaker",
119582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_REVERSE] = "speaker-reverse",
120582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_HEADPHONES] = "headphones",
121582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES] = "speaker-and-headphones",
122582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_SPEAKER] = "voice-speaker",
123582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_HEADPHONES] = "voice-headphones",
124582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_HDMI] = "hdmi",
125582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_AND_HDMI] = "speaker-and-hdmi",
126582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_BT_SCO] = "bt-sco-headset",
127582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_BT_SCO_WB] = "bt-sco-headset-wb",
128582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES] = "voice-tty-full-headphones",
129582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES] = "voice-tty-vco-headphones",
130582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET] = "voice-tty-hco-handset",
131582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_USB_HEADSET] = "usb-headphones",
132582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = "speaker-and-usb-headphones",
133582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
134582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* Capture sound devices */
135582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
136582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_SPEAKER_MIC] = "speaker-mic",
137582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HEADSET_MIC] = "headset-mic",
138582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HANDSET_MIC_AEC] = "handset-mic",
139582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_SPEAKER_MIC_AEC] = "voice-speaker-mic",
140582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HEADSET_MIC_AEC] = "headset-mic",
141582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_SPEAKER_MIC] = "voice-speaker-mic",
142582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_HEADSET_MIC] = "voice-headset-mic",
143582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic",
144582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic",
145582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_BT_SCO_MIC_WB] = "bt-sco-mic-wb",
146582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic",
147582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_DMIC] = "voice-dmic-ef",
148582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = "voice-speaker-dmic-ef",
149582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic",
150582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic",
151582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic",
152582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic",
153582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_REC_DMIC] = "voice-rec-dmic-ef",
154582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = "voice-rec-dmic-ef-fluence",
155582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_USB_HEADSET_MIC] = "usb-headset-mic",
156582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti};
157582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
158582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/* ACDB IDs (audio DSP path configuration IDs) for each sound device */
159582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletistatic const int acdb_device_table[SND_DEVICE_MAX] = {
160582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_NONE] = -1,
161582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_HANDSET] = 7,
162582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER] = 14,
163582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_REVERSE] = 14,
164582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_HEADPHONES] = 10,
165582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES] = 10,
166582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_SPEAKER] = 14,
167582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_HEADPHONES] = 10,
168582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_HDMI] = 18,
169582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_AND_HDMI] = 14,
170582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_BT_SCO] = 22,
171582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_BT_SCO_WB] = 39,
172582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES] = 17,
173582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES] = 17,
174582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET] = 37,
175582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_USB_HEADSET] = 45,
176582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_OUT_SPEAKER_AND_USB_HEADSET] = 14,
177582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
178582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HANDSET_MIC] = 4,
179582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_SPEAKER_MIC] = 4,
180582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HEADSET_MIC] = 8,
181582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HANDSET_MIC_AEC] = 40,
182582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_SPEAKER_MIC_AEC] = 42,
183582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HEADSET_MIC_AEC] = 47,
184582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_SPEAKER_MIC] = 11,
185582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_HEADSET_MIC] = 8,
186582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_HDMI_MIC] = 4,
187582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_BT_SCO_MIC] = 21,
188582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_BT_SCO_MIC_WB] = 38,
189582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_CAMCORDER_MIC] = 61,
190582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_DMIC] = 6,
191582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 13,
192582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16,
193582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36,
194582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16,
195582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_REC_MIC] = 62,
196582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_USB_HEADSET_MIC] = 44,
197582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* TODO: Update with proper acdb ids */
198582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_REC_DMIC] = 62,
199582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = 6,
200582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti};
201582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
202582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define DEEP_BUFFER_PLATFORM_DELAY (29*1000LL)
203582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti#define LOW_LATENCY_PLATFORM_DELAY (13*1000LL)
204582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
205582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletivoid platform_set_echo_reference(void *platform, bool enable)
206582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
207582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
208582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct audio_device *adev = my_data->adev;
209582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
210582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (enable) {
211582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->ec_ref_enabled = enable;
212582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        audio_route_apply_and_update_path(adev->audio_route, "echo-reference");
213582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else {
214582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->ec_ref_enabled) {
215582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            audio_route_reset_and_update_path(adev->audio_route, "echo-reference");
216582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            my_data->ec_ref_enabled = enable;
217582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
218582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGV("EC Reference is already disabled: %d", my_data->ec_ref_enabled);
219582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
220582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
221582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
222582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGV("Setting EC Reference: %d", enable);
223582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
224582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
225582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletivoid *platform_init(struct audio_device *adev)
226582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
227582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    char platform[PROPERTY_VALUE_MAX];
228582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    char baseband[PROPERTY_VALUE_MAX];
229582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    char value[PROPERTY_VALUE_MAX];
230582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data;
231582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    const char *snd_card_name;
232582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
233582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    adev->mixer = mixer_open(MIXER_CARD);
234582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
235582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (!adev->mixer) {
236582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("Unable to open the mixer, aborting.");
237582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return NULL;
238582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
239582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
240582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    adev->audio_route = audio_route_init(MIXER_CARD, MIXER_XML_PATH);
241582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (!adev->audio_route) {
242582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("%s: Failed to init audio route controls, aborting.", __func__);
243f219ba05ab1e030bc3625914752ef76df0faefcdMingming Yin        mixer_close(adev->mixer);
244582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return NULL;
245582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
246582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
247582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    my_data = calloc(1, sizeof(struct platform_data));
248582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
249582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    snd_card_name = mixer_get_name(adev->mixer);
250582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
251582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    my_data->adev = adev;
252582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    my_data->fluence_in_spkr_mode = false;
253582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    my_data->fluence_in_voice_call = false;
254582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    my_data->fluence_in_voice_rec = false;
255582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    my_data->fluence_type = FLUENCE_NONE;
256582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
257582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    property_get("ro.qc.sdk.audio.fluencetype", value, "");
258582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (!strncmp("fluencepro", value, sizeof("fluencepro"))) {
259582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->fluence_type = FLUENCE_QUAD_MIC;
260582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (!strncmp("fluence", value, sizeof("fluence"))) {
261582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->fluence_type = FLUENCE_DUAL_MIC;
262582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else {
263582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->fluence_type = FLUENCE_NONE;
264582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
265582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
266582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->fluence_type != FLUENCE_NONE) {
267582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        property_get("persist.audio.fluence.voicecall",value,"");
268582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (!strncmp("true", value, sizeof("true"))) {
269582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            my_data->fluence_in_voice_call = true;
270582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
271582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
272582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        property_get("persist.audio.fluence.voicerec",value,"");
273582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (!strncmp("true", value, sizeof("true"))) {
274582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            my_data->fluence_in_voice_rec = true;
275582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
276582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
277582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        property_get("persist.audio.fluence.speaker",value,"");
278582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (!strncmp("true", value, sizeof("true"))) {
279582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            my_data->fluence_in_spkr_mode = true;
280582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
281582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
282582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
283582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    my_data->acdb_handle = dlopen(LIB_ACDB_LOADER, RTLD_NOW);
284582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->acdb_handle == NULL) {
285582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("%s: DLOPEN failed for %s", __func__, LIB_ACDB_LOADER);
286582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else {
287582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGV("%s: DLOPEN successful for %s", __func__, LIB_ACDB_LOADER);
288582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->acdb_deallocate = (acdb_deallocate_t)dlsym(my_data->acdb_handle,
289582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "acdb_loader_deallocate_ACDB");
290582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->acdb_send_audio_cal = (acdb_send_audio_cal_t)dlsym(my_data->acdb_handle,
291582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "acdb_loader_send_audio_cal");
292582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (!my_data->acdb_send_audio_cal)
293582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGW("%s: Could not find the symbol acdb_send_audio_cal from %s",
294582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                  __func__, LIB_ACDB_LOADER);
295582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->acdb_send_voice_cal = (acdb_send_voice_cal_t)dlsym(my_data->acdb_handle,
296582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "acdb_loader_send_voice_cal");
297582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->acdb_init = (acdb_init_t)dlsym(my_data->acdb_handle,
298582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "acdb_loader_init_ACDB");
299582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->acdb_init == NULL)
300582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: dlsym error %s for acdb_loader_init_ACDB", __func__, dlerror());
301582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        else
302582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            my_data->acdb_init();
303582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
304582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
305582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* If platform is Fusion3, load CSD Client specific symbols
306582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti     * Voice call is handled by MDM and apps processor talks to
307582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti     * MDM through CSD Client
308582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti     */
309582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    property_get("ro.board.platform", platform, "");
310582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    property_get("ro.baseband", baseband, "");
311582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (!strcmp("msm8960", platform) && !strcmp("mdm", baseband)) {
312582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_client = dlopen(LIB_CSD_CLIENT, RTLD_NOW);
313582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_client == NULL)
314582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: DLOPEN failed for %s", __func__, LIB_CSD_CLIENT);
315582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
316582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
317582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->csd_client) {
318582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGV("%s: DLOPEN successful for %s", __func__, LIB_CSD_CLIENT);
319582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_client_deinit = (csd_client_deinit_t)dlsym(my_data->csd_client,
320582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_deinit");
321582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_disable_device = (csd_disable_device_t)dlsym(my_data->csd_client,
322582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_disable_device");
323582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_enable_device = (csd_enable_device_t)dlsym(my_data->csd_client,
324582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_enable_device");
325582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_start_voice = (csd_start_voice_t)dlsym(my_data->csd_client,
326582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_start_voice");
327582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_stop_voice = (csd_stop_voice_t)dlsym(my_data->csd_client,
328582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_stop_voice");
329582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_volume = (csd_volume_t)dlsym(my_data->csd_client,
330582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_volume");
331582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_mic_mute = (csd_mic_mute_t)dlsym(my_data->csd_client,
332582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_mic_mute");
333582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->csd_client_init = (csd_client_init_t)dlsym(my_data->csd_client,
334582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    "csd_client_init");
335582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
336582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_client_init == NULL) {
337582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: dlsym error %s for csd_client_init", __func__, dlerror());
338582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
339582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            my_data->csd_client_init();
340582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
341582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
342582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
343582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return my_data;
344582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
345582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
346582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletivoid platform_deinit(void *platform)
347582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
348582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
349582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
350582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    free(platform);
351582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
352582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
353582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleticonst char *platform_get_snd_device_name(snd_device_t snd_device)
354582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
355582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX)
356582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return device_table[snd_device];
357582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else
358582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return "";
359582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
360582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
361582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_snd_device_name_extn(void *platform, snd_device_t snd_device,
362582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                      char *device_name)
363582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
364582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
365582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
366582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (snd_device >= SND_DEVICE_MIN && snd_device < SND_DEVICE_MAX) {
367582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcpy(device_name, device_table[snd_device], DEVICE_NAME_MAX_SIZE);
368582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else {
369582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcpy(device_name, "", DEVICE_NAME_MAX_SIZE);
370582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return -EINVAL;
371582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
372582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
373582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return 0;
374582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
375582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
376582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletivoid platform_add_backend_name(char *mixer_path, snd_device_t snd_device)
377582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
378582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (snd_device == SND_DEVICE_IN_BT_SCO_MIC)
379582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcat(mixer_path, " bt-sco", MIXER_PATH_MAX_LENGTH);
380582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else if (snd_device == SND_DEVICE_IN_BT_SCO_MIC_WB)
381582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcat(mixer_path, " bt-sco-wb", MIXER_PATH_MAX_LENGTH);
382582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else if(snd_device == SND_DEVICE_OUT_BT_SCO)
383582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcat(mixer_path, " bt-sco", MIXER_PATH_MAX_LENGTH);
384582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else if(snd_device == SND_DEVICE_OUT_BT_SCO_WB)
385582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcat(mixer_path, " bt-sco-wb", MIXER_PATH_MAX_LENGTH);
386582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else if (snd_device == SND_DEVICE_OUT_HDMI)
387582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcat(mixer_path, " hdmi", MIXER_PATH_MAX_LENGTH);
388582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else if (snd_device == SND_DEVICE_OUT_SPEAKER_AND_HDMI)
389582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        strlcat(mixer_path, " speaker-and-hdmi", MIXER_PATH_MAX_LENGTH);
390582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
391582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
392582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_pcm_device_id(audio_usecase_t usecase, int device_type)
393582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
394582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int device_id;
395582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (device_type == PCM_PLAYBACK)
396582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        device_id = pcm_device_table[usecase][0];
397582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else
398582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        device_id = pcm_device_table[usecase][1];
399582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return device_id;
400582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
401582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
402582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_snd_device_index(char *snd_device_index_name __unused)
403582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
404582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENODEV;
405582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
406582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
407582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_snd_device_acdb_id(snd_device_t snd_device __unused,
408582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                    unsigned int acdb_id __unused)
409582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
410582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENODEV;
411582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
412582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
413582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiuint32_t platform_get_compress_offload_buffer_size(audio_offload_info_t* info __unused)
414582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
415582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
416582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
417582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
418582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
419582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_snd_device_acdb_id(snd_device_t snd_device __unused)
420582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
421582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
422582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
423582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
424582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
4256ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekharint platform_set_snd_device_bit_width(snd_device_t snd_device, unsigned int bit_width)
4266ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar{
4276ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar    ALOGE("%s: Not implemented", __func__);
4286ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar    return -ENOSYS;
4296ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar}
4306ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar
4316ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekharint platform_get_snd_device_bit_width(snd_device_t snd_device)
4326ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar{
4336ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar    ALOGE("%s: Not implemented", __func__);
4346ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar    return -ENOSYS;
4356ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar}
4366ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar
437582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_switch_voice_call_enable_device_config(void *platform __unused,
438582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    snd_device_t out_snd_device __unused,
439582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    snd_device_t in_snd_device __unused)
440582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
441582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
442582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
443582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
444582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
445582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_switch_voice_call_usecase_route_post(void *platform __unused,
446582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                  snd_device_t out_snd_device __unused,
447582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                  snd_device_t in_snd_device __unused)
448582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
449582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
450582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
451582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
452582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
453582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_incall_recording_session_id(void *platform __unused,
454582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                             uint32_t session_id __unused,
455582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                             int rec_mode __unused)
456582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
457582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
458582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
459582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
460582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
461582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_stop_incall_recording_usecase(void *platform __unused)
462582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
463582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
464582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
465582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
466582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
467582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_sample_rate(void *platform __unused, uint32_t *rate __unused)
468582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
469582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
470582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
471582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
472582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
473582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_default_app_type(void *platform __unused)
474582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
475582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
476582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
477582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
478582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
479582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_send_audio_calibration(void *platform, struct audio_usecase *usecase,
480582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                    int app_type __unused, int sample_rate __unused)
481582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
482582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
483582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int acdb_dev_id, acdb_dev_type;
484582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct audio_device *adev = my_data->adev;
485582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int snd_device = SND_DEVICE_OUT_SPEAKER;
486582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
487582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (usecase->type == PCM_PLAYBACK)
488582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        snd_device = platform_get_output_snd_device(adev->platform,
489582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                            usecase->stream.out->devices);
490582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    else if ((usecase->type == PCM_HFP_CALL) || (usecase->type == PCM_CAPTURE))
491582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        snd_device = platform_get_input_snd_device(adev->platform,
492582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                            adev->primary_output->devices);
493582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    acdb_dev_id = acdb_device_table[snd_device];
494582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (acdb_dev_id < 0) {
495582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("%s: Could not find acdb id for device(%d)",
496582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti              __func__, snd_device);
497582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return -EINVAL;
498582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
499582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->acdb_send_audio_cal) {
500582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ("%s: sending audio calibration for snd_device(%d) acdb_id(%d)",
501582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti              __func__, snd_device, acdb_dev_id);
502582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (snd_device >= SND_DEVICE_OUT_BEGIN &&
503582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device < SND_DEVICE_OUT_END)
504582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            acdb_dev_type = ACDB_DEV_TYPE_OUT;
505582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        else
506582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            acdb_dev_type = ACDB_DEV_TYPE_IN;
507582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        my_data->acdb_send_audio_cal(acdb_dev_id, acdb_dev_type);
508582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
509582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return 0;
510582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
511582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
512582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_switch_voice_call_device_pre(void *platform)
513582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
514582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
515582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int ret = 0;
516582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
517582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->csd_client != NULL) {
518582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        /* This must be called before disabling the mixer controls on APQ side */
519582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_disable_device == NULL) {
520582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: dlsym error for csd_disable_device", __func__);
521582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
522582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ret = my_data->csd_disable_device();
523582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (ret < 0) {
524582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ALOGE("%s: csd_client_disable_device, failed, error %d",
525582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                      __func__, ret);
526582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
527582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
528582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
529582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return ret;
530582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
531582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
532582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_switch_voice_call_device_post(void *platform,
533582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                           snd_device_t out_snd_device,
534582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                           snd_device_t in_snd_device)
535582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
536582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
537582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int acdb_rx_id, acdb_tx_id;
538582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int ret = 0;
539582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
540582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->csd_client) {
541582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_enable_device == NULL) {
542582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: dlsym error for csd_enable_device",
543582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                  __func__);
544582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
545582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            acdb_rx_id = acdb_device_table[out_snd_device];
546582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            acdb_tx_id = acdb_device_table[in_snd_device];
547582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
548582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (acdb_rx_id > 0 || acdb_tx_id > 0) {
549582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ret = my_data->csd_enable_device(acdb_rx_id, acdb_tx_id,
550582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                                    my_data->adev->acdb_settings);
551582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                if (ret < 0) {
552582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    ALOGE("%s: csd_enable_device, failed, error %d",
553582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                          __func__, ret);
554582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                }
555582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            } else {
556582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ALOGE("%s: Incorrect ACDB IDs (rx: %d tx: %d)", __func__,
557582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                      acdb_rx_id, acdb_tx_id);
558582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
559582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
560582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
561582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
562582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return ret;
563582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
564582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
565582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_start_voice_call(void *platform, uint32_t vsid __unused)
566582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
567582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
568582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int ret = 0;
569582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
570582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->csd_client) {
571582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_start_voice == NULL) {
572582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("dlsym error for csd_client_start_voice");
573582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ret = -ENOSYS;
574582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
575582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ret = my_data->csd_start_voice();
576582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (ret < 0) {
577582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ALOGE("%s: csd_start_voice error %d\n", __func__, ret);
578582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
579582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
580582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
581582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
582582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return ret;
583582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
584582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
585582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_stop_voice_call(void *platform, uint32_t vsid __unused)
586582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
587582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
588582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int ret = 0;
589582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
590582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->csd_client) {
591582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_stop_voice == NULL) {
592582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("dlsym error for csd_stop_voice");
593582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
594582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ret = my_data->csd_stop_voice();
595582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (ret < 0) {
596582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ALOGE("%s: csd_stop_voice error %d\n", __func__, ret);
597582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
598582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
599582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
600582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
601582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return ret;
602582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
603582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
604582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_voice_volume(void *platform, int volume)
605582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
606582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
607582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int ret = 0;
608582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
609582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->csd_client) {
610582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_volume == NULL) {
611582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: dlsym error for csd_volume", __func__);
612582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
613582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ret = my_data->csd_volume(volume);
614582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (ret < 0) {
615582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ALOGE("%s: csd_volume error %d", __func__, ret);
616582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
617582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
618582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else {
619582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("%s: No CSD Client present", __func__);
620582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
621582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
622582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return ret;
623582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
624582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
625582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_mic_mute(void *platform, bool state)
626582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
627582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
628582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int ret = 0;
629582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
630582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (my_data->adev->mode == AUDIO_MODE_IN_CALL) {
631582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (my_data->csd_client) {
632582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (my_data->csd_mic_mute == NULL) {
633582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ALOGE("%s: dlsym error for csd_mic_mute", __func__);
634582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            } else {
635582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                ret = my_data->csd_mic_mute(state);
636582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                if (ret < 0) {
637582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    ALOGE("%s: csd_mic_mute error %d", __func__, ret);
638582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                }
639582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
640582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
641582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: No CSD Client present", __func__);
642582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
643582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
644582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
645582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return ret;
646582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
647582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
648582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_device_mute(void *platform __unused, bool state __unused, char *dir __unused)
649582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
650582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
651582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
652582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
653582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
654582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletisnd_device_t platform_get_output_snd_device(void *platform, audio_devices_t devices)
655582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
656582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
657582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct audio_device *adev = my_data->adev;
658582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    audio_mode_t mode = adev->mode;
659582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    snd_device_t snd_device = SND_DEVICE_NONE;
660582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
661582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGV("%s: enter: output devices(%#x)", __func__, devices);
662582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (devices == AUDIO_DEVICE_NONE ||
663582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        devices & AUDIO_DEVICE_BIT_IN) {
664582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGV("%s: Invalid output devices (%#x)", __func__, devices);
665582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        goto exit;
666582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
667582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
668582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (mode == AUDIO_MODE_IN_CALL) {
669582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (devices & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
670582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            devices & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
671582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (adev->voice.tty_mode == TTY_MODE_FULL)
672582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES;
673582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else if (adev->voice.tty_mode == TTY_MODE_VCO)
674582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES;
675582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else if (adev->voice.tty_mode == TTY_MODE_HCO)
676582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET;
677582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else
678582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_OUT_VOICE_HEADPHONES;
679582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (devices & AUDIO_DEVICE_OUT_ALL_SCO) {
680582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (adev->bt_wb_speech_enabled)
681582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_OUT_BT_SCO_WB;
682582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else
683582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_OUT_BT_SCO;
684582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
685582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_VOICE_SPEAKER;
686582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (devices & AUDIO_DEVICE_OUT_EARPIECE) {
687582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_HANDSET;
688582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
689582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (snd_device != SND_DEVICE_NONE) {
690582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            goto exit;
691582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
692582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
693582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
694582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (popcount(devices) == 2) {
695582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (devices == (AUDIO_DEVICE_OUT_WIRED_HEADPHONE |
696582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                        AUDIO_DEVICE_OUT_SPEAKER)) {
697582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES;
698582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (devices == (AUDIO_DEVICE_OUT_WIRED_HEADSET |
699582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                               AUDIO_DEVICE_OUT_SPEAKER)) {
700582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES;
701582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (devices == (AUDIO_DEVICE_OUT_AUX_DIGITAL |
702582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                               AUDIO_DEVICE_OUT_SPEAKER)) {
703582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_SPEAKER_AND_HDMI;
704582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
705582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: Invalid combo device(%#x)", __func__, devices);
706582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            goto exit;
707582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
708582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (snd_device != SND_DEVICE_NONE) {
709582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            goto exit;
710582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
711582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
712582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
713582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (popcount(devices) != 1) {
714582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("%s: Invalid output devices(%#x)", __func__, devices);
715582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        goto exit;
716582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
717582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
718582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (devices & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
719582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        devices & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
720582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        snd_device = SND_DEVICE_OUT_HEADPHONES;
721582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
722582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (adev->speaker_lr_swap)
723582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_SPEAKER_REVERSE;
724582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        else
725582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_SPEAKER;
726582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (devices & AUDIO_DEVICE_OUT_ALL_SCO) {
727582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (adev->bt_wb_speech_enabled)
728582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_BT_SCO_WB;
729582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        else
730582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_OUT_BT_SCO;
731582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
732582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        snd_device = SND_DEVICE_OUT_HDMI ;
733582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (devices & AUDIO_DEVICE_OUT_EARPIECE) {
734582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        snd_device = SND_DEVICE_OUT_HANDSET;
735582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else {
736582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("%s: Unknown device(s) %#x", __func__, devices);
737582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
738582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiexit:
739582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGV("%s: exit: snd_device(%s)", __func__, device_table[snd_device]);
740582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return snd_device;
741582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
742582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
743582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletisnd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_device)
744582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
745582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
746582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct audio_device *adev = my_data->adev;
747582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    audio_source_t  source = (adev->active_input == NULL) ?
748582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                AUDIO_SOURCE_DEFAULT : adev->active_input->source;
749582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
750582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    audio_mode_t    mode   = adev->mode;
751582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    audio_devices_t in_device = ((adev->active_input == NULL) ?
752582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                    AUDIO_DEVICE_NONE : adev->active_input->device)
753582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                & ~AUDIO_DEVICE_BIT_IN;
754582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    audio_channel_mask_t channel_mask = (adev->active_input == NULL) ?
755582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                AUDIO_CHANNEL_IN_MONO : adev->active_input->channel_mask;
756582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    snd_device_t snd_device = SND_DEVICE_NONE;
757582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
758582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGV("%s: enter: out_device(%#x) in_device(%#x)",
759582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti          __func__, out_device, in_device);
760582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (mode == AUDIO_MODE_IN_CALL) {
761582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (out_device == AUDIO_DEVICE_NONE) {
762582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: No output device set for voice call", __func__);
763582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            goto exit;
764582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
765582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (adev->voice.tty_mode != TTY_MODE_OFF) {
766582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
767582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
768582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                switch (adev->voice.tty_mode) {
769582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                case TTY_MODE_FULL:
770582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC;
771582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    break;
772582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                case TTY_MODE_VCO:
773582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC;
774582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    break;
775582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                case TTY_MODE_HCO:
776582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC;
777582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    break;
778582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                default:
779582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    ALOGE("%s: Invalid TTY mode (%#x)", __func__, adev->voice.tty_mode);
780582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                }
781582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                goto exit;
782582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
783582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
784582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (out_device & AUDIO_DEVICE_OUT_EARPIECE ||
785582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) {
786582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (my_data->fluence_type == FLUENCE_NONE ||
787582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                my_data->fluence_in_voice_call == false) {
788582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_HANDSET_MIC;
789582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            } else {
790582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_VOICE_DMIC;
791582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                adev->acdb_settings |= DMIC_FLAG;
792582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
793582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
794582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC;
795582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) {
796582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (adev->bt_wb_speech_enabled)
797582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_BT_SCO_MIC_WB;
798582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else
799582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_BT_SCO_MIC;
800582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) {
801582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (my_data->fluence_type != FLUENCE_NONE &&
802582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                my_data->fluence_in_voice_call &&
803582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                my_data->fluence_in_spkr_mode) {
804582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                if(my_data->fluence_type == FLUENCE_DUAL_MIC) {
805582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    adev->acdb_settings |= DMIC_FLAG;
806582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC;
807582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                } else {
808582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    adev->acdb_settings |= QMIC_FLAG;
809582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC;
810582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                }
811582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            } else {
812582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
813582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            }
814582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
815582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (source == AUDIO_SOURCE_CAMCORDER) {
816582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
817582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            in_device & AUDIO_DEVICE_IN_BACK_MIC) {
818582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_CAMCORDER_MIC;
819582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
820582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) {
821582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
822582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK)
823582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_VOICE_REC_DMIC;
824582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else if (my_data->fluence_in_voice_rec)
825582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE;
826582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
827582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (snd_device == SND_DEVICE_NONE)
828582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
829582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else
830582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                adev->acdb_settings |= DMIC_FLAG;
831582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
832582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
833582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (out_device & AUDIO_DEVICE_OUT_SPEAKER)
834582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            in_device = AUDIO_DEVICE_IN_BACK_MIC;
835582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (adev->active_input) {
836582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (adev->active_input->enable_aec) {
837582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
838582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_SPEAKER_MIC_AEC;
839582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                } else if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
840582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_HANDSET_MIC_AEC;
841582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
842582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                    snd_device = SND_DEVICE_IN_HEADSET_MIC_AEC;
843582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                }
844582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                platform_set_echo_reference(adev->platform, true);
845582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            } else
846582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                platform_set_echo_reference(adev->platform, false);
847582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
848582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else if (source == AUDIO_SOURCE_DEFAULT) {
849582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        goto exit;
850582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
851582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
852582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
853582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (snd_device != SND_DEVICE_NONE) {
854582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        goto exit;
855582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
856582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
857582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (in_device != AUDIO_DEVICE_NONE &&
858582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            !(in_device & AUDIO_DEVICE_IN_VOICE_CALL) &&
859582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            !(in_device & AUDIO_DEVICE_IN_COMMUNICATION)) {
860582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
861582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HANDSET_MIC;
862582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
863582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_SPEAKER_MIC;
864582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) {
865582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HEADSET_MIC;
866582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (in_device & AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) {
867582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (adev->bt_wb_speech_enabled)
868582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_BT_SCO_MIC_WB;
869582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else
870582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_BT_SCO_MIC;
871582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (in_device & AUDIO_DEVICE_IN_AUX_DIGITAL) {
872582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HDMI_MIC;
873582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
874582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: Unknown input device(s) %#x", __func__, in_device);
875582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGW("%s: Using default handset-mic", __func__);
876582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HANDSET_MIC;
877582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
878582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    } else {
879582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (out_device & AUDIO_DEVICE_OUT_EARPIECE) {
880582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HANDSET_MIC;
881582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
882582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HEADSET_MIC;
883582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) {
884582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_SPEAKER_MIC;
885582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) {
886582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HANDSET_MIC;
887582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET) {
888582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            if (adev->bt_wb_speech_enabled)
889582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_BT_SCO_MIC_WB;
890582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            else
891582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                snd_device = SND_DEVICE_IN_BT_SCO_MIC;
892582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else if (out_device & AUDIO_DEVICE_OUT_AUX_DIGITAL) {
893582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HDMI_MIC;
894582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        } else {
895582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGE("%s: Unknown output device(s) %#x", __func__, out_device);
896582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            ALOGW("%s: Using default handset-mic", __func__);
897582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            snd_device = SND_DEVICE_IN_HANDSET_MIC;
898582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        }
899582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
900582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiexit:
901582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGV("%s: exit: in_snd_device(%s)", __func__, device_table[snd_device]);
902582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return snd_device;
903582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
904582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
905582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_hdmi_channels(void *platform,  int channel_count)
906582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
907582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct platform_data *my_data = (struct platform_data *)platform;
908582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct audio_device *adev = my_data->adev;
909582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct mixer_ctl *ctl;
910582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    const char *channel_cnt_str = NULL;
911582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    const char *mixer_ctl_name = "HDMI_RX Channels";
912582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    switch (channel_count) {
913582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    case 8:
914582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_cnt_str = "Eight"; break;
915582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    case 7:
916582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_cnt_str = "Seven"; break;
917582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    case 6:
918582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_cnt_str = "Six"; break;
919582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    case 5:
920582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_cnt_str = "Five"; break;
921582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    case 4:
922582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_cnt_str = "Four"; break;
923582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    case 3:
924582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_cnt_str = "Three"; break;
925582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    default:
926582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_cnt_str = "Two"; break;
927582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
928582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
929582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (!ctl) {
930582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("%s: Could not get ctl for mixer cmd - %s",
931582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti              __func__, mixer_ctl_name);
932582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return -EINVAL;
933582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
934582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGV("HDMI channel count: %s", channel_cnt_str);
935582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    mixer_ctl_set_enum_by_string(ctl, channel_cnt_str);
936582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return 0;
937582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
938582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
939582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_edid_get_max_channels(void *platform __unused)
940582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
941582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    FILE *file;
942582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    struct audio_block_header header;
943582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    char block[MAX_SAD_BLOCKS * SAD_BLOCK_SIZE];
944582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    char *sad = block;
945582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int num_audio_blocks;
946582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int channel_count;
947582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int max_channels = 0;
948582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    int i;
949582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
950582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    file = fopen(AUDIO_DATA_BLOCK_PATH, "rb");
951582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (file == NULL) {
952582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        ALOGE("Unable to open '%s'", AUDIO_DATA_BLOCK_PATH);
953582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        return 0;
954582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
955582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
956582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* Read audio block header */
957582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    fread(&header, 1, sizeof(header), file);
958582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
959582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* Read SAD blocks, clamping the maximum size for safety */
960582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    if (header.length > (int)sizeof(block))
961582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        header.length = (int)sizeof(block);
962582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    fread(&block, header.length, 1, file);
963582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
964582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    fclose(file);
965582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
966582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    /* Calculate the number of SAD blocks */
967582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    num_audio_blocks = header.length / SAD_BLOCK_SIZE;
968582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
969582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    for (i = 0; i < num_audio_blocks; i++) {
970582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        /* Only consider LPCM blocks */
971582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if ((sad[0] >> 3) != EDID_FORMAT_LPCM)
972582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            continue;
973582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
974582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        channel_count = (sad[0] & 0x7) + 1;
975582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        if (channel_count > max_channels)
976582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            max_channels = channel_count;
977582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
978582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        /* Advance to next block */
979582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        sad += 3;
980582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
981582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
982582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return max_channels;
983582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
984582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
985582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletivoid platform_get_parameters(void *platform __unused,
986582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                             struct str_parms *query __unused,
987582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                             struct str_parms *reply __unused)
988582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
989582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
990582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
991582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
992582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_parameters(void *platform __unused, struct str_parms *parms __unused)
993582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
994582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
995582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
996582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
997582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
998582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_incall_recoding_session_id(void *platform __unused,
999582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                            uint32_t session_id __unused)
1000582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1001582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
1002582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1003582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1004582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1005582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_update_lch(void *platform __unused,
1006582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                        struct voice_session *session __unused,
1007582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                        enum voice_lch_mode lch_mode __unused)
1008582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1009582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
1010582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1011582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1012582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1013582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_start_incall_music_usecase(void *platform __unused)
1014582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1015582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
1016582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1017582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1018582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1019582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_stop_incall_music_usecase(void *platform __unused)
1020582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1021582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGE("%s: Not implemented", __func__);
1022582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1023582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1024582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1025582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti/* Delay in Us */
1026582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint64_t platform_render_latency(audio_usecase_t usecase)
1027582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1028582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    switch (usecase) {
1029582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        case USECASE_AUDIO_PLAYBACK_DEEP_BUFFER:
1030582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            return DEEP_BUFFER_PLATFORM_DELAY;
1031582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        case USECASE_AUDIO_PLAYBACK_LOW_LATENCY:
1032582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            return LOW_LATENCY_PLATFORM_DELAY;
1033582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti        default:
1034582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti            return 0;
1035582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    }
1036582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1037582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1038582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_update_usecase_from_source(int source, int usecase)
1039582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1040582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    ALOGV("%s: input source :%d", __func__, source);
1041582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return usecase;
1042582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1043582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1044582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletibool platform_listen_device_needs_event(snd_device_t snd_device __unused)
1045582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1046582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return false;
1047582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1048582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1049582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletibool platform_listen_usecase_needs_event(audio_usecase_t uc_id __unused)
1050582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1051582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return false;
1052582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1053582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1054582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletibool platform_check_and_set_codec_backend_cfg(struct audio_device* adev __unused,
1055582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                              struct audio_usecase *usecase __unused)
1056582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1057582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return false;
1058582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1059582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1060582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_usecase_index(const char * usecase __unused)
1061582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1062582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1063582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1064582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1065582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_usecase_pcm_id(audio_usecase_t usecase __unused, int32_t type __unused,
1066582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                int32_t pcm_id __unused)
1067582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1068582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1069582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1070582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1071582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_snd_device_backend(snd_device_t snd_device __unused,
1072582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                                    const char * backend __unused)
1073582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1074582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1075582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1076582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1077582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletibool platform_sound_trigger_device_needs_event(snd_device_t snd_device __unused)
1078582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1079582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return false;
1080582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1081582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1082582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletibool platform_sound_trigger_usecase_needs_event(audio_usecase_t uc_id  __unused)
1083582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1084582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return false;
1085582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1086582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1087582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_set_fluence_type(void *platform __unused, char *value __unused)
1088582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1089582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1090582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1091582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1092582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiint platform_get_fluence_type(void *platform __unused, char *value __unused,
1093582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti                              uint32_t len __unused)
1094582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1095582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return -ENOSYS;
1096582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
1097582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti
1098582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuletiuint32_t platform_get_pcm_offload_buffer_size(audio_offload_info_t* info __unused)
1099582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti{
1100582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti    return 0;
1101582e0a5e965897ea54ecfa5fe206797dab577a45Uday Kishore Pasupuleti}
11026ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar
11036ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekharint platform_set_audio_device_interface(const char * device_name __unused,
11046ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar                                        const char *intf_name __unused,
11056ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar                                        const char *codec_type __unused)
11066ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar{
11076ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar    return -ENOSYS;
11086ffa3384ebf6b2a535eea9faf0848c10215543adAmit Shekhar}
1109