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