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

Unverified Commit 409e52bc authored by Luca Stefani's avatar Luca Stefani Committed by Michael Bestas
Browse files

audio: msm8916: Squashed audio amp commits

commit e821aba3b7603328f5b54877ae49c968db9f041e
Author: Scott Mertz <scott@cyngn.com>
Date:   Fri Sep 11 12:13:08 2015 -0700

    hal: notify amplifier of parameter changes

    Change-Id: Iecc020c0347ae7c43d27183186e06dcefef7a0dd

commit 338f1b9c00aaa3830b44f030c255f974e781519a
Author: Dan Pasanen <dan.pasanen@gmail.com>
Date:   Mon Aug 10 19:55:39 2015 -0500

    hal: only open the amplifier once

    Change-Id: Ie9bbff74123e90b71e95809a84dcb3bbe9ba82fe

commit d79e906e7d34369a2444bc6827bfb0fb57dc2c55
Author: Dan Pasanen <dan.pasanen@gmail.com>
Date:   Mon Aug 10 19:47:43 2015 -0500

    hal: enable amplifier earlier

    Change-Id: Id876e8f836e3ce1ee5f8186ca9c0e6ef5f37182c

commit dfa41b007c557c30c87842d67c3089b624b45253
Author: Ethan Chen <intervigil@gmail.com>
Date:   Fri Jul 3 21:35:30 2015 -0700

    hal: Notify amplifier of device enable/disable

    Change-Id: Ice808c9b55a9e3bc8bafe5ca3ff555377d38dd8f

commit 44448ed866ca8d1fbcce558504151e8f1ea9e480
Author: Ethan Chen <intervigil@gmail.com>
Date:   Sun Jun 7 12:32:08 2015 -0700

    hal: Convert libaudioamp to audio_amplifier HAL

    Change-Id: I1d0f63a46989d1792d7a5e08d2bdb6344ebafa31

commit cb832553f11b79acc16772bd3f930a9d38f748c5
Author: Scott Mertz <scott@cyngn.com>
Date:   Sat Jun 6 13:46:03 2015 -0700

    audio: add amplifier stream start/standby operations

    Change-Id: I5de7ad7a0467e7cf822c9c0870a755c03d05e884

commit 1437a75bee9d016dc58e10220cd69ae4c1454f24
Author: Daniel Hillenbrand <codeworkx@cyanogenmod.org>
Date:   Thu May 23 10:10:00 2013 +0530

    hal: Support the audio amplifier hook

    * Original legacy HAL commit:
      Ib236598a5888b2af19bcfb81e285f644a0e84c0d
    * Example: http://review.cyanogenmod.org/38221

    Change-Id: Ic944a9f7059c78b79322dae9c787cdd8bb029cff

Change-Id: I4ea9556a327b31ad2a39f182b8ac7114693f2ac6
parent 6359e0bf
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -232,6 +232,7 @@ endif
LOCAL_SHARED_LIBRARIES := \
	liblog \
	libcutils \
	libhardware \
	libtinyalsa \
	libtinycompress \
	libaudioroute \
@@ -243,6 +244,7 @@ LOCAL_C_INCLUDES += \
	external/tinyalsa/include \
	external/tinycompress/include \
	external/expat/lib \
	hardware/libhardware/include \
	$(call include-path-for, audio-route) \
	$(call include-path-for, audio-effects) \
	$(LOCAL_PATH)/$(AUDIO_PLATFORM) \
+158 −0
Original line number Diff line number Diff line
@@ -232,6 +232,133 @@ static unsigned int audio_device_ref_count;

__unused static int set_voice_volume_l(struct audio_device *adev, float volume);

static amplifier_device_t * get_amplifier_device(void)
{
    if (adev)
        return adev->amp;

    return NULL;
}

static int amplifier_open(void)
{
    int rc;
    amplifier_module_t *module;

    rc = hw_get_module(AMPLIFIER_HARDWARE_MODULE_ID,
            (const hw_module_t **) &module);
    if (rc) {
        ALOGV("%s: Failed to obtain reference to amplifier module: %s\n",
                __func__, strerror(-rc));
        return -ENODEV;
    }

    rc = amplifier_device_open((const hw_module_t *) module, &adev->amp);
    if (rc) {
        ALOGV("%s: Failed to open amplifier hardware device: %s\n",
                __func__, strerror(-rc));
        return -ENODEV;
    }

    return 0;
}

static int amplifier_set_input_devices(uint32_t devices)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->set_input_devices)
        return amp->set_input_devices(amp, devices);

    return 0;
}

static int amplifier_set_output_devices(uint32_t devices)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->set_output_devices)
        return amp->set_output_devices(amp, devices);

    return 0;
}

static int amplifier_enable_devices(uint32_t devices, bool enable)
{
    amplifier_device_t *amp = get_amplifier_device();
    bool is_output = devices < SND_DEVICE_OUT_END;

    if (amp && amp->enable_output_devices && is_output)
        return amp->enable_output_devices(amp, devices, enable);

    if (amp && amp->enable_input_devices && !is_output)
        return amp->enable_input_devices(amp, devices, enable);

    return 0;
}

static int amplifier_set_mode(audio_mode_t mode)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->set_mode)
        return amp->set_mode(amp, mode);

    return 0;
}

static int amplifier_output_stream_start(struct audio_stream_out *stream,
        bool offload)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->output_stream_start)
        return amp->output_stream_start(amp, stream, offload);

    return 0;
}

static int amplifier_input_stream_start(struct audio_stream_in *stream)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->input_stream_start)
        return amp->input_stream_start(amp, stream);

    return 0;
}

static int amplifier_output_stream_standby(struct audio_stream_out *stream)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->output_stream_standby)
        return amp->output_stream_standby(amp, stream);

    return 0;
}

static int amplifier_input_stream_standby(struct audio_stream_in *stream)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->input_stream_standby)
        return amp->input_stream_standby(amp, stream);

    return 0;
}

static int amplifier_set_parameters(struct str_parms *parms)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp && amp->set_parameters)
        return amp->set_parameters(amp, parms);

    return 0;
}

static int amplifier_close(void)
{
    amplifier_device_t *amp = get_amplifier_device();
    if (amp)
        amplifier_device_close(amp);

    return 0;
}

static int check_and_set_gapless_mode(struct audio_device *adev) {


@@ -503,6 +630,7 @@ int enable_snd_device(struct audio_device *adev,
            return -EINVAL;
        }
        audio_extn_dev_arbi_acquire(snd_device);
        amplifier_enable_devices(snd_device, true);
        audio_route_apply_and_update_path(adev->audio_route, device_name);
    }
    return 0;
@@ -551,6 +679,7 @@ int disable_snd_device(struct audio_device *adev,
            audio_extn_spkr_prot_stop_processing(snd_device);
        } else {
            audio_route_reset_and_update_path(adev->audio_route, device_name);
            amplifier_enable_devices(snd_device, false);
            audio_extn_dev_arbi_release(snd_device);
        }

@@ -937,6 +1066,10 @@ int select_devices(struct audio_device *adev, audio_usecase_t uc_id)

    enable_audio_route(adev, usecase);

    /* Rely on amplifier_set_devices to distinguish between in/out devices */
    amplifier_set_input_devices(in_snd_device);
    amplifier_set_output_devices(out_snd_device);

    /* Applicable only on the targets that has external modem.
     * Enable device command should be sent to modem only after
     * enabling voice call mixer controls
@@ -1714,7 +1847,11 @@ static int out_standby(struct audio_stream *stream)
    lock_output_stream(out);
    if (!out->standby) {
        pthread_mutex_lock(&adev->lock);

        amplifier_output_stream_standby((struct audio_stream_out *) stream);

        out->standby = true;

        if (!is_offload_usecase(out->usecase)) {
            if (out->pcm) {
                pcm_close(out->pcm);
@@ -2020,6 +2157,11 @@ static ssize_t out_write(struct audio_stream_out *stream, const void *buffer,
            ret = voice_extn_compress_voip_start_output_stream(out);
        else
            ret = start_output_stream(out);

        if (ret == 0)
            amplifier_output_stream_start(stream,
                    is_offload_usecase(out->usecase));

        pthread_mutex_unlock(&adev->lock);
        /* ToDo: If use case is compress offload should return 0 */
        if (ret != 0) {
@@ -2376,6 +2518,9 @@ static int in_standby(struct audio_stream *stream)

    if (!in->standby) {
        pthread_mutex_lock(&adev->lock);

        amplifier_input_stream_standby((struct audio_stream_in *) stream);

        in->standby = true;
        if (in->pcm) {
            pcm_close(in->pcm);
@@ -2510,6 +2655,10 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,
                ret = voice_extn_compress_voip_start_input_stream(in);
            else
                ret = start_input_stream(in);

            if (ret == 0)
                amplifier_input_stream_start(stream);

            pthread_mutex_unlock(&adev->lock);
            if (ret != 0) {
                goto exit;
@@ -3087,6 +3236,7 @@ static int adev_set_parameters(struct audio_hw_device *dev, const char *kvpairs)
    }

    audio_extn_set_parameters(adev, parms);
    amplifier_set_parameters(parms);

done:
    str_parms_destroy(parms);
@@ -3185,6 +3335,8 @@ static int adev_set_mode(struct audio_hw_device *dev, audio_mode_t mode)
    pthread_mutex_lock(&adev->lock);
    if (adev->mode != mode) {
        ALOGD("%s: mode %d\n", __func__, mode);
        if (amplifier_set_mode(mode) != 0)
            ALOGE("Failed setting amplifier mode");
        adev->mode = mode;
        if ((mode == AUDIO_MODE_NORMAL || mode == AUDIO_MODE_IN_COMMUNICATION) &&
                voice_is_in_call(adev)) {
@@ -3539,6 +3691,8 @@ static int adev_close(hw_device_t *device)
    pthread_mutex_lock(&adev_init_lock);

    if ((--audio_device_ref_count) == 0) {
        if (amplifier_close() != 0)
            ALOGE("Amplifier close failed");
        audio_extn_sound_trigger_deinit(adev);
        audio_extn_listen_deinit(adev);
        audio_extn_utils_release_streams_output_cfg_list(&adev->streams_output_cfg_list);
@@ -3688,6 +3842,10 @@ static int adev_open(const hw_module_t *module, const char *name,
    adev->bt_wb_speech_enabled = false;

    audio_extn_ds2_enable(adev);

    if (amplifier_open() != 0)
        ALOGE("Amplifier initialization failed");

    *device = &adev->device.common;

    audio_extn_utils_update_streams_output_cfg_list(adev->platform, adev->mixer,
+2 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#define QCOM_AUDIO_HW_H

#include <cutils/list.h>
#include <hardware/audio_amplifier.h>
#include <hardware/audio.h>
#include <tinyalsa/asoundlib.h>
#include <tinycompress/tinycompress.h>
@@ -308,6 +309,7 @@ struct audio_device {
     * or other capabilities are present for the device corresponding to that usecase.
     */
    struct pcm_params *use_case_table[AUDIO_USECASE_MAX];
    amplifier_device_t *amp;
};

int select_devices(struct audio_device *adev,