brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · f74585d Raw
104 lines · c
1// SPDX-License-Identifier: GPL-2.02// Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.3// Copyright (c) 2018, Linaro Limited4 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");104