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

Commit 4031d505 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "misc: qcom: qdsp6v2: modify amr decoder driver"

parents 8944c79f 8c9ff010
Loading
Loading
Loading
Loading
+48 −0
Original line number Original line Diff line number Diff line
@@ -14,6 +14,9 @@
 * GNU General Public License for more details.
 * GNU General Public License for more details.
 *
 *
 */
 */

#include <linux/types.h>
#include <linux/compat.h>
#include "audio_utils_aio.h"
#include "audio_utils_aio.h"


static struct miscdevice audio_amrnb_misc;
static struct miscdevice audio_amrnb_misc;
@@ -68,6 +71,50 @@ static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
	return rc;
	return rc;
}
}


static long audio_compat_ioctl(struct file *file, unsigned int cmd,
			       unsigned long arg)
{
	struct q6audio_aio *audio = file->private_data;
	int rc = 0;

	switch (cmd) {
	case AUDIO_START: {
		pr_debug("%s[%pK]: AUDIO_START session_id[%d]\n", __func__,
				audio, audio->ac->session);
		if (audio->feedback == NON_TUNNEL_MODE) {
			/* Configure PCM output block */
			rc = q6asm_enc_cfg_blk_pcm(audio->ac,
					audio->pcm_cfg.sample_rate,
					audio->pcm_cfg.channel_count);
			if (rc < 0) {
				pr_err("pcm output block config failed\n");
				break;
			}
		}

		rc = audio_aio_enable(audio);
		audio->eos_rsp = 0;
		audio->eos_flag = 0;
		if (!rc) {
			audio->enabled = 1;
		} else {
			audio->enabled = 0;
			pr_err("Audio Start procedure failed rc=%d\n", rc);
			break;
		}
		pr_debug("AUDIO_START success enable[%d]\n", audio->enabled);
		if (audio->stopped == 1)
			audio->stopped = 0;
		break;
	}
	default:
		pr_debug("%s[%pK]: Calling utils ioctl\n", __func__, audio);
		rc = audio->codec_compat_ioctl(file, cmd, arg);
	}
	return rc;
}


static int audio_open(struct inode *inode, struct file *file)
static int audio_open(struct inode *inode, struct file *file)
{
{
	struct q6audio_aio *audio = NULL;
	struct q6audio_aio *audio = NULL;
@@ -157,6 +204,7 @@ static const struct file_operations audio_amrnb_fops = {
	.release = audio_aio_release,
	.release = audio_aio_release,
	.unlocked_ioctl = audio_ioctl,
	.unlocked_ioctl = audio_ioctl,
	.fsync = audio_aio_fsync,
	.fsync = audio_aio_fsync,
	.compat_ioctl = audio_compat_ioctl
};
};


static struct miscdevice audio_amrnb_misc = {
static struct miscdevice audio_amrnb_misc = {
+48 −0
Original line number Original line Diff line number Diff line
@@ -15,6 +15,8 @@
 *
 *
 */
 */


#include <linux/compat.h>
#include <linux/types.h>
#include "audio_utils_aio.h"
#include "audio_utils_aio.h"


static struct miscdevice audio_amrwb_misc;
static struct miscdevice audio_amrwb_misc;
@@ -71,6 +73,51 @@ static long audio_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
	return rc;
	return rc;
}
}


static long audio_compat_ioctl(struct file *file, unsigned int cmd,
			       unsigned long arg)
{
	struct q6audio_aio *audio = file->private_data;
	int rc = 0;

	switch (cmd) {
	case AUDIO_START: {
		pr_debug("%s[%pK]: AUDIO_START session_id[%d]\n", __func__,
				audio, audio->ac->session);
		if (audio->feedback == NON_TUNNEL_MODE) {
			/* Configure PCM output block */
			rc = q6asm_enc_cfg_blk_pcm(audio->ac,
					audio->pcm_cfg.sample_rate,
					audio->pcm_cfg.channel_count);
			if (rc < 0) {
				pr_err("pcm output block config failed\n");
				break;
			}
		}

		rc = audio_aio_enable(audio);
		audio->eos_rsp = 0;
		audio->eos_flag = 0;
		if (!rc) {
			audio->enabled = 1;
		} else {
			audio->enabled = 0;
			pr_err("Audio Start procedure failed rc=%d\n", rc);
			break;
		}
		pr_debug("%s: AUDIO_START sessionid[%d]enable[%d]\n", __func__,
				audio->ac->session,
				audio->enabled);
		if (audio->stopped == 1)
			audio->stopped = 0;
		break;
	}
	default:
		pr_debug("%s[%pK]: Calling utils ioctl\n", __func__, audio);
		rc = audio->codec_compat_ioctl(file, cmd, arg);
	}
	return rc;
}

static int audio_open(struct inode *inode, struct file *file)
static int audio_open(struct inode *inode, struct file *file)
{
{
	struct q6audio_aio *audio = NULL;
	struct q6audio_aio *audio = NULL;
@@ -161,6 +208,7 @@ static const struct file_operations audio_amrwb_fops = {
	.release = audio_aio_release,
	.release = audio_aio_release,
	.unlocked_ioctl = audio_ioctl,
	.unlocked_ioctl = audio_ioctl,
	.fsync = audio_aio_fsync,
	.fsync = audio_aio_fsync,
	.compat_ioctl = audio_compat_ioctl
};
};


static struct miscdevice audio_amrwb_misc = {
static struct miscdevice audio_amrwb_misc = {