diff options
author | codeworkx <codeworkx@cyanogenmod.com> | 2012-11-17 22:57:33 +0100 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.com> | 2012-11-18 18:51:29 +0100 |
commit | d437bdc0c727eb10dfb9db1c979e6f4d3034cb6e (patch) | |
tree | ee6b002e29424be8551897a5f27fa72fd05d2216 /audio | |
parent | 126dab8a417b32dc85436bac97d6ddcee3b39e67 (diff) | |
download | device_samsung_i9300-d437bdc0c727eb10dfb9db1c979e6f4d3034cb6e.zip device_samsung_i9300-d437bdc0c727eb10dfb9db1c979e6f4d3034cb6e.tar.gz device_samsung_i9300-d437bdc0c727eb10dfb9db1c979e6f4d3034cb6e.tar.bz2 |
i9300: implement noise suppression for calls
Change-Id: Iadf1c59ae5d94364bccad97ca2f49d6a68c80244
Diffstat (limited to 'audio')
-rwxr-xr-x | audio/audio_hw.c | 15 | ||||
-rw-r--r-- | audio/audio_hw.h | 18 | ||||
-rwxr-xr-x | audio/ril_interface.c | 12 | ||||
-rwxr-xr-x | audio/ril_interface.h | 11 |
4 files changed, 55 insertions, 1 deletions
diff --git a/audio/audio_hw.c b/audio/audio_hw.c index 42c6122..e0e306c 100755 --- a/audio/audio_hw.c +++ b/audio/audio_hw.c @@ -2504,6 +2504,21 @@ static int adev_set_parameters(struct audio_hw_device *dev, const char *kvpairs) adev->screen_off = true; } + ret = str_parms_get_str(parms, "noise_suppression", value, sizeof(value)); + if (ret >= 0) { + if (strcmp(value, "true") == 0) { + ALOGE("%s: enabling two mic control", __func__); + ril_set_two_mic_control(&adev->ril, AUDIENCE, TWO_MIC_SOLUTION_ON); + /* sub mic */ + set_bigroute_by_array(adev->mixer, noise_suppression, 1); + } else { + ALOGE("%s: disabling two mic control", __func__); + ril_set_two_mic_control(&adev->ril, AUDIENCE, TWO_MIC_SOLUTION_OFF); + /* sub mic */ + set_bigroute_by_array(adev->mixer, noise_suppression_disable, 1); + } + } + str_parms_destroy(parms); return ret; } diff --git a/audio/audio_hw.h b/audio/audio_hw.h index b01ab33..4f0919a 100644 --- a/audio/audio_hw.h +++ b/audio/audio_hw.h @@ -161,6 +161,24 @@ struct route_setting default_input_disable[] = { { .ctl_name = NULL, }, }; +struct route_setting noise_suppression[] = { + { .ctl_name = "Sub Mic Switch", .intval = 1, }, + { .ctl_name = "IN1R Volume", .intval = 25, }, + { .ctl_name = "MIXINR IN1R Switch", .intval = 1, }, + { .ctl_name = "MIXINR IN1R Volume", .intval = 0, }, + { .ctl_name = "AIF1ADCR Source", .intval = 1, }, + { .ctl_name = "AIF2ADCR Source", .intval = 1, }, + { .ctl_name = NULL, }, +}; + +struct route_setting noise_suppression_disable[] = { + { .ctl_name = "Sub Mic Switch", .intval = 0, }, + { .ctl_name = "IN1R Volume", .intval = 7, }, + { .ctl_name = "MIXINR IN1R Switch", .intval = 0, }, + { .ctl_name = "MIXINR IN1R Volume", .intval = 0, }, + { .ctl_name = NULL, }, +}; + struct route_setting headset_input[] = { { .ctl_name = "MIXINL IN1L Switch", .intval = 0, }, { .ctl_name = "MIXINR IN1R Switch", .intval = 0, }, diff --git a/audio/ril_interface.c b/audio/ril_interface.c index 89a0aef..a77efc0 100755 --- a/audio/ril_interface.c +++ b/audio/ril_interface.c @@ -37,6 +37,7 @@ int (*_ril_disconnect)(void *); int (*_ril_set_call_volume)(void *, enum ril_sound_type, int); int (*_ril_set_call_audio_path)(void *, enum ril_audio_path); int (*_ril_set_call_clock_sync)(void *, enum ril_clock_state); +int (*_ril_set_two_mic_control)(void *, enum ril_two_mic_device, enum ril_two_mic_state); int (*_ril_register_unsolicited_handler)(void *, int, void *); int (*_ril_get_wb_amr)(void *, void *); @@ -106,6 +107,7 @@ int ril_open(struct ril_handle *ril) _ril_set_call_volume = dlsym(ril->handle, "SetCallVolume"); _ril_set_call_audio_path = dlsym(ril->handle, "SetCallAudioPath"); _ril_set_call_clock_sync = dlsym(ril->handle, "SetCallClockSync"); + _ril_set_two_mic_control = dlsym(ril->handle, "SetTwoMicControl"); _ril_register_unsolicited_handler = dlsym(ril->handle, "RegisterUnsolicitedHandler"); /* since this function is not supported in all RILs, don't require it */ @@ -113,7 +115,7 @@ int ril_open(struct ril_handle *ril) if (!_ril_open_client || !_ril_close_client || !_ril_connect || !_ril_is_connected || !_ril_disconnect || !_ril_set_call_volume || - !_ril_set_call_audio_path || !_ril_set_call_clock_sync || + !_ril_set_call_audio_path || !_ril_set_two_mic_control || !_ril_set_call_clock_sync || !_ril_register_unsolicited_handler) { ALOGE("Cannot get symbols from '%s'", RIL_CLIENT_LIBPATH); dlclose(ril->handle); @@ -181,3 +183,11 @@ int ril_set_call_clock_sync(struct ril_handle *ril, enum ril_clock_state state) return _ril_set_call_clock_sync(ril->client, state); } + +int ril_set_two_mic_control(struct ril_handle *ril, enum ril_two_mic_device device, enum ril_two_mic_state state) +{ + if (ril_connect_if_required(ril)) + return 0; + + return _ril_set_two_mic_control(ril->client, device, state); +} diff --git a/audio/ril_interface.h b/audio/ril_interface.h index 676772c..4b401aa 100755 --- a/audio/ril_interface.h +++ b/audio/ril_interface.h @@ -60,6 +60,16 @@ enum ril_clock_state { SOUND_CLOCK_START }; +enum ril_two_mic_device { + AUDIENCE, + FORTEMEDIA +}; + +enum ril_two_mic_state { + TWO_MIC_SOLUTION_OFF, + TWO_MIC_SOLUTION_ON +}; + /* Function prototypes */ int ril_open(struct ril_handle *ril); int ril_close(struct ril_handle *ril); @@ -68,5 +78,6 @@ int ril_set_call_volume(struct ril_handle *ril, enum ril_sound_type sound_type, int ril_set_call_audio_path(struct ril_handle *ril, enum ril_audio_path path); int ril_set_call_clock_sync(struct ril_handle *ril, enum ril_clock_state state); void ril_register_set_wb_amr_callback(void *function, void *data); +int ril_set_two_mic_control(struct ril_handle *ril, enum ril_two_mic_device device, enum ril_two_mic_state state); #endif |