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

Commit 1c6419a1 authored by Vidyakumar Athota's avatar Vidyakumar Athota
Browse files

hal: enable speaker protection on APQ8084

-Enable speaker protection compilation flag to support
 speaker protection feature for audio playback and voice
 calls on APQ8084
-Append speaker-protected backend name to usecase only
 for APQ8084 to differentiate with regular voice call as
 routing controls are different.

Change-Id: I92ed26c9df0dc2f152e2bbf8b29362e32fff9844
parent d7976be4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ endif
endif

ifneq ($(strip, $(AUDIO_FEATURE_DISABLED_SPKR_PROTECTION)),true)
ifneq ($(filter msm8974,$(TARGET_BOARD_PLATFORM)),)
ifneq ($(filter msm8974 apq8084,$(TARGET_BOARD_PLATFORM)),)
    LOCAL_CFLAGS += -DSPKR_PROT_ENABLED
    LOCAL_SRC_FILES += audio_extn/spkr_protection.c
    LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+9 −7
Original line number Diff line number Diff line
@@ -305,7 +305,8 @@ int enable_snd_device(struct audio_device *adev,
    if(SND_DEVICE_IN_USB_HEADSET_MIC == snd_device)
       audio_extn_usb_start_capture(adev);

    if (snd_device == SND_DEVICE_OUT_SPEAKER &&
    if ((snd_device == SND_DEVICE_OUT_SPEAKER ||
        snd_device == SND_DEVICE_OUT_VOICE_SPEAKER) &&
        audio_extn_spkr_prot_is_enabled()) {
        if (audio_extn_spkr_prot_start_processing(snd_device)) {
            ALOGE("%s: spkr_start_processing failed", __func__);
@@ -364,7 +365,8 @@ int disable_snd_device(struct audio_device *adev,
        if(SND_DEVICE_IN_USB_HEADSET_MIC == snd_device)
            audio_extn_usb_stop_capture(adev);

        if (snd_device == SND_DEVICE_OUT_SPEAKER &&
        if ((snd_device == SND_DEVICE_OUT_SPEAKER ||
            snd_device == SND_DEVICE_OUT_VOICE_SPEAKER) &&
            audio_extn_spkr_prot_is_enabled()) {
            audio_extn_spkr_prot_stop_processing();
        } else
+43 −23
Original line number Diff line number Diff line
@@ -839,6 +839,13 @@ void platform_add_backend_name(char *mixer_path, snd_device_t snd_device)
        strlcat(mixer_path, " capture-fm", MIXER_PATH_MAX_LENGTH);
    else if (snd_device == SND_DEVICE_OUT_TRANSMISSION_FM)
        strlcat(mixer_path, " transmission-fm", MIXER_PATH_MAX_LENGTH);
    else if (snd_device == SND_DEVICE_OUT_VOICE_SPEAKER &&
             audio_extn_spkr_prot_is_enabled() ) {
        char platform[PROPERTY_VALUE_MAX];
        property_get("ro.board.platform", platform, "");
        if (!strncmp("apq8084", platform, sizeof("apq8084")))
            strlcat(mixer_path, " speaker-protected", MIXER_PATH_MAX_LENGTH);
    }
}

int platform_get_pcm_device_id(audio_usecase_t usecase, int device_type)
@@ -997,10 +1004,17 @@ int platform_switch_voice_call_enable_device_config(void *platform,
    int acdb_rx_id, acdb_tx_id;
    int ret = 0;

    if (my_data->csd == NULL)
        return ret;

    if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER &&
        audio_extn_spkr_prot_is_enabled())
        acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED];
    else
        acdb_rx_id = acdb_device_table[out_snd_device];

    acdb_tx_id = acdb_device_table[in_snd_device];

    if (my_data->csd != NULL) {
    if (acdb_rx_id > 0 && acdb_tx_id > 0) {
        ret = my_data->csd->enable_device_config(acdb_rx_id, acdb_tx_id);
        if (ret < 0) {
@@ -1011,7 +1025,7 @@ int platform_switch_voice_call_enable_device_config(void *platform,
        ALOGE("%s: Incorrect ACDB IDs (rx: %d tx: %d)", __func__,
              acdb_rx_id, acdb_tx_id);
    }
    }

    return ret;
}

@@ -1046,22 +1060,28 @@ int platform_switch_voice_call_usecase_route_post(void *platform,
    int acdb_rx_id, acdb_tx_id;
    int ret = 0;

    if (my_data->csd == NULL)
        return ret;

    if (out_snd_device == SND_DEVICE_OUT_VOICE_SPEAKER &&
        audio_extn_spkr_prot_is_enabled())
        acdb_rx_id = acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED];
    else
        acdb_rx_id = acdb_device_table[out_snd_device];

    acdb_tx_id = acdb_device_table[in_snd_device];

    if (my_data->csd != NULL) {
    if (acdb_rx_id > 0 && acdb_tx_id > 0) {
        ret = my_data->csd->enable_device(acdb_rx_id, acdb_tx_id,
                                          my_data->adev->acdb_settings);
        if (ret < 0) {
                ALOGE("%s: csd_enable_device, failed, error %d",
                      __func__, ret);
            ALOGE("%s: csd_enable_device, failed, error %d", __func__, ret);
        }
    } else {
        ALOGE("%s: Incorrect ACDB IDs (rx: %d tx: %d)", __func__,
              acdb_rx_id, acdb_tx_id);
    }
    }

    return ret;
}