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

Commit 837535b9 authored by Bharath Ramachandramurthy's avatar Bharath Ramachandramurthy Committed by Gerrit - the friendly Code Review server
Browse files

audio: stop reading sound trigger lab data on SSR

While sound trigger lab data being read, if CPE SSR
happens the pcm read returns -ENETRESET. Instead of
updating the sound card sate, mark the sound trigger
state as inactive to avoid reading the lab data from
driver. Marking the session as inactive handle both
CPE and ADSP SSR scenarios where HAL is prevented
to read from kernel.

Change-Id: Id82eed597c01265a7d26f17e5ac3c5cd0e17adbf
CRs-fixed: 790726
parent 2d3bb446
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@ void audio_extn_sound_trigger_check_and_get_session(struct stream_in *in)
            in->config = st_ses_info->st_ses.config;
            in->channel_mask = audio_channel_in_mask_from_count(in->config.channels);
            in->is_st_session = true;
            in->is_st_session_active = true;
            ALOGD("%s: capture_handle %d is sound trigger", __func__, in->capture_handle);
            break;
        }
+15 −1
Original line number Diff line number Diff line
@@ -2571,6 +2571,12 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,
            ALOGD(" %s: sound card is not active/SSR state", __func__);
            ret= -EIO;;
            goto exit;
        } else {
            if (in->is_st_session &&  !in->is_st_session_active) {
                ALOGD(" %s: Sound trigger is not active/SSR", __func__);
                ret= -EIO;;
                goto exit;
            }
        }
    }

@@ -2615,7 +2621,15 @@ exit:
    /* ToDo: There may be a corner case when SSR happens back to back during
       start/stop. Need to post different error to handle that. */
    if (-ENETRESET == ret) {
        /* CPE SSR results in kernel returning ENETRESET for sound trigger
          session reading on LAB data. In this case do not set sound card state
          offline, instead mark this sound trigger session inactive to avoid
          further reading of LAB data from CPE driver. Marking the session
          inactive handles both CPE and ADSP SSR for sound trigger session */
        if (!in->is_st_session)
            set_snd_card_state(adev,SND_CARD_STATE_OFFLINE);
        else
            in->is_st_session_active = false;
    }
    pthread_mutex_unlock(&in->lock);

+1 −0
Original line number Diff line number Diff line
@@ -232,6 +232,7 @@ struct stream_in {
    audio_format_t format;
    audio_io_handle_t capture_handle;
    bool is_st_session;
    bool is_st_session_active;

    struct audio_device *dev;
};