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

Commit f5998333 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "Hal: Initial commit for B-family targets"

parents 79515762 8e5a4f60
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
ifneq ($(filter msm8960 msm8226 msm8x26 msm8974 msm8x74,$(TARGET_BOARD_PLATFORM)),)
ifneq ($(filter msm8960 msm8226 msm8x26 msm8610 msm8974 msm8x74,$(TARGET_BOARD_PLATFORM)),)


MY_LOCAL_PATH := $(call my-dir)
MY_LOCAL_PATH := $(call my-dir)


+5 −2
Original line number Original line Diff line number Diff line
@@ -7,9 +7,12 @@ include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_ARM_MODE := arm


AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter msm8974 msm8226,$(TARGET_BOARD_PLATFORM)),)
ifneq ($(filter msm8974 msm8226 msm8610,$(TARGET_BOARD_PLATFORM)),)
  # B-family platform uses msm8974 code base
  # B-family platform uses msm8974 code base
  AUDIO_PLATFORM = msm8974
  AUDIO_PLATFORM = msm8974
ifneq ($(filter msm8610,$(TARGET_BOARD_PLATFORM)),)
  LOCAL_CFLAGS := -DPLATFORM_MSM8610
endif
endif
endif


LOCAL_SRC_FILES := \
LOCAL_SRC_FILES := \
@@ -30,7 +33,7 @@ LOCAL_C_INCLUDES += \
	$(call include-path-for, audio-effects) \
	$(call include-path-for, audio-effects) \
	$(LOCAL_PATH)/$(AUDIO_PLATFORM)
	$(LOCAL_PATH)/$(AUDIO_PLATFORM)


LOCAL_MODULE := audio.primary.$(AUDIO_PLATFORM)
LOCAL_MODULE := audio.primary.$(TARGET_BOARD_PLATFORM)


LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw


+1 −0
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@


/* Flags used to initialize acdb_settings variable that goes to ACDB library */
/* Flags used to initialize acdb_settings variable that goes to ACDB library */
#define DMIC_FLAG       0x00000002
#define DMIC_FLAG       0x00000002
#define QMIC_FLAG       0x00000004
#define TTY_MODE_OFF    0x00000010
#define TTY_MODE_OFF    0x00000010
#define TTY_MODE_FULL   0x00000020
#define TTY_MODE_FULL   0x00000020
#define TTY_MODE_VCO    0x00000040
#define TTY_MODE_VCO    0x00000040
+46 −62
Original line number Original line Diff line number Diff line
@@ -29,10 +29,6 @@
#define LIB_ACDB_LOADER "libacdbloader.so"
#define LIB_ACDB_LOADER "libacdbloader.so"
#define LIB_CSD_CLIENT "libcsd-client.so"
#define LIB_CSD_CLIENT "libcsd-client.so"


#define DUALMIC_CONFIG_NONE 0      /* Target does not contain 2 mics */
#define DUALMIC_CONFIG_ENDFIRE 1
#define DUALMIC_CONFIG_BROADSIDE 2

/*
/*
 * This is the sysfs path for the HDMI audio data block
 * This is the sysfs path for the HDMI audio data block
 */
 */
@@ -80,6 +76,7 @@ struct platform_data {
    bool fluence_in_spkr_mode;
    bool fluence_in_spkr_mode;
    bool fluence_in_voice_call;
    bool fluence_in_voice_call;
    bool fluence_in_voice_rec;
    bool fluence_in_voice_rec;
    int  fluence_type;
    int  dualmic_config;
    int  dualmic_config;


    void *acdb_handle;
    void *acdb_handle;
@@ -140,19 +137,15 @@ static const char * const device_table[SND_DEVICE_MAX] = {
    [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic",
    [SND_DEVICE_IN_HDMI_MIC] = "hdmi-mic",
    [SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic",
    [SND_DEVICE_IN_BT_SCO_MIC] = "bt-sco-mic",
    [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic",
    [SND_DEVICE_IN_CAMCORDER_MIC] = "camcorder-mic",
    [SND_DEVICE_IN_VOICE_DMIC_EF] = "voice-dmic-ef",
    [SND_DEVICE_IN_VOICE_DMIC] = "voice-dmic-ef",
    [SND_DEVICE_IN_VOICE_DMIC_BS] = "voice-dmic-bs",
    [SND_DEVICE_IN_VOICE_DMIC_TMUS] = "voice-dmic-ef-tmus",
    [SND_DEVICE_IN_VOICE_DMIC_EF_TMUS] = "voice-dmic-ef-tmus",
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = "voice-speaker-dmic-ef",
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF] = "voice-speaker-dmic-ef",
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS] = "voice-speaker-dmic-bs",
    [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic",
    [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = "voice-tty-full-headset-mic",
    [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic",
    [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = "voice-tty-vco-handset-mic",
    [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic",
    [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = "voice-tty-hco-headset-mic",
    [SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic",
    [SND_DEVICE_IN_VOICE_REC_MIC] = "voice-rec-mic",
    [SND_DEVICE_IN_VOICE_REC_DMIC_EF] = "voice-rec-dmic-ef",
    [SND_DEVICE_IN_VOICE_REC_DMIC] = "voice-rec-dmic-ef",
    [SND_DEVICE_IN_VOICE_REC_DMIC_BS] = "voice-rec-dmic-bs",
    [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = "voice-rec-dmic-ef-fluence",
    [SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE] = "voice-rec-dmic-ef-fluence",
    [SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE] = "voice-rec-dmic-bs-fluence",
};
};


/* ACDB IDs (audio DSP path configuration IDs) for each sound device */
/* ACDB IDs (audio DSP path configuration IDs) for each sound device */
@@ -184,20 +177,16 @@ static const int acdb_device_table[SND_DEVICE_MAX] = {
    [SND_DEVICE_IN_HDMI_MIC] = 4,
    [SND_DEVICE_IN_HDMI_MIC] = 4,
    [SND_DEVICE_IN_BT_SCO_MIC] = 21,
    [SND_DEVICE_IN_BT_SCO_MIC] = 21,
    [SND_DEVICE_IN_CAMCORDER_MIC] = 61,
    [SND_DEVICE_IN_CAMCORDER_MIC] = 61,
    [SND_DEVICE_IN_VOICE_DMIC_EF] = 6,
    [SND_DEVICE_IN_VOICE_DMIC] = 6,
    [SND_DEVICE_IN_VOICE_DMIC_BS] = 5,
    [SND_DEVICE_IN_VOICE_DMIC_TMUS] = 91,
    [SND_DEVICE_IN_VOICE_DMIC_EF_TMUS] = 91,
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC] = 13,
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF] = 13,
    [SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS] = 12,
    [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16,
    [SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC] = 16,
    [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36,
    [SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC] = 36,
    [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16,
    [SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC] = 16,
    [SND_DEVICE_IN_VOICE_REC_MIC] = 62,
    [SND_DEVICE_IN_VOICE_REC_MIC] = 62,
    /* TODO: Update with proper acdb ids */
    /* TODO: Update with proper acdb ids */
    [SND_DEVICE_IN_VOICE_REC_DMIC_EF] = 62,
    [SND_DEVICE_IN_VOICE_REC_DMIC] = 62,
    [SND_DEVICE_IN_VOICE_REC_DMIC_BS] = 62,
    [SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE] = 6,
    [SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE] = 6,
    [SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE] = 5,
};
};


static pthread_once_t check_op_once_ctl = PTHREAD_ONCE_INIT;
static pthread_once_t check_op_once_ctl = PTHREAD_ONCE_INIT;
@@ -265,33 +254,33 @@ void *platform_init(struct audio_device *adev)
    my_data = calloc(1, sizeof(struct platform_data));
    my_data = calloc(1, sizeof(struct platform_data));


    my_data->adev = adev;
    my_data->adev = adev;
    my_data->dualmic_config = DUALMIC_CONFIG_NONE;
    my_data->fluence_in_spkr_mode = false;
    my_data->fluence_in_spkr_mode = false;
    my_data->fluence_in_voice_call = false;
    my_data->fluence_in_voice_call = false;
    my_data->fluence_in_voice_rec = false;
    my_data->fluence_in_voice_rec = false;
    my_data->fluence_type = FLUENCE_NONE;


    property_get("persist.audio.dualmic.config",value,"");
    property_get("ro.qc.sdk.audio.fluencetype", value, "");
    if (!strcmp("broadside", value)) {
    if (!strncmp("fluencepro", value, sizeof("fluencepro"))) {
        my_data->dualmic_config = DUALMIC_CONFIG_BROADSIDE;
        my_data->fluence_type = FLUENCE_QUAD_MIC;
        adev->acdb_settings |= DMIC_FLAG;
    } else if (!strncmp("fluence", value, sizeof("fluence"))) {
    } else if (!strcmp("endfire", value)) {
        my_data->fluence_type = FLUENCE_DUAL_MIC;
        my_data->dualmic_config = DUALMIC_CONFIG_ENDFIRE;
    } else {
        adev->acdb_settings |= DMIC_FLAG;
        my_data->fluence_type = FLUENCE_NONE;
    }
    }


    if (my_data->dualmic_config != DUALMIC_CONFIG_NONE) {
    if (my_data->fluence_type != FLUENCE_NONE) {
        property_get("persist.audio.fluence.voicecall",value,"");
        property_get("persist.audio.fluence.voicecall",value,"");
        if (!strcmp("true", value)) {
        if (!strncmp("true", value, sizeof("true"))) {
            my_data->fluence_in_voice_call = true;
            my_data->fluence_in_voice_call = true;
        }
        }


        property_get("persist.audio.fluence.voicerec",value,"");
        property_get("persist.audio.fluence.voicerec",value,"");
        if (!strcmp("true", value)) {
        if (!strncmp("true", value, sizeof("true"))) {
            my_data->fluence_in_voice_rec = true;
            my_data->fluence_in_voice_rec = true;
        }
        }


        property_get("persist.audio.fluence.speaker",value,"");
        property_get("persist.audio.fluence.speaker",value,"");
        if (!strcmp("true", value)) {
        if (!strncmp("true", value, sizeof("true"))) {
            my_data->fluence_in_spkr_mode = true;
            my_data->fluence_in_spkr_mode = true;
        }
        }
    }
    }
@@ -683,30 +672,31 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
        }
        }
        if (out_device & AUDIO_DEVICE_OUT_EARPIECE ||
        if (out_device & AUDIO_DEVICE_OUT_EARPIECE ||
            out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) {
            out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE) {
            if (my_data->fluence_in_voice_call == false) {
            if (my_data->fluence_type == FLUENCE_NONE ||
                my_data->fluence_in_voice_call == false) {
                snd_device = SND_DEVICE_IN_HANDSET_MIC;
                snd_device = SND_DEVICE_IN_HANDSET_MIC;
            } else {
            } else {
                if (my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) {
                if (is_operator_tmus())
                if (is_operator_tmus())
                        snd_device = SND_DEVICE_IN_VOICE_DMIC_EF_TMUS;
                    snd_device = SND_DEVICE_IN_VOICE_DMIC_TMUS;
                else
                else
                        snd_device = SND_DEVICE_IN_VOICE_DMIC_EF;
                    snd_device = SND_DEVICE_IN_VOICE_DMIC;
                } else if(my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE)
                adev->acdb_settings |= DMIC_FLAG;
                    snd_device = SND_DEVICE_IN_VOICE_DMIC_BS;
                else
                    snd_device = SND_DEVICE_IN_HANDSET_MIC;
            }
            }
        } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
        } else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET) {
            snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC;
            snd_device = SND_DEVICE_IN_VOICE_HEADSET_MIC;
        } else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) {
        } else if (out_device & AUDIO_DEVICE_OUT_ALL_SCO) {
            snd_device = SND_DEVICE_IN_BT_SCO_MIC ;
            snd_device = SND_DEVICE_IN_BT_SCO_MIC ;
        } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) {
        } else if (out_device & AUDIO_DEVICE_OUT_SPEAKER) {
            if (my_data->fluence_in_voice_call && my_data->fluence_in_spkr_mode &&
            if (my_data->fluence_type != FLUENCE_NONE &&
                    my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) {
                my_data->fluence_in_voice_call &&
                snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF;
                my_data->fluence_in_spkr_mode) {
            } else if (my_data->fluence_in_voice_call && my_data->fluence_in_spkr_mode &&
                if(my_data->fluence_type == FLUENCE_DUAL_MIC) {
                    my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) {
                    adev->acdb_settings |= DMIC_FLAG;
                snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS;
                    snd_device = SND_DEVICE_IN_VOICE_SPEAKER_DMIC;
                } else {
                    adev->acdb_settings |= QMIC_FLAG;
                    snd_device = SND_DEVICE_IN_VOICE_SPEAKER_QMIC;
                }
            } else {
            } else {
                snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
                snd_device = SND_DEVICE_IN_VOICE_SPEAKER_MIC;
            }
            }
@@ -718,21 +708,15 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
        }
        }
    } else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) {
    } else if (source == AUDIO_SOURCE_VOICE_RECOGNITION) {
        if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
        if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) {
            if (my_data->dualmic_config == DUALMIC_CONFIG_ENDFIRE) {
                if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK)
                    snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_EF;
                else if (my_data->fluence_in_voice_rec)
                    snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE;
            } else if (my_data->dualmic_config == DUALMIC_CONFIG_BROADSIDE) {
            if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK)
            if (channel_mask == AUDIO_CHANNEL_IN_FRONT_BACK)
                    snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_BS;
                snd_device = SND_DEVICE_IN_VOICE_REC_DMIC;
            else if (my_data->fluence_in_voice_rec)
            else if (my_data->fluence_in_voice_rec)
                    snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE;
                snd_device = SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE;
            }


            if (snd_device == SND_DEVICE_NONE) {
            if (snd_device == SND_DEVICE_NONE)
                snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
                snd_device = SND_DEVICE_IN_VOICE_REC_MIC;
            }
            else
                adev->acdb_settings |= DMIC_FLAG;
        }
        }
    } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
    } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) {
        if (out_device & AUDIO_DEVICE_OUT_SPEAKER)
        if (out_device & AUDIO_DEVICE_OUT_SPEAKER)
+12 −9
Original line number Original line Diff line number Diff line
@@ -17,6 +17,12 @@
#ifndef QCOM_AUDIO_PLATFORM_H
#ifndef QCOM_AUDIO_PLATFORM_H
#define QCOM_AUDIO_PLATFORM_H
#define QCOM_AUDIO_PLATFORM_H


enum {
    FLUENCE_NONE,
    FLUENCE_DUAL_MIC,
    FLUENCE_QUAD_MIC
};

/*
/*
 * Below are the devices for which is back end is same, SLIMBUS_0_RX.
 * 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
 * All these devices are handled by the internal HW codec. We can
@@ -69,19 +75,16 @@ enum {
    SND_DEVICE_IN_HDMI_MIC,
    SND_DEVICE_IN_HDMI_MIC,
    SND_DEVICE_IN_BT_SCO_MIC,
    SND_DEVICE_IN_BT_SCO_MIC,
    SND_DEVICE_IN_CAMCORDER_MIC,
    SND_DEVICE_IN_CAMCORDER_MIC,
    SND_DEVICE_IN_VOICE_DMIC_EF,
    SND_DEVICE_IN_VOICE_DMIC,
    SND_DEVICE_IN_VOICE_DMIC_BS,
    SND_DEVICE_IN_VOICE_DMIC_TMUS,
    SND_DEVICE_IN_VOICE_DMIC_EF_TMUS,
    SND_DEVICE_IN_VOICE_SPEAKER_DMIC,
    SND_DEVICE_IN_VOICE_SPEAKER_DMIC_EF,
    SND_DEVICE_IN_VOICE_SPEAKER_QMIC,
    SND_DEVICE_IN_VOICE_SPEAKER_DMIC_BS,
    SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC,
    SND_DEVICE_IN_VOICE_TTY_FULL_HEADSET_MIC,
    SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC,
    SND_DEVICE_IN_VOICE_TTY_VCO_HANDSET_MIC,
    SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC,
    SND_DEVICE_IN_VOICE_TTY_HCO_HEADSET_MIC,
    SND_DEVICE_IN_VOICE_REC_MIC,
    SND_DEVICE_IN_VOICE_REC_MIC,
    SND_DEVICE_IN_VOICE_REC_DMIC_EF,
    SND_DEVICE_IN_VOICE_REC_DMIC,
    SND_DEVICE_IN_VOICE_REC_DMIC_BS,
    SND_DEVICE_IN_VOICE_REC_DMIC_FLUENCE,
    SND_DEVICE_IN_VOICE_REC_DMIC_EF_FLUENCE,
    SND_DEVICE_IN_VOICE_REC_DMIC_BS_FLUENCE,
    SND_DEVICE_IN_END,
    SND_DEVICE_IN_END,


    SND_DEVICE_MAX = SND_DEVICE_IN_END,
    SND_DEVICE_MAX = SND_DEVICE_IN_END,
Loading