Home | History | Annotate | Download | only in msm8974
      1 /*
      2  * Copyright (C) 2013-2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef QCOM_AUDIO_PLATFORM_H
     18 #define QCOM_AUDIO_PLATFORM_H
     19 
     20 /*
     21  * Below are the devices for which is back end is same, SLIMBUS_0_RX.
     22  * All these devices are handled by the internal HW codec. We can
     23  * enable any one of these devices at any time
     24  */
     25 #define AUDIO_DEVICE_OUT_ALL_CODEC_BACKEND \
     26     (AUDIO_DEVICE_OUT_EARPIECE | AUDIO_DEVICE_OUT_SPEAKER | \
     27      AUDIO_DEVICE_OUT_SPEAKER_SAFE | \
     28      AUDIO_DEVICE_OUT_WIRED_HEADSET | AUDIO_DEVICE_OUT_WIRED_HEADPHONE | \
     29      AUDIO_DEVICE_OUT_LINE)
     30 
     31 /* Sound devices specific to the platform
     32  * The DEVICE_OUT_* and DEVICE_IN_* should be mapped to these sound
     33  * devices to enable corresponding mixer paths
     34  */
     35 enum {
     36     SND_DEVICE_NONE = 0,
     37 
     38     /* Playback devices */
     39     SND_DEVICE_MIN,
     40     SND_DEVICE_OUT_BEGIN = SND_DEVICE_MIN,
     41     SND_DEVICE_OUT_HANDSET = SND_DEVICE_OUT_BEGIN,
     42     SND_DEVICE_OUT_SPEAKER,
     43     SND_DEVICE_OUT_SPEAKER_REVERSE,
     44     SND_DEVICE_OUT_SPEAKER_SAFE,
     45     SND_DEVICE_OUT_HEADPHONES,
     46     SND_DEVICE_OUT_LINE,
     47     SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES,
     48     SND_DEVICE_OUT_SPEAKER_AND_LINE,
     49     SND_DEVICE_OUT_VOICE_HANDSET,
     50     SND_DEVICE_OUT_VOICE_SPEAKER,
     51     SND_DEVICE_OUT_VOICE_HEADPHONES,
     52     SND_DEVICE_OUT_VOICE_LINE,
     53     SND_DEVICE_OUT_HDMI,
     54     SND_DEVICE_OUT_SPEAKER_AND_HDMI,
     55     SND_DEVICE_OUT_BT_SCO,
     56     SND_DEVICE_OUT_BT_SCO_WB,
     57     SND_DEVICE_OUT_VOICE_HANDSET_TMUS,
     58     SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES,
     59     SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES,
     60     SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
     61     SND_DEVICE_OUT_VOICE_HAC_HANDSET,
     62     SND_DEVICE_OUT_VOICE_TX,
     63     SND_DEVICE_OUT_END,
     64 
     65     /*
     66      * Note: IN_BEGIN should be same as OUT_END because total number of devices
     67      * SND_DEVICES_MAX should not exceed MAX_RX + MAX_TX devices.
     68      */
     69     /* Capture devices */
     70     SND_DEVICE_IN_BEGIN = SND_DEVICE_OUT_END,
     71     SND_DEVICE_IN_HANDSET_MIC  = SND_DEVICE_IN_BEGIN,
     72     SND_DEVICE_IN_HANDSET_MIC_AEC,
     73     SND_DEVICE_IN_HANDSET_MIC_NS,
     74     SND_DEVICE_IN_HANDSET_MIC_AEC_NS,
     75     SND_DEVICE_IN_HANDSET_DMIC,
     76     SND_DEVICE_IN_HANDSET_DMIC_AEC,
     77     SND_DEVICE_IN_HANDSET_DMIC_NS,
     78     SND_DEVICE_IN_HANDSET_DMIC_AEC_NS,
     79     SND_DEVICE_IN_HANDSET_DMIC_STEREO,
     80 
     81     SND_DEVICE_IN_SPEAKER_MIC,
     82     SND_DEVICE_IN_SPEAKER_MIC_AEC,
     83     SND_DEVICE_IN_SPEAKER_MIC_NS,
     84     SND_DEVICE_IN_SPEAKER_MIC_AEC_NS,
     85     SND_DEVICE_IN_SPEAKER_DMIC,
     86     SND_DEVICE_IN_SPEAKER_DMIC_AEC,
     87     SND_DEVICE_IN_SPEAKER_DMIC_NS,
     88     SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS,
     89     SND_DEVICE_IN_SPEAKER_DMIC_STEREO,
     90 
     91     SND_DEVICE_IN_HEADSET_MIC,
     92     SND_DEVICE_IN_HEADSET_MIC_AEC,
     93 
     94     SND_DEVICE_IN_HDMI_MIC,
     95     SND_DEVICE_IN_BT_SCO_MIC,
     96     SND_DEVICE_IN_BT_SCO_MIC_WB,
     97 
     98     SND_DEVICE_IN_CAMCORDER_MIC,
     99 
    100     SND_DEVICE_IN_VOICE_DMIC,
    101     SND_DEVICE_IN_VOICE_DMIC_TMUS,
    102     SND_DEVICE_IN_VOICE_SPEAKER_MIC,
    103     SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
    104     SND_DEVICE_IN_VOICE_HEADSET_MIC,
    105     SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC,
    106     SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC,
    107     SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC,
    108 
    109     SND_DEVICE_IN_VOICE_REC_MIC,
    110     SND_DEVICE_IN_VOICE_REC_MIC_NS,
    111     SND_DEVICE_IN_VOICE_REC_DMIC_STEREO,
    112     SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE,
    113 
    114     SND_DEVICE_IN_VOICE_RX,
    115 
    116     SND_DEVICE_IN_END,
    117 
    118     SND_DEVICE_MAX = SND_DEVICE_IN_END,
    119 
    120 };
    121 
    122 #define DEFAULT_OUTPUT_SAMPLING_RATE 48000
    123 
    124 #define ALL_SESSION_VSID                0xFFFFFFFF
    125 #define DEFAULT_MUTE_RAMP_DURATION_MS   20
    126 #define DEFAULT_VOLUME_RAMP_DURATION_MS 20
    127 
    128 #ifdef PLATFORM_MSM8084
    129 #define ACDB_ID_VOICE_SPEAKER 66
    130 #define ACDB_ID_VOICE_HANDSET 67
    131 #define ACDB_ID_VOICE_HANDSET_TMUS 67
    132 #define ACDB_ID_VOICE_DMIC_EF_TMUS 89
    133 #define ACDB_ID_HEADSET_MIC_AEC 47
    134 #else
    135 #define ACDB_ID_VOICE_SPEAKER 15
    136 #define ACDB_ID_VOICE_HANDSET 7
    137 #define ACDB_ID_VOICE_HANDSET_TMUS 88
    138 #define ACDB_ID_VOICE_DMIC_EF_TMUS 89
    139 #define ACDB_ID_HEADSET_MIC_AEC 8
    140 #endif
    141 
    142 #define MAX_VOL_INDEX 5
    143 #define MIN_VOL_INDEX 0
    144 #define percent_to_index(val, min, max) \
    145             ((val) * ((max) - (min)) * 0.01 + (min) + .5)
    146 
    147 /*
    148  * tinyAlsa library interprets period size as number of frames
    149  * one frame = channel_count * sizeof (pcm sample)
    150  * so if format = 16-bit PCM and channels = Stereo, frame size = 2 ch * 2 = 4 bytes
    151  * DEEP_BUFFER_OUTPUT_PERIOD_SIZE = 1024 means 1024 * 4 = 4096 bytes
    152  * We should take care of returning proper size when AudioFlinger queries for
    153  * the buffer size of an input/output stream
    154  */
    155 #define DEEP_BUFFER_OUTPUT_PERIOD_SIZE 960
    156 #define DEEP_BUFFER_OUTPUT_PERIOD_COUNT 8
    157 #define LOW_LATENCY_OUTPUT_PERIOD_SIZE 240
    158 #define LOW_LATENCY_OUTPUT_PERIOD_COUNT 2
    159 
    160 #define HDMI_MULTI_PERIOD_SIZE  336
    161 #define HDMI_MULTI_PERIOD_COUNT 8
    162 #define HDMI_MULTI_DEFAULT_CHANNEL_COUNT 6
    163 #define HDMI_MULTI_PERIOD_BYTES (HDMI_MULTI_PERIOD_SIZE * HDMI_MULTI_DEFAULT_CHANNEL_COUNT * 2)
    164 
    165 #define AUDIO_CAPTURE_PERIOD_DURATION_MSEC 20
    166 #define AUDIO_CAPTURE_PERIOD_COUNT 2
    167 
    168 #define LOW_LATENCY_CAPTURE_SAMPLE_RATE 48000
    169 #define LOW_LATENCY_CAPTURE_PERIOD_SIZE 240
    170 #define LOW_LATENCY_CAPTURE_USE_CASE 1
    171 
    172 #define DEEP_BUFFER_PCM_DEVICE 0
    173 #define AUDIO_RECORD_PCM_DEVICE 0
    174 #define MULTIMEDIA2_PCM_DEVICE 1
    175 #define PLAYBACK_OFFLOAD_DEVICE 9
    176 #define LOWLATENCY_PCM_DEVICE 15
    177 #define VOICE_VSID  0x10C01000
    178 #ifdef PLATFORM_MSM8084
    179 #define VOICE_CALL_PCM_DEVICE 20
    180 #define VOICE2_CALL_PCM_DEVICE 25
    181 #define VOLTE_CALL_PCM_DEVICE 21
    182 #define QCHAT_CALL_PCM_DEVICE 33
    183 #define VOWLAN_CALL_PCM_DEVICE -1
    184 #else
    185 #define VOICE_CALL_PCM_DEVICE 2
    186 #define VOICE2_CALL_PCM_DEVICE 22
    187 #define VOLTE_CALL_PCM_DEVICE 14
    188 #define QCHAT_CALL_PCM_DEVICE 20
    189 #define VOWLAN_CALL_PCM_DEVICE 36
    190 #endif
    191 
    192 #define AFE_PROXY_PLAYBACK_PCM_DEVICE 7
    193 #define AFE_PROXY_RECORD_PCM_DEVICE 8
    194 
    195 #define HFP_PCM_RX 5
    196 #ifdef PLATFORM_MSM8x26
    197 #define HFP_SCO_RX 28
    198 #define HFP_ASM_RX_TX 29
    199 #else
    200 #define HFP_SCO_RX 23
    201 #define HFP_ASM_RX_TX 24
    202 #endif
    203 
    204 #define LIB_CSD_CLIENT "libcsd-client.so"
    205 #define LIB_MDM_DETECT "libmdmdetect.so"
    206 
    207 /* CSD-CLIENT related functions */
    208 typedef int (*init_t)(bool);
    209 typedef int (*deinit_t)();
    210 typedef int (*disable_device_t)();
    211 typedef int (*enable_device_config_t)(int, int);
    212 typedef int (*enable_device_t)(int, int, uint32_t);
    213 typedef int (*volume_t)(uint32_t, int, uint16_t);
    214 typedef int (*mic_mute_t)(uint32_t, int, uint16_t);
    215 typedef int (*slow_talk_t)(uint32_t, uint8_t);
    216 typedef int (*start_voice_t)(uint32_t);
    217 typedef int (*stop_voice_t)(uint32_t);
    218 typedef int (*start_playback_t)(uint32_t);
    219 typedef int (*stop_playback_t)(uint32_t);
    220 typedef int (*start_record_t)(uint32_t, int);
    221 typedef int (*stop_record_t)(uint32_t);
    222 typedef int (*get_sample_rate_t)(uint32_t *);
    223 /* CSD Client structure */
    224 struct csd_data {
    225     void *csd_client;
    226     init_t init;
    227     deinit_t deinit;
    228     disable_device_t disable_device;
    229     enable_device_config_t enable_device_config;
    230     enable_device_t enable_device;
    231     volume_t volume;
    232     mic_mute_t mic_mute;
    233     slow_talk_t slow_talk;
    234     start_voice_t start_voice;
    235     stop_voice_t stop_voice;
    236     start_playback_t start_playback;
    237     stop_playback_t stop_playback;
    238     start_record_t start_record;
    239     stop_record_t stop_record;
    240     get_sample_rate_t get_sample_rate;
    241 };
    242 
    243 #endif // QCOM_AUDIO_PLATFORM_H
    244