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

Commit 61e0f9b9 authored by Narsinga Rao Chella's avatar Narsinga Rao Chella
Browse files

hal: add support for Fluence Broadside

ADSP supports Fluence Broadside algorithm in Speaker Phone mode
for voice call and audio recording usecases. Add support for
the same in audio HAL.

Change-Id: I6682f72f8f47ce1f261511cb150e506de6f3dddb
CRs-fixed: 590495
parent 48a220ae
Loading
Loading
Loading
Loading
+42 −6
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ struct platform_data {
    bool fluence_in_voice_rec;
    bool fluence_in_audio_rec;
    int  fluence_type;
    int  fluence_mode;
    int  btsco_sample_rate;
    bool slowtalk;
    bool is_i2s_ext_modem;
@@ -245,6 +246,11 @@ static const char * const device_table[SND_DEVICE_MAX] = {
    [SND_DEVICE_IN_HANDSET_STEREO_DMIC] = "handset-stereo-dmic-ef",
    [SND_DEVICE_IN_SPEAKER_STEREO_DMIC] = "speaker-stereo-dmic-ef",
    [SND_DEVICE_IN_CAPTURE_VI_FEEDBACK] = "vi-feedback",
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE] = "voice-speaker-dmic-broadside",
    [SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE] = "speaker-dmic-broadside",
    [SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE] = "speaker-dmic-broadside",
    [SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE] = "speaker-dmic-broadside",
    [SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE] = "speaker-dmic-broadside",
};

/* ACDB IDs (audio DSP path configuration IDs) for each sound device */
@@ -318,6 +324,11 @@ static int acdb_device_table[SND_DEVICE_MAX] = {
    [SND_DEVICE_IN_HANDSET_STEREO_DMIC] = 34,
    [SND_DEVICE_IN_SPEAKER_STEREO_DMIC] = 35,
    [SND_DEVICE_IN_CAPTURE_VI_FEEDBACK] = 102,
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE] = 12,
    [SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE] = 12,
    [SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE] = 119,
    [SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE] = 121,
    [SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE] = 120,
};

struct snd_device_index {
@@ -396,6 +407,11 @@ struct snd_device_index snd_device_name_index[SND_DEVICE_MAX] = {
    {TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_STEREO_DMIC)},
    {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_STEREO_DMIC)},
    {TO_NAME_INDEX(SND_DEVICE_IN_CAPTURE_VI_FEEDBACK)},
    {TO_NAME_INDEX(SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE)},
    {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE)},
    {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE)},
    {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE)},
    {TO_NAME_INDEX(SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE)},
};

#define DEEP_BUFFER_PLATFORM_DELAY (29*1000LL)
@@ -663,6 +679,7 @@ void *platform_init(struct audio_device *adev)
    my_data->fluence_in_voice_rec = false;
    my_data->fluence_in_audio_rec = false;
    my_data->fluence_type = FLUENCE_NONE;
    my_data->fluence_mode = FLUENCE_ENDFIRE;

    property_get("ro.qc.sdk.audio.fluencetype", value, "");
    if (!strncmp("fluencepro", value, sizeof("fluencepro"))) {
@@ -693,6 +710,11 @@ void *platform_init(struct audio_device *adev)
        if (!strncmp("true", value, sizeof("true"))) {
            my_data->fluence_in_spkr_mode = true;
        }

        property_get("persist.audio.fluence.mode",value,"");
        if (!strncmp("broadside", value, sizeof("broadside"))) {
            my_data->fluence_mode = FLUENCE_BROADSIDE;
        }
    }

    my_data->voice_feature_set = VOICE_FEATURE_SET_DEFAULT;
@@ -1344,6 +1366,9 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
                    snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC;
                } else {
                    adev->acdb_settings |= DMIC_FLAG;
                    if (my_data->fluence_mode == FLUENCE_BROADSIDE)
                       snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE;
                    else
                       snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC;
                }
            } else {
@@ -1379,6 +1404,9 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
                if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
                    if (my_data->fluence_type & FLUENCE_DUAL_MIC &&
                       my_data->fluence_in_spkr_mode) {
                        if (my_data->fluence_mode == FLUENCE_BROADSIDE)
                            snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE;
                        else
                            snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS;
                        adev->acdb_settings |= DMIC_FLAG;
                    } else
@@ -1395,7 +1423,11 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
                set_echo_reference(adev->mixer, EC_REF_RX);
            } else if (adev->active_input->enable_aec) {
                if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
                    if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
                    if (my_data->fluence_type & FLUENCE_DUAL_MIC &&
                        my_data->fluence_in_spkr_mode) {
                        if (my_data->fluence_mode == FLUENCE_BROADSIDE)
                            snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE;
                        else
                            snd_device = SND_DEVICE_IN_SPEAKER_DMIC_AEC;
                        adev->acdb_settings |= DMIC_FLAG;
                    } else
@@ -1412,7 +1444,11 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
                set_echo_reference(adev->mixer, EC_REF_RX);
            } else if (adev->active_input->enable_ns) {
                if (in_device & AUDIO_DEVICE_IN_BACK_MIC) {
                    if (my_data->fluence_type & FLUENCE_DUAL_MIC) {
                    if (my_data->fluence_type & FLUENCE_DUAL_MIC &&
                        my_data->fluence_in_spkr_mode) {
                        if (my_data->fluence_mode == FLUENCE_BROADSIDE)
                            snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE;
                        else
                            snd_device = SND_DEVICE_IN_SPEAKER_DMIC_NS;
                        adev->acdb_settings |= DMIC_FLAG;
                    } else
+11 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
 * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
 * Not a Contribution.
 *
 * Copyright (C) 2013 The Android Open Source Project
@@ -26,6 +26,11 @@ enum {
    FLUENCE_QUAD_MIC = 0x2,
};

enum {
    FLUENCE_ENDFIRE = 0x1,
    FLUENCE_BROADSIDE = 0x2,
};

/*
 * Below are the devices for which is back end is same, SLIMBUS_0_RX.
 * All these devices are handled by the internal HW codec. We can
@@ -120,6 +125,11 @@ enum {
    SND_DEVICE_IN_HANDSET_STEREO_DMIC,
    SND_DEVICE_IN_SPEAKER_STEREO_DMIC,
    SND_DEVICE_IN_CAPTURE_VI_FEEDBACK,
    SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BROADSIDE,
    SND_DEVICE_IN_SPEAKER_DMIC_BROADSIDE,
    SND_DEVICE_IN_SPEAKER_DMIC_AEC_BROADSIDE,
    SND_DEVICE_IN_SPEAKER_DMIC_NS_BROADSIDE,
    SND_DEVICE_IN_SPEAKER_DMIC_AEC_NS_BROADSIDE,
    SND_DEVICE_IN_END,

    SND_DEVICE_MAX = SND_DEVICE_IN_END,