Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6f0a9c2 authored by Vignesh Kulothungan's avatar Vignesh Kulothungan Committed by Andrew Chant
Browse files

hal: Add support for Mic break detection

Send request to driver, to enable mic break detection algorithm in ADSP
based on system feature flag during the start of a voice call.

Bug: 69979011
Test: Built and verified with calls that without changes to ACDB files,
mixer toggle is harmless.  ACDB modification testing in progress.
Change-Id: Ifef68005741f3ae538a7b3c414bc8cd0f817915c
parent 04b8cf1d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -5676,6 +5676,8 @@ static int adev_open(const hw_module_t *module, const char *name,
        }
    }

    adev->mic_break_enabled = property_get_bool("vendor.audio.mic_break", false);

    // commented as full set of app type cfg is sent from platform
    // audio_extn_utils_send_default_app_type_cfg(adev->platform, adev->mixer);
    audio_device_ref_count++;
+1 −0
Original line number Diff line number Diff line
@@ -328,6 +328,7 @@ struct audio_device {
    bool mic_muted;
    bool enable_voicerx;
    bool enable_hfp;
    bool mic_break_enabled;

    int snd_card;
    void *platform;
+5 −0
Original line number Diff line number Diff line
@@ -1621,6 +1621,11 @@ int platform_stop_voice_call(void *platform __unused, uint32_t vsid __unused)
    return 0;
}

int platform_set_mic_break_det(void *platform __unused, bool enable __unused)
{
    return 0;
}

int platform_get_sample_rate(void *platform __unused, uint32_t *rate __unused)
{
    return 0;
+20 −0
Original line number Diff line number Diff line
@@ -2311,6 +2311,26 @@ int platform_stop_voice_call(void *platform, uint32_t vsid)
    return ret;
}

int platform_set_mic_break_det(void *platform, bool enable)
{
    int ret = 0;
    struct platform_data *my_data = (struct platform_data *)platform;
    struct audio_device *adev = my_data->adev;
    const char *mixer_ctl_name = "Voice Mic Break Enable";
    struct mixer_ctl *ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
    if (!ctl) {
        ALOGE("%s: Could not get ctl for mixer cmd - %s",
              __func__, mixer_ctl_name);
        return -EINVAL;
    }

    ret = mixer_ctl_set_value(ctl, 0, enable);
    if(ret)
        ALOGE("%s: Failed to set mixer ctl: %s", __func__, mixer_ctl_name);

    return ret;
}

int platform_get_sample_rate(void *platform, uint32_t *rate)
{
    struct platform_data *my_data = (struct platform_data *)platform;
+1 −0
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ int platform_switch_voice_call_usecase_route_post(void *platform,
                                                  snd_device_t in_snd_device);
int platform_start_voice_call(void *platform, uint32_t vsid);
int platform_stop_voice_call(void *platform, uint32_t vsid);
int platform_set_mic_break_det(void *platform, bool enable);
int platform_set_voice_volume(void *platform, int volume);
void platform_set_speaker_gain_in_combo(struct audio_device *adev,
                                        snd_device_t snd_device,
Loading