Merge "asoc: vote for Glink Rx thread priority upgrade"
This commit is contained in:
commit
6b6dae7320
1 changed files with 22 additions and 0 deletions
|
@ -614,8 +614,15 @@ static int msm_pcm_open(struct snd_pcm_substream *substream)
|
|||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct snd_soc_pcm_runtime *soc_prtd = substream->private_data;
|
||||
struct msm_audio *prtd;
|
||||
struct msm_plat_data *pdata;
|
||||
int ret = 0;
|
||||
|
||||
pdata = (struct msm_plat_data *)
|
||||
dev_get_drvdata(soc_prtd->platform->dev);
|
||||
if (!pdata) {
|
||||
pr_err("%s: platform data not populated\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
prtd = kzalloc(sizeof(struct msm_audio), GFP_KERNEL);
|
||||
if (prtd == NULL)
|
||||
return -ENOMEM;
|
||||
|
@ -693,6 +700,10 @@ static int msm_pcm_open(struct snd_pcm_substream *substream)
|
|||
prtd->reset_event = false;
|
||||
runtime->private_data = prtd;
|
||||
msm_adsp_init_mixer_ctl_pp_event_queue(soc_prtd);
|
||||
/* Vote to update the Rx thread priority to RT Thread for playback */
|
||||
if ((substream->stream == SNDRV_PCM_STREAM_PLAYBACK) &&
|
||||
(pdata->perf_mode == LOW_LATENCY_PCM_MODE))
|
||||
apr_start_rx_rt(prtd->audio_client->apr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -800,6 +811,7 @@ static int msm_pcm_playback_close(struct snd_pcm_substream *substream)
|
|||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct snd_soc_pcm_runtime *soc_prtd = substream->private_data;
|
||||
struct msm_audio *prtd = runtime->private_data;
|
||||
struct msm_plat_data *pdata;
|
||||
uint32_t timeout;
|
||||
int dir = 0;
|
||||
int ret = 0;
|
||||
|
@ -809,6 +821,16 @@ static int msm_pcm_playback_close(struct snd_pcm_substream *substream)
|
|||
if (prtd->audio_client) {
|
||||
dir = IN;
|
||||
|
||||
/*
|
||||
* Unvote to downgrade the Rx thread priority from
|
||||
* RT Thread for Low-Latency use case.
|
||||
*/
|
||||
pdata = (struct msm_plat_data *)
|
||||
dev_get_drvdata(soc_prtd->platform->dev);
|
||||
if (pdata) {
|
||||
if (pdata->perf_mode == LOW_LATENCY_PCM_MODE)
|
||||
apr_end_rx_rt(prtd->audio_client->apr);
|
||||
}
|
||||
/* determine timeout length */
|
||||
if (runtime->frame_bits == 0 || runtime->rate == 0) {
|
||||
timeout = CMD_EOS_MIN_TIMEOUT_LENGTH;
|
||||
|
|
Loading…
Add table
Reference in a new issue