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

Commit 0d1507a8 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Promotion of audio-userspace.lnx.2.2-00041.

CRs      Change ID                                   Subject
--------------------------------------------------------------------------------------------------------------
1099039   Iff762fb6dd56641ca83a6ec91178731f5ba779d0   hal: Add support for ULLPP for proaudio
1099039   I7c603bfd79ebb0acdb51ac3ce4d06799c06119dc   hal: Add audio output policy config for pro audio
2003481   I484f52c13ecddec7638261cad11394b362677763   hal: update the notification of HDMI/DisplayPort connect
2009610   I72cf0e67124585a6092561b5c8807fe6e33ca0df   configs: sdm660: Update the acdb id of spkr_prot for int
1099039   Idb2f0d4981b60b1cf8cc0836cb84d38803308ab4   policy_hal: Support vr audio concurrency

Change-Id: I56ae5b7c1f277ac0b63204c497d4618f47bff6cf
CRs-Fixed: 1099039, 2003481, 2009610
parents 83c37e36 94937c1c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -18,6 +18,13 @@ outputs {
    bit_width 16
    app_type 69937
  }
  proaudio {
    flags AUDIO_OUTPUT_FLAG_FAST|AUDIO_OUTPUT_FLAG_RAW
    formats AUDIO_FORMAT_PCM_16_BIT
    sampling_rates 48000
    bit_width 16
    app_type 69943
  }
  deep_buffer {
    flags AUDIO_OUTPUT_FLAG_DEEP_BUFFER
    formats AUDIO_FORMAT_PCM_16_BIT
+5 −5
Original line number Diff line number Diff line
@@ -76,11 +76,11 @@
    </config_params>
    <acdb_ids>
        <device name="SND_DEVICE_OUT_SPEAKER" acdb_id="15"/>
        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="136"/>
        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" acdb_id="136"/>
        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" acdb_id="136"/>
        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" acdb_id="136"/>
        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" acdb_id="137"/>
        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED" acdb_id="124"/>
        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED" acdb_id="101"/>
        <device name="SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT" acdb_id="124"/>
        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT" acdb_id="101"/>
        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK" acdb_id="102"/>
        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED" acdb_id="150"/>
        <device name="SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT" acdb_id="150"/>
        <device name="SND_DEVICE_IN_CAPTURE_VI_FEEDBACK_MONO_1" acdb_id="151"/>
+2 −0
Original line number Diff line number Diff line
@@ -106,6 +106,8 @@
/* Set or Query stream profile type */
#define AUDIO_PARAMETER_STREAM_PROFILE "audio_stream_profile"

#define AUDIO_PARAMETER_KEY_VR_AUDIO_MODE "vr_audio_mode_on"

/* audio input flags for compress and timestamp mode.
 * check other input flags defined in audio.h for conflicts
 */
+38 −3
Original line number Diff line number Diff line
@@ -180,6 +180,41 @@ static int update_ext_disp_sysfs_node(const struct audio_device *adev, int node_
    return ret;
}

static int update_audio_ack_state(const struct audio_device *adev, int node_value)
{
    const char *mixer_ctl_name = "External Display Audio Ack";
    struct mixer_ctl *ctl;
    int ret = 0;

    ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
    /* If no mixer command support, fall back to sysfs node approach */
    if (!ctl) {
        ALOGI("%s: could not get ctl for mixer cmd(%s), use sysfs node instead\n",
              __func__, mixer_ctl_name);
        ret = update_ext_disp_sysfs_node(adev, node_value);
    } else {
        char *ack_str = NULL;

        if (node_value == EXT_DISPLAY_PLUG_STATUS_NOTIFY_ENABLE)
            ack_str = "Ack_Enable";
        else if (node_value == 1)
            ack_str = "Connect";
        else if (node_value == 0)
            ack_str = "Disconnect";
        else {
            ALOGE("%s: Invalid input parameter - 0x%x\n",
                  __func__, node_value);
            return -EINVAL;
        }

        ret = mixer_ctl_set_enum_by_string(ctl, ack_str);
        if (ret)
            ALOGE("%s: Could not set ctl for mixer cmd - %s ret %d\n",
                  __func__, mixer_ctl_name, ret);
    }
    return ret;
}

static void audio_extn_ext_disp_set_parameters(const struct audio_device *adev,
                                                     struct str_parms *parms)
{
@@ -192,13 +227,13 @@ static void audio_extn_ext_disp_set_parameters(const struct audio_device *adev,
        if (is_hdmi_sysfs_node_init == false) {
            //check if this is different for dp and hdmi
            is_hdmi_sysfs_node_init = true;
            update_ext_disp_sysfs_node(adev, EXT_DISPLAY_PLUG_STATUS_NOTIFY_ENABLE);
            update_audio_ack_state(adev, EXT_DISPLAY_PLUG_STATUS_NOTIFY_ENABLE);
        }
        update_ext_disp_sysfs_node(adev, 1);
        update_audio_ack_state(adev, 1);
    } else if(str_parms_get_str(parms, "disconnect", value, sizeof(value)) >= 0
            && (atoi(value) & AUDIO_DEVICE_OUT_AUX_DIGITAL)){
        //params = "disconnect=1024" for external display disconnection.
        update_ext_disp_sysfs_node(adev, 0);
        update_audio_ack_state(adev, 0);
        ALOGV("invalidate cached edid");
        platform_invalidate_hdmi_config(adev->platform);
    } else {
+19 −3
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ const struct string_to_enum s_flag_name_to_enum_table[] = {
    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT_PCM),
    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY),
    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_FAST),
    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_RAW),
    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER),
    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD),
    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING),
@@ -192,7 +193,7 @@ static audio_io_flags_t parse_flag_names(char *name)
        flag_name = strtok_r(NULL, "|", &last_r);
    }

    ALOGV("parse_flag_names: flag - %d", flag);
    ALOGV("parse_flag_names: flag - %x", flag);
    io_flags.in_flags = (audio_input_flags_t)flag;
    io_flags.out_flags = (audio_output_flags_t)flag;
    return io_flags;
@@ -676,8 +677,8 @@ void audio_extn_utils_update_stream_output_app_type_cfg(void *platform,
              __func__, sample_rate, bit_width);
    }

    ALOGV("%s: flags: %x, format: %x sample_rate %d, profile %s",
           __func__, flags, format, sample_rate, profile);
    ALOGV("%s: flags: %x, format: %x sample_rate %d, profile %s, app_type %d",
           __func__, flags, format, sample_rate, profile, app_type_cfg->app_type);
    list_for_each(node_i, streams_output_cfg_list) {
        s_info = node_to_item(node_i, struct streams_io_cfg, list);
        /* Along with flags do profile matching if set at either end.*/
@@ -725,6 +726,12 @@ static bool audio_is_this_native_usecase(struct audio_usecase *uc)
    return native_usecase;
}


static inline bool audio_is_vr_mode_on(struct audio_device *(__attribute__((unused)) adev))
{
    return adev->vr_audio_mode_enabled;
}

void audio_extn_utils_update_stream_app_type_cfg_for_usecase(
                                    struct audio_device *adev,
                                    struct audio_usecase *usecase)
@@ -789,12 +796,21 @@ static int send_app_type_cfg_for_device(struct audio_device *adev,
    if ((usecase->id != USECASE_AUDIO_PLAYBACK_DEEP_BUFFER) &&
        (usecase->id != USECASE_AUDIO_PLAYBACK_LOW_LATENCY) &&
        (usecase->id != USECASE_AUDIO_PLAYBACK_MULTI_CH) &&
        (usecase->id != USECASE_AUDIO_PLAYBACK_ULL) &&
        (!is_offload_usecase(usecase->id)) &&
        (usecase->type != PCM_CAPTURE)) {
        ALOGV("%s: a rx/tx/loopback path where app type cfg is not required %d", __func__, usecase->id);
        rc = 0;
        goto exit_send_app_type_cfg;
    }

    //if VR is active then only send the mixer control
    if (usecase->id == USECASE_AUDIO_PLAYBACK_ULL && !audio_is_vr_mode_on(adev)) {
            ALOGI("ULL doesnt need sending app type cfg, returning");
            rc = 0;
            goto exit_send_app_type_cfg;
    }

    if (usecase->type == PCM_PLAYBACK) {
        pcm_device_id = platform_get_pcm_device_id(usecase->id, PCM_PLAYBACK);
        snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
Loading