Home | History | Annotate | Download | only in audio

Lines Matching full:adev

765 static void select_output_device(struct tuna_audio_device *adev);
766 static void select_input_device(struct tuna_audio_device *adev);
818 static int start_call(struct tuna_audio_device *adev)
822 pcm_config_vx.rate = adev->wb_amr ? VX_WB_SAMPLING_RATE : VX_NB_SAMPLING_RATE;
825 if (adev->pcm_modem_dl == NULL) {
826 adev->pcm_modem_dl = pcm_open(0, PORT_MODEM, PCM_OUT, &pcm_config_vx);
827 if (!pcm_is_ready(adev->pcm_modem_dl)) {
828 ALOGE("cannot open PCM modem DL stream: %s", pcm_get_error(adev->pcm_modem_dl));
833 if (adev->pcm_modem_ul == NULL) {
834 adev->pcm_modem_ul = pcm_open(0, PORT_MODEM, PCM_IN, &pcm_config_vx);
835 if (!pcm_is_ready(adev->pcm_modem_ul)) {
836 ALOGE("cannot open PCM modem UL stream: %s", pcm_get_error(adev->pcm_modem_ul));
841 pcm_start(adev->pcm_modem_dl);
842 pcm_start(adev->pcm_modem_ul);
847 pcm_close(adev->pcm_modem_ul);
848 adev->pcm_modem_ul = NULL;
850 pcm_close(adev->pcm_modem_dl);
851 adev->pcm_modem_dl = NULL;
856 static void end_call(struct tuna_audio_device *adev)
860 pcm_stop(adev->pcm_modem_dl);
861 pcm_stop(adev->pcm_modem_ul);
862 pcm_close(adev->pcm_modem_dl);
863 pcm_close(adev->pcm_modem_ul);
864 adev->pcm_modem_dl = NULL;
865 adev->pcm_modem_ul = NULL;
868 static void set_eq_filter(struct tuna_audio_device *adev)
871 int dl1_eq_applicable = adev->devices & (AUDIO_DEVICE_OUT_WIRED_HEADSET |
875 if ((adev->mode == AUDIO_MODE_IN_CALL) && dl1_eq_applicable &&
876 (adev->tty_mode == TTY_MODE_OFF) && !adev->wb_amr)
877 mixer_ctl_set_enum_by_string(adev->mixer_ctls.dl1_eq, MIXER_4KHZ_LPF_0DB);
879 mixer_ctl_set_enum_by_string(adev->mixer_ctls.dl1_eq, MIXER_FLAT_RESPONSE);
884 struct tuna_audio_device *adev = (struct tuna_audio_device *)data;
886 pthread_mutex_lock(&adev->lock);
887 if (adev->wb_amr != enable) {
888 adev->wb_amr = enable;
891 if (adev->in_call) {
892 end_call(adev);
893 set_eq_filter(adev);
894 start_call(adev);
897 pthread_mutex_unlock(&adev->lock);
900 static void set_incall_device(struct tuna_audio_device *adev)
904 switch(adev->devices & AUDIO_DEVICE_OUT_ALL) {
922 if (adev->bluetooth_nrec)
933 ril_set_call_audio_path(&adev->ril, device_type);
936 static void set_input_volumes(struct tuna_audio_device *adev, int main_mic_on,
942 if (adev->mode == AUDIO_MODE_IN_CALL) {
949 } else if (adev->active_input) {
951 switch (adev->active_input->source) {
983 mixer_ctl_set_value(adev->mixer_ctls.amic_ul_volume, channel, volume);
986 static void set_output_volumes(struct tuna_audio_device *adev, bool tty_volume)
992 bool toro = adev->device_is_toro;
993 int headphone_on = adev->devices & AUDIO_DEVICE_OUT_WIRED_HEADPHONE;
994 int speaker_on = adev->devices & AUDIO_DEVICE_OUT_SPEAKER;
997 DB_FROM_SPEAKER_VOLUME(mixer_ctl_get_range_max(adev->mixer_ctls.speaker_volume));
1009 if (adev->mode == AUDIO_MODE_IN_CALL) {
1017 } else if (adev->mode == AUDIO_MODE_IN_COMMUNICATION) {
1037 else if (adev->mode == AUDIO_MODE_RINGTONE)
1045 else if (adev->devices & AUDIO_DEVICE_OUT_WIRED_HEADSET)
1062 mixer_ctl_set_value(adev->mixer_ctls.speaker_volume, channel,
1064 mixer_ctl_set_value(adev->mixer_ctls.headset_volume, channel,
1071 if (adev->mode == AUDIO_MODE_IN_CALL) {
1072 mixer_ctl_set_value(adev->mixer_ctls.tones_dl1_volume, 0,
1074 mixer_ctl_set_value(adev->mixer_ctls.vx_dl2_volume, 0,
1076 mixer_ctl_set_value(adev->mixer_ctls.tones_dl2_volume, 0,
1078 } else if (adev->mode == AUDIO_MODE_IN_COMMUNICATION) {
1079 mixer_ctl_set_value(adev->mixer_ctls.tones_dl1_volume, 0,
1081 mixer_ctl_set_value(adev->mixer_ctls.tones_dl2_volume, 0,
1084 mixer_ctl_set_value(adev->mixer_ctls.tones_dl1_volume, 0,
1086 mixer_ctl_set_value(adev->mixer_ctls.tones_dl2_volume, 0,
1090 mixer_ctl_set_value(adev->mixer_ctls.mm_dl1_volume, 0,
1092 mixer_ctl_set_value(adev->mixer_ctls.mm_dl2_volume, 0,
1095 mixer_ctl_set_value(adev->mixer_ctls.earpiece_volume, 0,
1099 static void force_all_standby(struct tuna_audio_device *adev)
1106 if (adev->outputs[OUTPUT_LOW_LATENCY] != NULL &&
1107 !adev->outputs[OUTPUT_LOW_LATENCY]->standby) {
1108 out = adev->outputs[OUTPUT_LOW_LATENCY];
1114 if (adev->active_input) {
1115 in = adev->active_input;
1122 static void select_mode(struct tuna_audio_device *adev)
1124 if (adev->mode == AUDIO_MODE_IN_CALL) {
1125 ALOGE("Entering IN_CALL state, in_call=%d", adev->in_call);
1126 if (!adev->in_call) {
1127 force_all_standby(adev);
1138 if ((adev->devices & AUDIO_DEVICE_OUT_ALL) == AUDIO_DEVICE_OUT_SPEAKER)
1139 adev->devices = AUDIO_DEVICE_OUT_EARPIECE |
1142 adev->devices &= ~AUDIO_DEVICE_OUT_SPEAKER;
1143 select_output_device(adev);
1144 start_call(adev);
1145 adev_set_voice_volume(&adev->hw_device, adev->voice_volume);
1146 adev->in_call = 1;
1150 adev->in_call, adev->mode);
1151 if (adev->in_call) {
1152 adev->in_call = 0;
1153 end_call(adev);
1154 force_all_standby(adev);
1155 select_output_device(adev);
1156 select_input_device(adev);
1161 static void select_output_device(struct tuna_audio_device *adev)
1176 if (adev->mode == AUDIO_MODE_IN_CALL) {
1178 mixer_ctl_set_value(adev->mixer_ctls.voice_ul_volume,
1182 headset_on = adev->devices & AUDIO_DEVICE_OUT_WIRED_HEADSET;
1183 headphone_on = adev->devices & AUDIO_DEVICE_OUT_WIRED_HEADPHONE;
1184 speaker_on = adev->devices & AUDIO_DEVICE_OUT_SPEAKER;
1185 earpiece_on = adev->devices & AUDIO_DEVICE_OUT_EARPIECE;
1186 bt_on = adev->devices & AUDIO_DEVICE_OUT_ALL_SCO;
1189 if (adev->mode == AUDIO_MODE_IN_CALL && !bt_on) {
1190 switch(adev->tty_mode) {
1211 if (adev->devices &
1222 mixer_ctl_set_value(adev->mixer_ctls.mm_dl2, 0, speaker_on);
1223 mixer_ctl_set_value(adev->mixer_ctls.tones_dl2, 0, speaker_on);
1224 mixer_ctl_set_value(adev->mixer_ctls.vx_dl2, 0,
1225 speaker_on && (adev->mode == AUDIO_MODE_IN_CALL));
1226 mixer_ctl_set_value(adev->mixer_ctls.mm_dl1, 0, dl1_on);
1227 mixer_ctl_set_value(adev->mixer_ctls.tones_dl1, 0, dl1_on);
1228 mixer_ctl_set_value(adev->mixer_ctls.vx_dl1, 0,
1229 dl1_on && (adev->mode == AUDIO_MODE_IN_CALL));
1231 mixer_ctl_set_value(adev->mixer_ctls.dl1_headset, 0,
1233 mixer_ctl_set_value(adev->mixer_ctls.dl1_bt, 0, bt_on);
1234 mixer_ctl_set_value(adev->mixer_ctls.dl2_mono, 0,
1235 (adev->mode != AUDIO_MODE_IN_CALL) && speaker_on);
1236 mixer_ctl_set_value(adev->mixer_ctls.earpiece_enable, 0, earpiece_on);
1239 set_route_by_array(adev->mixer, hs_output, headset_on | headphone_on);
1240 set_route_by_array(adev->mixer, hf_output, speaker_on);
1242 set_eq_filter(adev);
1243 set_output_volumes(adev, tty_volume);
1248 if (adev->mode == AUDIO_MODE_IN_CALL) {
1250 set_route_by_array(adev->mixer, vx_ul_bt, bt_on);
1253 switch(adev->tty_mode) {
1275 set_route_by_array(adev->mixer, vx_ul_amic_left, 1);
1277 set_route_by_array(adev->mixer, vx_ul_amic_right, 1);
1279 set_route_by_array(adev->mixer, vx_ul_amic_left, 0);
1281 mixer_ctl_set_enum_by_string(adev->mixer_ctls.left_capture,
1284 mixer_ctl_set_enum_by_string(adev->mixer_ctls.right_capture,
1287 set_input_volumes(adev, earpiece_on || headphone_on,
1291 sidetone_capture_on = earpiece_on && adev->device_is_toro;
1294 set_incall_device(adev);
1298 mixer_ctl_set_value(adev->mixer_ctls.voice_ul_volume,
1303 mixer_ctl_set_value(adev->mixer_ctls.sidetone_capture, 0, sidetone_capture_on);
1306 static void select_input_device(struct tuna_audio_device *adev)
1311 int bt_on = adev->devices & AUDIO_DEVICE_IN_ALL_SCO;
1314 if ((adev->mode != AUDIO_MODE_IN_CALL) && (adev->active_input != 0)) {
1316 sub_mic_on = (adev->active_input->source == AUDIO_SOURCE_CAMCORDER) ||
1317 ((adev->devices & AUDIO_DEVICE_OUT_SPEAKER) &&
1318 (adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION));
1321 headset_on = adev->devices & AUDIO_DEVICE_IN_WIRED_HEADSET;
1322 main_mic_on = adev->devices & AUDIO_DEVICE_IN_BUILTIN_MIC;
1330 set_route_by_array(adev->mixer, mm_ul2_bt, 1);
1335 if ((adev->active_input != 0) && (adev->active_input->aux_channels)) {
1339 set_route_by_array(adev->mixer, mm_ul2_amic_dual_main_sub, 1);
1343 set_route_by_array(adev->mixer, mm_ul2_amic_dual_sub_main, 1);
1347 set_route_by_array(adev->mixer, mm_ul2_amic_dual_main_sub, 0);
1352 set_route_by_array(adev->mixer, mm_ul2_amic_left, 1);
1354 set_route_by_array(adev->mixer, mm_ul2_amic_right, 1);
1356 set_route_by_array(adev->mixer, mm_ul2_amic_left, 0);
1361 mixer_ctl_set_enum_by_string(adev->mixer_ctls.right_capture,
1363 mixer_ctl_set_enum_by_string(adev->mixer_ctls.left_capture,
1368 set_input_volumes(adev, main_mic_on, headset_on, sub_mic_on);
1374 struct tuna_audio_device *adev = out->dev;
1383 if (adev->mode != AUDIO_MODE_IN_CALL) {
1384 select_output_device(adev);
1391 if (adev->devices & (AUDIO_DEVICE_OUT_ALL &
1400 if (adev->devices & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET) {
1409 if ((adev->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL) &&
1410 (adev->outputs[OUTPUT_HDMI] == NULL || adev->outputs[OUTPUT_HDMI]->standby)) {
1433 if (adev
1434 out->echo_reference = adev->echo_reference;
1446 struct tuna_audio_device *adev = out->dev;
1448 if (adev->mode != AUDIO_MODE_IN_CALL) {
1449 select_output_device(adev);
1474 struct tuna_audio_device *adev = out->dev;
1477 if (adev->outputs[OUTPUT_LOW_LATENCY] != NULL &&
1478 !adev->outputs[OUTPUT_LOW_LATENCY]->standby) {
1479 struct tuna_stream_out *ll_out = adev->outputs[OUTPUT_LOW_LATENCY];
1558 static void put_echo_reference(struct tuna_audio_device *adev,
1561 if (adev->echo_reference != NULL &&
1562 reference == adev->echo_reference) {
1565 if (adev->outputs[OUTPUT_LOW_LATENCY] != NULL &&
1566 !adev->outputs[OUTPUT_LOW_LATENCY]->standby)
1567 remove_echo_reference(adev->outputs[OUTPUT_LOW_LATENCY], reference);
1569 adev->echo_reference = NULL;
1573 static struct echo_reference_itfe *get_echo_reference(struct tuna_audio_device *adev,
1578 put_echo_reference(adev, adev->echo_reference);
1581 if (adev->outputs[OUTPUT_LOW_LATENCY] != NULL &&
1582 !adev->outputs[OUTPUT_LOW_LATENCY]->standby) {
1584 &adev->outputs[OUTPUT_LOW_LATENCY]->stream.common;
1594 &adev->echo_reference);
1596 add_echo_reference(adev->outputs[OUTPUT_LOW_LATENCY],
1597 adev->echo_reference);
1599 return adev->echo_reference;
1704 struct tuna_audio_device *adev = out->dev;
1719 if (adev->outputs[i] != NULL && !adev->outputs[i]->standby) {
1726 if (all_outputs_in_standby && adev->mode != AUDIO_MODE_IN_CALL) {
1727 set_route_by_array(adev->mixer, hs_output, 0);
1728 set_route_by_array(adev->mixer, hf_output, 0);
1733 if (out == adev->outputs[OUTPUT_HDMI]) {
1734 if (adev->outputs[OUTPUT_LOW_LATENCY] != NULL &&
1735 !adev->outputs[OUTPUT_LOW_LATENCY]->standby) {
1736 struct tuna_stream_out *ll_out = adev->outputs[OUTPUT_LOW_LATENCY];
1773 struct tuna_audio_device *adev = out->dev;
1786 pthread_mutex_lock(&adev->lock);
1788 if (((adev->devices & AUDIO_DEVICE_OUT_ALL) != val) && (val != 0)) {
1792 if (out == adev->outputs[OUTPUT_LOW_LATENCY] && !out->standby) {
1794 if (adev->active_input &&
1795 adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
1807 (adev->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)) ||
1809 (adev->devices & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET)) ||
1810 (adev->devices & (AUDIO_DEVICE_OUT_AUX_DIGITAL |
1814 (adev->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL)) ||
1816 (adev->devices & AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET)) ||
1817 (adev->devices & (AUDIO_DEVICE_OUT_AUX_DIGITAL |
1820 (adev->devices & AUDIO_DEVICE_OUT_SPEAKER)) ||
1821 (adev->mode == AUDIO_MODE_IN_CALL))
1824 if (out != adev->outputs[OUTPUT_HDMI]) {
1825 adev->devices &= ~AUDIO_DEVICE_OUT_ALL;
1826 adev->devices |= val;
1827 select_output_device(adev);
1832 in = adev->active_input;
1837 pthread_mutex_unlock(&adev->lock);
1918 struct tuna_audio_device *adev = out->dev;
1930 pthread_mutex_lock(&adev->lock);
1935 pthread_mutex_unlock(&adev->lock);
1940 if (adev->active_input &&
1941 adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION)
1944 pthread_mutex_unlock(&adev->lock);
1992 pthread_mutex_lock(&adev->lock);
1993 if (adev->active_input) {
1994 in = adev->active_input;
1999 pthread_mutex_unlock(&adev->lock);
2010 struct tuna_audio_device *adev = out->dev;
2022 pthread_mutex_lock(&adev->lock);
2027 pthread_mutex_unlock(&adev->lock);
2032 use_long_periods = adev->screen_off && !adev->active_input;
2033 pthread_mutex_unlock(&adev->lock);
2102 struct tuna_audio_device *adev = out->dev;
2110 pthread_mutex_lock(&adev->lock);
2115 pthread_mutex_unlock(&adev->lock);
2120 pthread_mutex_unlock(&adev->lock);
2164 struct tuna_audio_device *adev = in->dev;
2166 adev->active_input = in;
2168 if (adev->mode != AUDIO_MODE_IN_CALL) {
2169 adev->devices &= ~AUDIO_DEVICE_IN_ALL;
2170 adev->devices |= in->device;
2171 select_input_device(adev);
2196 in->echo_reference = get_echo_reference(adev,
2206 adev->active_input = NULL;
2263 struct tuna_audio_device *adev = in->dev;
2269 adev->active_input = 0;
2270 if (adev->mode != AUDIO_MODE_IN_CALL) {
2271 adev->devices &= ~AUDIO_DEVICE_IN_ALL;
2272 select_input_device(adev);
2278 put_echo_reference(adev, in->echo_reference);
2308 struct tuna_audio_device *adev = in->dev;
2319 pthread_mutex_lock(&adev->lock);
2345 pthread_mutex_unlock(&adev->lock);
2748 struct tuna_audio_device *adev = in->dev;
2755 pthread_mutex_lock(&adev->lock);
2762 pthread_mutex_unlock(&adev->lock);
2777 if (ret == 0 && adev->mic_mute)
3301 * adev->devices &= ~AUDIO_DEVICE_OUT_ALL;
3302 * adev->devices |= out->device;
3303 * select_output_device(adev);
3345 struct tuna_audio_device *adev = (struct tuna_audio_device *)dev;
3367 pthread_mutex_lock(&adev->lock);
3368 if (tty_mode != adev->tty_mode) {
3369 adev->tty_mode = tty_mode;
3370 if (adev->mode == AUDIO_MODE_IN_CALL)
3371 select_output_device(adev);
3373 pthread_mutex_unlock(&adev->lock);
3379 adev->bluetooth_nrec = true;
3381 adev->bluetooth_nrec = false;
3387 adev->screen_off = false;
3389 adev->screen_off = true;
3409 struct tuna_audio_device *adev = (struct tuna_audio_device *)dev;
3411 adev->voice_volume = volume;
3413 if (adev->mode == AUDIO_MODE_IN_CALL)
3414 ril_set_call_volume(&adev->ril, SOUND_TYPE_VOICE, volume);
3426 struct tuna_audio_device *adev = (struct tuna_audio_device *)dev;
3428 pthread_mutex_lock(&adev->lock);
3429 if (adev->mode != mode) {
3430 adev->mode = mode;
3431 select_mode(adev);
3433 pthread_mutex_unlock(&adev->lock);
3440 struct tuna_audio_device *adev = (struct tuna_audio_device *)dev;
3442 adev->mic_mute = state;
3449 struct tuna_audio_device *adev = (struct tuna_audio_device *)dev;
3451 *state = adev->mic_mute;
3578 struct tuna_audio_device *adev = (struct tuna_audio_device *)device;
3581 ril_close(&adev->ril);
3583 mixer_close(adev->mixer);
3614 struct tuna_audio_device *adev;
3620 adev = calloc(1, sizeof(struct tuna_audio_device));
3621 if (!adev)
3624 adev->hw_device.common.tag = HARDWARE_DEVICE_TAG;
3625 adev->hw_device.common.version = AUDIO_DEVICE_API_VERSION_1_0;
3626 adev->hw_device.common.module = (struct hw_module_t *) module;
3627 adev->hw_device.common.close = adev_close;
3629 adev->hw_device.get_supported_devices = adev_get_supported_devices;
3630 adev->hw_device.init_check = adev_init_check;
3631 adev->hw_device.set_voice_volume = adev_set_voice_volume;
3632 adev->hw_device.set_master_volume = adev_set_master_volume;
3633 adev->hw_device.set_mode = adev_set_mode;
3634 adev->hw_device.set_mic_mute = adev_set_mic_mute;
3635 adev->hw_device.get_mic_mute = adev_get_mic_mute;
3636 adev->hw_device.set_parameters = adev_set_parameters;
3637 adev->hw_device.get_parameters = adev_get_parameters;
3638 adev->hw_device.get_input_buffer_size = adev_get_input_buffer_size;
3639 adev->hw_device.open_output_stream = adev_open_output_stream;
3640 adev->hw_device.close_output_stream = adev_close_output_stream;
3641 adev->hw_device.open_input_stream = adev_open_input_stream;
3642 adev->hw_device.close_input_stream = adev_close_input_stream;
3643 adev->hw_device.dump = adev_dump;
3645 adev->mixer = mixer_open(CARD_OMAP4_ABE);
3646 if (!adev->mixer) {
3647 free(adev);
3652 adev->mixer_ctls.dl1_eq = mixer_get_ctl_by_name(adev->mixer,
3654 adev->mixer_ctls.mm_dl1_volume = mixer_get_ctl_by_name(adev->mixer,
3656 adev->mixer_ctls.tones_dl1_volume = mixer_get_ctl_by_name(adev->mixer,
3658 adev->mixer_ctls.mm_dl2_volume = mixer_get_ctl_by_name(adev->mixer,
3660 adev->mixer_ctls.vx_dl2_volume = mixer_get_ctl_by_name(adev->mixer,
3662 adev->mixer_ctls.tones_dl2_volume = mixer_get_ctl_by_name(adev->mixer,
3664 adev->mixer_ctls.mm_dl1 = mixer_get_ctl_by_name(adev->mixer,
3666 adev->mixer_ctls.vx_dl1 = mixer_get_ctl_by_name(adev->mixer,
3668 adev->mixer_ctls.tones_dl1 = mixer_get_ctl_by_name(adev->mixer,
3670 adev->mixer_ctls.mm_dl2 = mixer_get_ctl_by_name(adev->mixer,
3672 adev->mixer_ctls.vx_dl2 = mixer_get_ctl_by_name(adev->mixer,
3674 adev->mixer_ctls.tones_dl2 = mixer_get_ctl_by_name(adev->mixer,
3676 adev->mixer_ctls.dl2_mono = mixer_get_ctl_by_name(adev->mixer,
3678 adev->mixer_ctls.dl1_headset = mixer_get_ctl_by_name(adev->mixer,
3680 adev->mixer_ctls.dl1_bt = mixer_get_ctl_by_name(adev->mixer,
3682 adev->mixer_ctls.earpiece_enable = mixer_get_ctl_by_name(adev->mixer,
3684 adev->mixer_ctls.left_capture = mixer_get_ctl_by_name(adev->mixer,
3686 adev->mixer_ctls.right_capture = mixer_get_ctl_by_name(adev->mixer,
3688 adev->mixer_ctls.amic_ul_volume = mixer_get_ctl_by_name(adev->mixer,
3690 adev->mixer_ctls.voice_ul_volume = mixer_get_ctl_by_name(adev->mixer,
3692 adevadev->mixer,
3694 adev->mixer_ctls.headset_volume = mixer_get_ctl_by_name(adev->mixer,
3696 adev->mixer_ctls.speaker_volume = mixer_get_ctl_by_name(adev->mixer,
3698 adev->mixer_ctls.earpiece_volume = mixer_get_ctl_by_name(adev->mixer,
3701 if (!adev->mixer_ctls.dl1_eq ||
3702 !adev->mixer_ctls.mm_dl1_volume ||
3703 !adev->mixer_ctls.tones_dl1_volume ||
3704 !adev->mixer_ctls.mm_dl2_volume ||
3705 !adev->mixer_ctls.vx_dl2_volume ||
3706 !adev->mixer_ctls.tones_dl2_volume ||
3707 !adev->mixer_ctls.mm_dl1 ||
3708 !adev->mixer_ctls.vx_dl1 ||
3709 !adev->mixer_ctls.tones_dl1 ||
3710 !adev->mixer_ctls.mm_dl2 ||
3711 !adev->mixer_ctls.vx_dl2 ||
3712 !adev->mixer_ctls.tones_dl2 ||
3713 !adev->mixer_ctls.dl2_mono ||
3714 !adev->mixer_ctls.dl1_headset ||
3715 !adev->mixer_ctls.dl1_bt ||
3716 !adev->mixer_ctls.earpiece_enable ||
3717 !adev->mixer_ctls.left_capture ||
3718 !adev->mixer_ctls.right_capture ||
3719 !adev->mixer_ctls.amic_ul_volume ||
3720 !adev->mixer_ctls.voice_ul_volume ||
3721 !adev->mixer_ctls.sidetone_capture ||
3722 !adev->mixer_ctls.headset_volume ||
3723 !adev->mixer_ctls.speaker_volume ||
3724 !adev->mixer_ctls.earpiece_volume) {
3725 mixer_close(adev->mixer);
3726 free(adev);
3732 pthread_mutex_lock(&adev->lock);
3733 set_route_by_array(adev->mixer, defaults, 1);
3734 adev->mode = AUDIO_MODE_NORMAL;
3735 adev->devices = AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_IN_BUILTIN_MIC;
3736 select_output_device(adev);
3738 adev->pcm_modem_dl = NULL;
3739 adev->pcm_modem_ul = NULL;
3740 adev->voice_volume = 1.0f;
3741 adev->tty_mode = TTY_MODE_OFF;
3742 adev->device_is_toro = is_device_toro();
3743 adev->bluetooth_nrec = true;
3744 adev->wb_amr = 0;
3747 ril_open(&adev->ril);
3748 pthread_mutex_unlock(&adev->lock);
3750 ril_register_set_wb_amr_callback(audio_set_wb_amr_callback, (void *)adev);
3752 *device = &adev->hw_device.common;