File Index
Files and directories
Sign in
FILE

q6dsp-common.c

File preview with syntax highlighting.

linux-6.19.14/sound/soc/qcom/qdsp6/q6dsp-common.c C
  1// SPDX-License-Identifier: GPL-2.0
  2// Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
  3// Copyright (c) 2018, Linaro Limited
  4
  5#include "q6dsp-common.h"
  6#include <linux/kernel.h>
  7#include <linux/module.h>
  8#include <linux/string.h>
  9#include <linux/errno.h>
 10
 11int q6dsp_map_channels(u8 ch_map[PCM_MAX_NUM_CHANNEL], int ch)
 12{
 13	memset(ch_map, 0, PCM_MAX_NUM_CHANNEL);
 14
 15	switch (ch) {
 16	case 1:
 17		ch_map[0] = PCM_CHANNEL_FC;
 18		break;
 19	case 2:
 20		ch_map[0] = PCM_CHANNEL_FL;
 21		ch_map[1] = PCM_CHANNEL_FR;
 22		break;
 23	case 3:
 24		ch_map[0] = PCM_CHANNEL_FL;
 25		ch_map[1] = PCM_CHANNEL_FR;
 26		ch_map[2] = PCM_CHANNEL_FC;
 27		break;
 28	case 4:
 29		ch_map[0] = PCM_CHANNEL_FL;
 30		ch_map[1] = PCM_CHANNEL_FR;
 31		ch_map[2] = PCM_CHANNEL_LS;
 32		ch_map[3] = PCM_CHANNEL_RS;
 33		break;
 34	case 5:
 35		ch_map[0] = PCM_CHANNEL_FL;
 36		ch_map[1] = PCM_CHANNEL_FR;
 37		ch_map[2] = PCM_CHANNEL_FC;
 38		ch_map[3] = PCM_CHANNEL_LS;
 39		ch_map[4] = PCM_CHANNEL_RS;
 40		break;
 41	case 6:
 42		ch_map[0] = PCM_CHANNEL_FL;
 43		ch_map[1] = PCM_CHANNEL_FR;
 44		ch_map[2] = PCM_CHANNEL_LFE;
 45		ch_map[3] = PCM_CHANNEL_FC;
 46		ch_map[4] = PCM_CHANNEL_LS;
 47		ch_map[5] = PCM_CHANNEL_RS;
 48		break;
 49	case 8:
 50		ch_map[0] = PCM_CHANNEL_FL;
 51		ch_map[1] = PCM_CHANNEL_FR;
 52		ch_map[2] = PCM_CHANNEL_LFE;
 53		ch_map[3] = PCM_CHANNEL_FC;
 54		ch_map[4] = PCM_CHANNEL_LS;
 55		ch_map[5] = PCM_CHANNEL_RS;
 56		ch_map[6] = PCM_CHANNEL_LB;
 57		ch_map[7] = PCM_CHANNEL_RB;
 58		break;
 59	default:
 60		return -EINVAL;
 61	}
 62
 63	return 0;
 64}
 65EXPORT_SYMBOL_GPL(q6dsp_map_channels);
 66
 67int q6dsp_get_channel_allocation(int channels)
 68{
 69	int channel_allocation;
 70
 71	/* HDMI spec CEA-861-E: Table 28 Audio InfoFrame Data Byte 4 */
 72	switch (channels) {
 73	case 2:
 74		channel_allocation = 0;
 75		break;
 76	case 3:
 77		channel_allocation = 0x02;
 78		break;
 79	case 4:
 80		channel_allocation = 0x06;
 81		break;
 82	case 5:
 83		channel_allocation = 0x0A;
 84		break;
 85	case 6:
 86		channel_allocation = 0x0B;
 87		break;
 88	case 7:
 89		channel_allocation = 0x12;
 90		break;
 91	case 8:
 92		channel_allocation = 0x13;
 93		break;
 94	default:
 95		return -EINVAL;
 96	}
 97
 98	return channel_allocation;
 99}
100EXPORT_SYMBOL_GPL(q6dsp_get_channel_allocation);
101
102MODULE_DESCRIPTION("ASoC MSM QDSP6 helper functions");
103MODULE_LICENSE("GPL v2");
~/ Read-only file preview.