misc: qcom: qdsp6v2: SSR recovery support for NT decoder

Post ENETRESET error to omx component during SSR.

CRs-Fixed: 1044635
Change-Id: I8c5b8ffc62d34a44bfb47ec4f11477d4320d30a8
Signed-off-by: Dhanalakshmi Siddani <dsiddani@codeaurora.org>
This commit is contained in:
Dhanalakshmi Siddani 2016-08-10 14:27:04 +05:30 committed by Gerrit - the friendly Code Review server
parent d2afad6a90
commit a605f4fab2
3 changed files with 13 additions and 4 deletions

View file

@ -692,7 +692,7 @@ static int audio_aio_events_pending(struct q6audio_aio *audio)
spin_lock_irqsave(&audio->event_queue_lock, flags);
empty = !list_empty(&audio->event_queue);
spin_unlock_irqrestore(&audio->event_queue_lock, flags);
return empty || audio->event_abort;
return empty || audio->event_abort || audio->reset_event;
}
static long audio_aio_process_event_req_common(struct q6audio_aio *audio,
@ -720,6 +720,12 @@ static long audio_aio_process_event_req_common(struct q6audio_aio *audio,
if (rc < 0)
return rc;
if (audio->reset_event) {
audio->reset_event = false;
pr_err("In SSR, post ENETRESET err\n");
return -ENETRESET;
}
if (audio->event_abort) {
audio->event_abort = 0;
return -ENODEV;
@ -1327,6 +1333,7 @@ int audio_aio_open(struct q6audio_aio *audio, struct file *file)
audio->drv_ops.out_flush(audio);
audio->opened = 1;
audio->reset_event = false;
file->private_data = audio;
audio->codec_ioctl = audio_aio_ioctl;
audio->codec_compat_ioctl = audio_aio_compat_ioctl;

View file

@ -1,6 +1,6 @@
/* Copyright (C) 2008 Google, Inc.
* Copyright (C) 2008 HTC Corporation
* Copyright (c) 2009-2015, The Linux Foundation. All rights reserved.
* Copyright (c) 2009-2016, The Linux Foundation. All rights reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@ -199,6 +199,7 @@ struct q6audio_aio {
int feedback;
int rflush; /* Read flush */
int wflush; /* Write flush */
bool reset_event;
long (*codec_ioctl)(struct file *, unsigned int, unsigned long);
long (*codec_compat_ioctl)(struct file *, unsigned int, unsigned long);
};

View file

@ -1,4 +1,4 @@
/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@ -107,8 +107,9 @@ void audio_aio_cb(uint32_t opcode, uint32_t token,
audio_aio_post_event(audio, AUDIO_EVENT_STREAM_INFO, e_payload);
break;
case RESET_EVENTS:
pr_debug("%s: Received opcode:0x%x\n", __func__, opcode);
pr_err("%s: Received opcode:0x%x\n", __func__, opcode);
audio->stopped = 1;
audio->reset_event = true;
wake_up(&audio->event_wait);
break;
default: