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

Commit a41890f3 authored by Srikanth Uyyala's avatar Srikanth Uyyala Committed by Stephen Boyd
Browse files

ASoC: msm: DTS playback support



Compressed driver changes for the DTS support

Change-Id: I595e638da78cced02142f4ee430afb7357eb336c
Signed-off-by: default avatarSrikanth Uyyala <suyyala@codeaurora.org>
parent 8bc70f88
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1127,6 +1127,7 @@ struct asm_stream_cmd_open_read {
#define AC3_DECODER  0x00010BF6
#define EAC3_DECODER 0x00010C3C
#define DTS	0x00010D88
#define DTS_LBR	0x00010DBB
#define ATRAC	0x00010D89
#define MAT	0x00010D8A
#define G711_ALAW_FS 0x00010BF7
+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@
#define FORMAT_ATRAC	0x0016
#define FORMAT_MAT	0x0017
#define FORMAT_AAC	0x0018
#define FORMAT_DTS_LBR 0x0019

#define ENCDEC_SBCBITRATE   0x0001
#define ENCDEC_IMMEDIATE_DECODE 0x0002
+4 −1
Original line number Diff line number Diff line
@@ -72,7 +72,10 @@
#define SND_AUDIOCODEC_IEC61937              ((__u32) 0x0000000B)
#define SND_AUDIOCODEC_G723_1                ((__u32) 0x0000000C)
#define SND_AUDIOCODEC_G729                  ((__u32) 0x0000000D)
#define SND_AUDIOCODEC_MAX                   SND_AUDIOCODEC_G729
#define SND_AUDIOCODEC_DTS_PASS_THROUGH      ((__u32) 0x0000000E)
#define SND_AUDIOCODEC_DTS_LBR               ((__u32) 0x0000000F)
#define SND_AUDIOCODEC_DTS_TRANSCODE_LOOPBACK ((__u32) 0x00000010)
#define SND_AUDIOCODEC_MAX                SND_AUDIOCODEC_DTS_TRANSCODE_LOOPBACK

/*
 * Profile and modes are listed with bit masks. This allows for a
+32 −1
Original line number Diff line number Diff line
@@ -304,6 +304,9 @@ static int msm_compr_playback_prepare(struct snd_pcm_substream *substream)
		pr_debug("compressd playback, no need to send"
			" the decoder params\n");
		break;
	case SND_AUDIOCODEC_DTS_PASS_THROUGH:
		pr_debug("compressd DTS playback,dont send the decoder params\n");
		break;
	case SND_AUDIOCODEC_WMA:
		pr_debug("SND_AUDIOCODEC_WMA\n");
		memset(&wma_cfg, 0x0, sizeof(struct asm_wma_cfg));
@@ -350,6 +353,16 @@ static int msm_compr_playback_prepare(struct snd_pcm_substream *substream)
		if (ret < 0)
			pr_err("%s: CMD Format block failed\n", __func__);
		break;
	case SND_AUDIOCODEC_DTS:
	case SND_AUDIOCODEC_DTS_LBR:
		pr_debug("SND_AUDIOCODEC_DTS\n");
		ret = q6asm_media_format_block(prtd->audio_client,
				compr->codec);
		if (ret < 0) {
			pr_err("%s: CMD Format block failed\n", __func__);
			return ret;
		}
		break;
	default:
		return -EINVAL;
	}
@@ -412,7 +425,9 @@ static int msm_compr_trigger(struct snd_pcm_substream *substream, int cmd)
		prtd->pcm_irq_pos = 0;
		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
			if (compr->info.codec_param.codec.id ==
					SND_AUDIOCODEC_AC3_PASS_THROUGH) {
				SND_AUDIOCODEC_AC3_PASS_THROUGH ||
					compr->info.codec_param.codec.id ==
					SND_AUDIOCODEC_DTS_PASS_THROUGH) {
				msm_pcm_routing_reg_psthr_stream(
					soc_prtd->dai_link->be_id,
					prtd->session_id, substream->stream,
@@ -476,6 +491,9 @@ static void populate_codec_list(struct compr_audio *compr,
	compr->info.compr_cap.codecs[2] = SND_AUDIOCODEC_AC3_PASS_THROUGH;
	compr->info.compr_cap.codecs[3] = SND_AUDIOCODEC_WMA;
	compr->info.compr_cap.codecs[4] = SND_AUDIOCODEC_WMA_PRO;
	compr->info.compr_cap.codecs[5] = SND_AUDIOCODEC_DTS;
	compr->info.compr_cap.codecs[6] = SND_AUDIOCODEC_DTS_LBR;
	compr->info.compr_cap.codecs[7] = SND_AUDIOCODEC_DTS_PASS_THROUGH;
	/* Add new codecs here */
}

@@ -705,6 +723,7 @@ static int msm_compr_hw_params(struct snd_pcm_substream *substream,
	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
		switch (compr->info.codec_param.codec.id) {
		case SND_AUDIOCODEC_AC3_PASS_THROUGH:
		case SND_AUDIOCODEC_DTS_PASS_THROUGH:
			ret = q6asm_open_write_compressed(prtd->audio_client,
					compr->codec);

@@ -847,6 +866,18 @@ static int msm_compr_ioctl(struct snd_pcm_substream *substream,
			pr_debug("SND_AUDIOCODEC_WMA_PRO\n");
			compr->codec = FORMAT_WMA_V10PRO;
			break;
		case SND_AUDIOCODEC_DTS_PASS_THROUGH:
			pr_debug("SND_AUDIOCODEC_DTS_PASS_THROUGH\n");
			compr->codec = FORMAT_DTS;
			break;
		case SND_AUDIOCODEC_DTS:
			pr_debug("SND_AUDIOCODEC_DTS\n");
			compr->codec = FORMAT_DTS;
			break;
		case SND_AUDIOCODEC_DTS_LBR:
			pr_debug("SND_AUDIOCODEC_DTS\n");
			compr->codec = FORMAT_DTS_LBR;
			break;
		default:
			pr_debug("FORMAT_LINEAR_PCM\n");
			compr->codec = FORMAT_LINEAR_PCM;
+15 −0
Original line number Diff line number Diff line
@@ -1329,6 +1329,9 @@ int q6asm_open_write_compressed(struct audio_client *ac, uint32_t format)
	case FORMAT_DTS:
		open.format = DTS;
		break;
	case FORMAT_DTS_LBR:
		open.format = DTS_LBR;
		break;
	case FORMAT_AAC:
		open.format = MPEG4_AAC;
		break;
@@ -1412,6 +1415,12 @@ int q6asm_open_write(struct audio_client *ac, uint32_t format)
	case FORMAT_MP3:
		open.format = MP3;
		break;
	case FORMAT_DTS:
		open.format = DTS;
		break;
	case FORMAT_DTS_LBR:
		open.format = DTS_LBR;
		break;
	default:
		pr_err("%s: Invalid format[%d]\n", __func__, format);
		goto fail_cmd;
@@ -2303,6 +2312,12 @@ int q6asm_media_format_block(struct audio_client *ac, uint32_t format)
	case FORMAT_MP3:
		fmt.format = MP3;
		break;
	case FORMAT_DTS:
		fmt.format = DTS;
		break;
	case FORMAT_DTS_LBR:
		fmt.format = DTS_LBR;
		break;
	default:
		pr_err("Invalid format[%d]\n", format);
		goto fail_cmd;