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_SAFE_AND_HEADPHONES,
     49     SND_DEVICE_OUT_SPEAKER_AND_LINE,
     50     SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE,
     51     SND_DEVICE_OUT_VOICE_HANDSET,
     52     SND_DEVICE_OUT_VOICE_SPEAKER,
     53     SND_DEVICE_OUT_VOICE_HEADPHONES,
     54     SND_DEVICE_OUT_VOICE_LINE,
     55     SND_DEVICE_OUT_HDMI,
     56     SND_DEVICE_OUT_SPEAKER_AND_HDMI,
     57     SND_DEVICE_OUT_BT_SCO,
     58     SND_DEVICE_OUT_BT_SCO_WB,
     59     SND_DEVICE_OUT_VOICE_HANDSET_TMUS,
     60     SND_DEVICE_OUT_VOICE_TTY_FULL_HEADPHONES,
     61     SND_DEVICE_OUT_VOICE_TTY_VCO_HEADPHONES,
     62     SND_DEVICE_OUT_VOICE_TTY_HCO_HANDSET,
     63     SND_DEVICE_OUT_VOICE_HAC_HANDSET,
     64     SND_DEVICE_OUT_VOICE_TX,
     65     SND_DEVICE_OUT_SPEAKER_PROTECTED,
     66     SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED,
     67     SND_DEVICE_OUT_END,
     68 
     69     /*
     70      * Note: IN_BEGIN should be same as OUT_END because total number of devices
     71      * SND_DEVICES_MAX should not exceed MAX_RX + MAX_TX devices.
     72      */
     73     /* Capture devices */
     74     SND_DEVICE_IN_BEGIN = SND_DEVICE_OUT_END,
     75     SND_DEVICE_IN_HANDSET_MIC  = SND_DEVICE_IN_BEGIN,
     76     SND_DEVICE_IN_HANDSET_MIC_AEC,
     77     SND_DEVICE_IN_HANDSET_MIC_NS,
     78     SND_DEVICE_IN_HANDSET_MIC_AEC_NS,
     79     SND_DEVICE_IN_HANDSET_DMIC,
     80     SND_DEVICE_IN_HANDSET_DMIC_AEC,
     81     SND_DEVICE_IN_HANDSET_DMIC_NS,
     82     SND_DEVICE_IN_HANDSET_DMIC_AEC_NS,
     83     SND_DEVICE_IN_HANDSET_DMIC_STEREO,
     84 
     85     SND_DEVICE_IN_SPEAKER_MIC,
     86     SND_DEVICE_IN_SPEAKER_MIC_AEC,
     87     SND_DEVICE_IN_SPEAKER_MIC_NS,
     88     SND_DEVICE_IN_SPEAKER_MIC_AEC_NS,
     89     SND_DEVICE_IN_SPEAKER_DMIC,
     90     SND_DEVICE_IN_SPEAKER_DMIC_AEC,
     91     SND_DEVICE_IN_SPEAKER_DMIC_NS,
     92     SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS,
     93     SND_DEVICE_IN_SPEAKER_DMIC_STEREO,
     94 
     95     SND_DEVICE_IN_HEADSET_MIC,
     96     SND_DEVICE_IN_HEADSET_MIC_AEC,
     97 
     98     SND_DEVICE_IN_HDMI_MIC,
     99     SND_DEVICE_IN_BT_SCO_MIC,
    100     SND_DEVICE_IN_BT_SCO_MIC_NREC,
    101     SND_DEVICE_IN_BT_SCO_MIC_WB,
    102     SND_DEVICE_IN_BT_SCO_MIC_WB_NREC,
    103     SND_DEVICE_IN_CAMCORDER_MIC,
    104 
    105     SND_DEVICE_IN_VOICE_DMIC,
    106     SND_DEVICE_IN_VOICE_DMIC_TMUS,
    107     SND_DEVICE_IN_VOICE_SPEAKER_MIC,
    108     SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
    109     SND_DEVICE_IN_VOICE_HEADSET_MIC,
    110     SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC,
    111     SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC,
    112     SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC,
    113 
    114     SND_DEVICE_IN_VOICE_REC_MIC,
    115     SND_DEVICE_IN_VOICE_REC_MIC_NS,
    116     SND_DEVICE_IN_VOICE_REC_DMIC_STEREO,
    117     SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE,
    118 
    119     SND_DEVICE_IN_VOICE_RX,
    120 
    121     SND_DEVICE_IN_CAPTURE_VI_FEEDBACK,
    122 
    123     SND_DEVICE_IN_END,
    124 
    125     SND_DEVICE_MAX = SND_DEVICE_IN_END,
    126 
    127 };
    128 
    129 #define DEFAULT_OUTPUT_SAMPLING_RATE 48000
    130 
    131 #define ALL_SESSION_VSID                0xFFFFFFFF
    132 #define DEFAULT_MUTE_RAMP_DURATION_MS   20
    133 #define DEFAULT_VOLUME_RAMP_DURATION_MS 20
    134 
    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 
    141 #define MAX_VOL_INDEX 5
    142 #define MIN_VOL_INDEX 0
    143 #define percent_to_index(val, min, max) \
    144             ((val) * ((max) - (min)) * 0.01 + (min) + .5)
    145 
    146 /*
    147  * tinyAlsa library interprets period size as number of frames
    148  * one frame = channel_count * sizeof (pcm sample)
    149  * so if format = 16-bit PCM and channels = Stereo, frame size = 2 ch * 2 = 4 bytes
    150  * DEEP_BUFFER_OUTPUT_PERIOD_SIZE = 1024 means 1024 * 4 = 4096 bytes
    151  * We should take care of returning proper size when AudioFlinger queries for
    152  * the buffer size of an input/output stream
    153  */
    154 
    155 /* 1920 frames(40ms) at 2 buffers gives a good tradeoff between power and latency */
    156 #define DEEP_BUFFER_OUTPUT_PERIOD_SIZE 1920
    157 #define DEEP_BUFFER_OUTPUT_PERIOD_COUNT 2
    158 
    159 #define LOW_LATENCY_OUTPUT_PERIOD_SIZE 240
    160 #define LOW_LATENCY_OUTPUT_PERIOD_COUNT 2
    161 
    162 #define HDMI_MULTI_PERIOD_SIZE  336
    163 #define HDMI_MULTI_PERIOD_COUNT 8
    164 #define HDMI_MULTI_DEFAULT_CHANNEL_COUNT 6
    165 #define HDMI_MULTI_PERIOD_BYTES (HDMI_MULTI_PERIOD_SIZE * HDMI_MULTI_DEFAULT_CHANNEL_COUNT * 2)
    166 
    167 #define AUDIO_CAPTURE_PERIOD_DURATION_MSEC 20
    168 #define AUDIO_CAPTURE_PERIOD_COUNT 2
    169 
    170 #define LOW_LATENCY_CAPTURE_SAMPLE_RATE 48000
    171 #define LOW_LATENCY_CAPTURE_PERIOD_SIZE 240
    172 #define LOW_LATENCY_CAPTURE_USE_CASE 1
    173 
    174 #define DEEP_BUFFER_PCM_DEVICE 0
    175 #define AUDIO_RECORD_PCM_DEVICE 0
    176 #define MULTIMEDIA2_PCM_DEVICE 1
    177 
    178 #define SPKR_PROT_CALIB_RX_PCM_DEVICE 5
    179 #define SPKR_PROT_CALIB_TX_PCM_DEVICE 25
    180 
    181 #define MULTIMEDIA3_PCM_DEVICE 4
    182 
    183 #define QUAT_MI2S_PCM_DEVICE    44
    184 #define PLAYBACK_OFFLOAD_DEVICE 9
    185 #define LOWLATENCY_PCM_DEVICE 15
    186 #define VOICE_VSID  0x10C01000
    187 
    188 #define VOICE_CALL_PCM_DEVICE 2
    189 #define VOICE2_CALL_PCM_DEVICE 22
    190 #define VOLTE_CALL_PCM_DEVICE 14
    191 #define QCHAT_CALL_PCM_DEVICE 20
    192 #define VOWLAN_CALL_PCM_DEVICE 36
    193 
    194 #define AFE_PROXY_PLAYBACK_PCM_DEVICE 7
    195 #define AFE_PROXY_RECORD_PCM_DEVICE 8
    196 
    197 #define HFP_PCM_RX 5
    198 #ifdef PLATFORM_MSM8x26
    199 #define HFP_SCO_RX 28
    200 #define HFP_ASM_RX_TX 29
    201 #else
    202 #define HFP_SCO_RX 23
    203 #define HFP_ASM_RX_TX 24
    204 #endif
    205 
    206 #define LIB_CSD_CLIENT "libcsd-client.so"
    207 #define LIB_MDM_DETECT "libmdmdetect.so"
    208 
    209 #define PLATFORM_CONFIG_KEY_SOUNDCARD_NAME "snd_card_name"
    210 
    211 /* CSD-CLIENT related functions */
    212 typedef int (*init_t)(bool);
    213 typedef int (*deinit_t)();
    214 typedef int (*disable_device_t)();
    215 typedef int (*enable_device_config_t)(int, int);
    216 typedef int (*enable_device_t)(int, int, uint32_t);
    217 typedef int (*volume_t)(uint32_t, int, uint16_t);
    218 typedef int (*mic_mute_t)(uint32_t, int, uint16_t);
    219 typedef int (*slow_talk_t)(uint32_t, uint8_t);
    220 typedef int (*start_voice_t)(uint32_t);
    221 typedef int (*stop_voice_t)(uint32_t);
    222 typedef int (*start_playback_t)(uint32_t);
    223 typedef int (*stop_playback_t)(uint32_t);
    224 typedef int (*start_record_t)(uint32_t, int);
    225 typedef int (*stop_record_t)(uint32_t);
    226 typedef int (*get_sample_rate_t)(uint32_t *);
    227 /* CSD Client structure */
    228 struct csd_data {
    229     void *csd_client;
    230     init_t init;
    231     deinit_t deinit;
    232     disable_device_t disable_device;
    233     enable_device_config_t enable_device_config;
    234     enable_device_t enable_device;
    235     volume_t volume;
    236     mic_mute_t mic_mute;
    237     slow_talk_t slow_talk;
    238     start_voice_t start_voice;
    239     stop_voice_t stop_voice;
    240     start_playback_t start_playback;
    241     stop_playback_t stop_playback;
    242     start_record_t start_record;
    243     stop_record_t stop_record;
    244     get_sample_rate_t get_sample_rate;
    245 };
    246 
    247 #endif // QCOM_AUDIO_PLATFORM_H
    248