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

Commit 9b589022 authored by Aditya Bavanari's avatar Aditya Bavanari
Browse files

hal: Add support for BCL feature in sm6150

Add a new persist node to check whether BCL is
enabled or not to differentiate from legacy VBAT
feature. Use this node to select the VBAT sound
devices. BCL does not need any calibration unlike
legacy VBAT, use BCL persist node and avoid
sending calibration.

CRs-Fixed: 2225097
Change-Id: I1ce8eb08de9bd0e49457f645730c103282f0d496
parent c491616d
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ struct audio_extn_module {
    uint32_t proxy_channel_num;
    bool hpx_enabled;
    bool vbat_enabled;
    bool bcl_enabled;
    bool hifi_audio_enabled;
    bool ras_enabled;
    struct aptx_dec_bt_addr addr;
@@ -414,6 +415,25 @@ bool audio_extn_can_use_vbat(void)
    ALOGD("%s: vbat.enabled property is set to %s", __func__, prop_vbat_enabled);
    return (aextnmod.vbat_enabled ? true: false);
}

bool audio_extn_is_bcl_enabled(void)
{
    ALOGD("%s: status: %d", __func__, aextnmod.bcl_enabled);
    return (aextnmod.bcl_enabled ? true: false);
}

bool audio_extn_can_use_bcl(void)
{
    char prop_bcl_enabled[PROPERTY_VALUE_MAX] = "false";

    property_get("persist.vendor.audio.bcl.enabled", prop_bcl_enabled, "0");
    if (!strncmp("true", prop_bcl_enabled, 4)) {
        aextnmod.bcl_enabled = 1;
    }

    ALOGD("%s: bcl.enabled property is set to %s", __func__, prop_bcl_enabled);
    return (aextnmod.bcl_enabled ? true: false);
}
#endif

#ifdef RAS_ENABLED
@@ -824,6 +844,7 @@ void audio_extn_init(struct audio_device *adev)
    aextnmod.proxy_channel_num = 2;
    aextnmod.hpx_enabled = 0;
    aextnmod.vbat_enabled = 0;
    aextnmod.bcl_enabled = 0;
    aextnmod.hifi_audio_enabled = 0;
    aextnmod.addr.nap = 0;
    aextnmod.addr.uap = 0;
+4 −0
Original line number Diff line number Diff line
@@ -169,9 +169,13 @@ void audio_extn_set_aanc_noise_level(struct audio_device *adev,
#ifndef VBAT_MONITOR_ENABLED
#define audio_extn_is_vbat_enabled()                     (0)
#define audio_extn_can_use_vbat()                        (0)
#define audio_extn_is_bcl_enabled()                     (0)
#define audio_extn_can_use_bcl()                        (0)
#else
bool audio_extn_is_vbat_enabled(void);
bool audio_extn_can_use_vbat(void);
bool audio_extn_is_bcl_enabled(void);
bool audio_extn_can_use_bcl(void);
#endif

#ifndef RAS_ENABLED
+12 −4
Original line number Diff line number Diff line
@@ -238,6 +238,7 @@ struct platform_data {
    bool is_acdb_initialized;
    /* Vbat monitor related flags */
    bool is_vbat_speaker;
    bool is_bcl_speaker;
    bool gsm_mode_enabled;
    bool is_slimbus_interface;
    bool is_internal_codec;
@@ -1751,6 +1752,9 @@ static void send_codec_cal(acdb_loader_get_calibration_t acdb_loader_get_calibra
        ret = 0;

        if ((plat_data->is_vbat_speaker) && (WCD9XXX_VBAT_CAL == type)) {
           /* VBAT BCL speaker does not need tuning data */
           if (!plat_data->is_bcl_speaker)
               return;
           ret = send_vbat_adc_data_to_acdb(plat_data, cal_name_info[type]);
           if (ret < 0)
               ALOGE("%s error in sending vbat adc data to acdb", __func__);
@@ -2218,6 +2222,10 @@ void *platform_init(struct audio_device *adev)
    if (ret)
        my_data->is_vbat_speaker = true;

    ret = audio_extn_can_use_bcl();
    if (ret)
        my_data->is_bcl_speaker = true;

    list_init(&my_data->acdb_meta_key_list);

    set_platform_defaults(my_data);
@@ -3392,7 +3400,7 @@ int platform_switch_voice_call_enable_device_config(void *platform,
         out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_VBAT ||
         out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT) &&
         audio_extn_spkr_prot_is_enabled()) {
        if (my_data->is_vbat_speaker)
        if (my_data->is_vbat_speaker || my_data->is_bcl_speaker)
            acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT];
        else
            acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED];
@@ -3467,7 +3475,7 @@ int platform_switch_voice_call_usecase_route_post(void *platform,
         out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_VBAT ||
         out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER_2_VBAT) &&
         audio_extn_spkr_prot_is_enabled()) {
        if (my_data->is_vbat_speaker)
        if (my_data->is_vbat_speaker || my_data->is_bcl_speaker)
            acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT];
         else
            acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED];
@@ -3989,7 +3997,7 @@ snd_device_t platform_get_output_snd_device(void *platform, struct stream_out *o
            else
                snd_device = SND_DEVICE_OUT_BT_SCO;
        } else if (devices & AUDIO_DEVICE_OUT_SPEAKER) {
                if (my_data->is_vbat_speaker) {
                if (my_data->is_vbat_speaker || my_data->is_bcl_speaker) {
                    if (hw_info_is_stereo_spkr(my_data->hw_info)) {
                        if (my_data->mono_speaker == SPKR_1)
                            snd_device = SND_DEVICE_OUT_VOICE_SPEAKER_VBAT;
@@ -4073,7 +4081,7 @@ snd_device_t platform_get_output_snd_device(void *platform, struct stream_out *o
            snd_device = SND_DEVICE_OUT_SPEAKER_EXTERNAL_2;
        else if (adev->speaker_lr_swap)
            snd_device = SND_DEVICE_OUT_SPEAKER_REVERSE;
        else if (my_data->is_vbat_speaker)
        else if (my_data->is_vbat_speaker || my_data->is_bcl_speaker)
            snd_device = SND_DEVICE_OUT_SPEAKER_VBAT;
        else
            snd_device = SND_DEVICE_OUT_SPEAKER;