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

Commit fda003a8 authored by Ben Romberger's avatar Ben Romberger Committed by Banajit Goswami
Browse files

ASoC: msm: qdsp6v2: Add TrueHD HDMI compress pass-though



Add TrueHD audio format for compressed HDMI pass-through

Change-Id: Id8a0b8c3a01c881ae284f13c2c0a36959c2413ac
Signed-off-by: default avatarBen Romberger <bromberg@codeaurora.org>
parent 0b4ab197
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5059,6 +5059,7 @@ struct asm_amrwbplus_fmt_blk_v2 {
#define ASM_MEDIA_FMT_VORBIS                 0x00010C15
#define ASM_MEDIA_FMT_APE                    0x00012F32
#define ASM_MEDIA_FMT_DSD                    0x00012F3E
#define ASM_MEDIA_FMT_TRUEHD                 0x00013215

/* Media format ID for adaptive transform acoustic coding. This
 * ID is used by the #ASM_STREAM_CMD_OPEN_WRITE_COMPRESSED command
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@
#define FORMAT_DSD          0x001d
#define FORMAT_APTX         0x001e
#define FORMAT_GEN_COMPR    0x001f
#define FORMAT_TRUEHD       0x0020

#define ENCDEC_SBCBITRATE   0x0001
#define ENCDEC_IMMEDIATE_DECODE 0x0002
+2 −1
Original line number Diff line number Diff line
@@ -105,7 +105,8 @@
#define SND_AUDIOCODEC_APE                   ((__u32) 0x00000021)
#define SND_AUDIOCODEC_DSD                   ((__u32) 0x00000022)
#define SND_AUDIOCODEC_APTX                  ((__u32) 0x00000023)
#define SND_AUDIOCODEC_MAX                   SND_AUDIOCODEC_APTX
#define SND_AUDIOCODEC_TRUEHD                ((__u32) 0x00000024)
#define SND_AUDIOCODEC_MAX                   SND_AUDIOCODEC_TRUEHD

/*
 * Profile and modes are listed with bit masks. This allows for a
+16 −9
Original line number Diff line number Diff line
@@ -187,7 +187,7 @@ struct msm_compr_audio {

const u32 compr_codecs[] = {
	SND_AUDIOCODEC_AC3, SND_AUDIOCODEC_EAC3, SND_AUDIOCODEC_DTS,
	SND_AUDIOCODEC_DSD};
	SND_AUDIOCODEC_DSD, SND_AUDIOCODEC_TRUEHD};

struct query_audio_effect {
	uint32_t mod_id;
@@ -910,7 +910,7 @@ static void populate_codec_list(struct msm_compr_audio *prtd)
			COMPR_PLAYBACK_MIN_NUM_FRAGMENTS;
	prtd->compr_cap.max_fragments =
			COMPR_PLAYBACK_MAX_NUM_FRAGMENTS;
	prtd->compr_cap.num_codecs = 15;
	prtd->compr_cap.num_codecs = 16;
	prtd->compr_cap.codecs[0] = SND_AUDIOCODEC_MP3;
	prtd->compr_cap.codecs[1] = SND_AUDIOCODEC_AAC;
	prtd->compr_cap.codecs[2] = SND_AUDIOCODEC_AC3;
@@ -926,6 +926,7 @@ static void populate_codec_list(struct msm_compr_audio *prtd)
	prtd->compr_cap.codecs[12] = SND_AUDIOCODEC_DTS;
	prtd->compr_cap.codecs[13] = SND_AUDIOCODEC_DSD;
	prtd->compr_cap.codecs[14] = SND_AUDIOCODEC_APTX;
	prtd->compr_cap.codecs[15] = SND_AUDIOCODEC_TRUEHD;
}

static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
@@ -1180,6 +1181,10 @@ static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
			pr_err("%s: CMD DSD Format block failed ret %d\n",
				__func__, ret);
		break;
	case FORMAT_TRUEHD:
		pr_debug("SND_AUDIOCODEC_TRUEHD\n");
		/* no media format block needed */
		break;
	case FORMAT_APTX:
		pr_debug("SND_AUDIOCODEC_APTX\n");
		memset(&aptx_cfg, 0x0, sizeof(struct aptx_dec_bt_addr_cfg));
@@ -1977,6 +1982,12 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream,
		break;
	}

	case SND_AUDIOCODEC_TRUEHD: {
		pr_debug("%s: SND_AUDIOCODEC_TRUEHD\n", __func__);
		prtd->codec = FORMAT_TRUEHD;
		break;
	}

	case SND_AUDIOCODEC_APTX: {
		pr_debug("%s: SND_AUDIOCODEC_APTX\n", __func__);
		prtd->codec = FORMAT_APTX;
@@ -2844,20 +2855,14 @@ static int msm_compr_get_codec_caps(struct snd_compr_stream *cstream,
				SND_AUDIOSTREAMFORMAT_RAW);
		break;
	case SND_AUDIOCODEC_AC3:
		break;
	case SND_AUDIOCODEC_EAC3:
		break;
	case SND_AUDIOCODEC_FLAC:
		break;
	case SND_AUDIOCODEC_VORBIS:
		break;
	case SND_AUDIOCODEC_ALAC:
		break;
	case SND_AUDIOCODEC_APE:
		break;
	case SND_AUDIOCODEC_DTS:
		break;
	case SND_AUDIOCODEC_DSD:
	case SND_AUDIOCODEC_TRUEHD:
	case SND_AUDIOCODEC_APTX:
		break;
	default:
@@ -3328,6 +3333,7 @@ static int msm_compr_send_dec_params(struct snd_compr_stream *cstream,
	switch (prtd->codec) {
	case FORMAT_MP3:
	case FORMAT_MPEG4_AAC:
	case FORMAT_TRUEHD:
	case FORMAT_APTX:
		pr_debug("%s: no runtime parameters for codec: %d\n", __func__,
			 prtd->codec);
@@ -3395,6 +3401,7 @@ static int msm_compr_dec_params_put(struct snd_kcontrol *kcontrol,
	case FORMAT_APE:
	case FORMAT_DTS:
	case FORMAT_DSD:
	case FORMAT_TRUEHD:
	case FORMAT_APTX:
		pr_debug("%s: no runtime parameters for codec: %d\n", __func__,
			 prtd->codec);
+3 −0
Original line number Diff line number Diff line
@@ -2776,6 +2776,9 @@ static int __q6asm_open_write(struct audio_client *ac, uint32_t format,
	case FORMAT_GEN_COMPR:
		open.dec_fmt_id = ASM_MEDIA_FMT_GENERIC_COMPRESSED;
		break;
	case FORMAT_TRUEHD:
		open.dec_fmt_id = ASM_MEDIA_FMT_TRUEHD;
		break;
	default:
		pr_err("%s: Invalid format 0x%x\n", __func__, format);
		rc = -EINVAL;