xref: /openbmc/linux/sound/soc/qcom/qdsp6/q6dsp-common.c (revision 4dddbddbce324dc027182ba33d6cbbaf797dfd9e)
1*4dddbddbSSrinivas Kandagatla // SPDX-License-Identifier: GPL-2.0
2*4dddbddbSSrinivas Kandagatla // Copyright (c) 2011-2017, The Linux Foundation. All rights reserved.
3*4dddbddbSSrinivas Kandagatla // Copyright (c) 2018, Linaro Limited
4*4dddbddbSSrinivas Kandagatla 
5*4dddbddbSSrinivas Kandagatla #include "q6dsp-common.h"
6*4dddbddbSSrinivas Kandagatla #include <linux/kernel.h>
7*4dddbddbSSrinivas Kandagatla #include <linux/module.h>
8*4dddbddbSSrinivas Kandagatla #include <linux/string.h>
9*4dddbddbSSrinivas Kandagatla #include <linux/errno.h>
10*4dddbddbSSrinivas Kandagatla 
11*4dddbddbSSrinivas Kandagatla int q6dsp_map_channels(u8 ch_map[PCM_MAX_NUM_CHANNEL], int ch)
12*4dddbddbSSrinivas Kandagatla {
13*4dddbddbSSrinivas Kandagatla 	memset(ch_map, 0, PCM_MAX_NUM_CHANNEL);
14*4dddbddbSSrinivas Kandagatla 
15*4dddbddbSSrinivas Kandagatla 	switch (ch) {
16*4dddbddbSSrinivas Kandagatla 	case 1:
17*4dddbddbSSrinivas Kandagatla 		ch_map[0] = PCM_CHANNEL_FC;
18*4dddbddbSSrinivas Kandagatla 		break;
19*4dddbddbSSrinivas Kandagatla 	case 2:
20*4dddbddbSSrinivas Kandagatla 		ch_map[0] = PCM_CHANNEL_FL;
21*4dddbddbSSrinivas Kandagatla 		ch_map[1] = PCM_CHANNEL_FR;
22*4dddbddbSSrinivas Kandagatla 		break;
23*4dddbddbSSrinivas Kandagatla 	case 3:
24*4dddbddbSSrinivas Kandagatla 		ch_map[0] = PCM_CHANNEL_FL;
25*4dddbddbSSrinivas Kandagatla 		ch_map[1] = PCM_CHANNEL_FR;
26*4dddbddbSSrinivas Kandagatla 		ch_map[2] = PCM_CHANNEL_FC;
27*4dddbddbSSrinivas Kandagatla 		break;
28*4dddbddbSSrinivas Kandagatla 	case 4:
29*4dddbddbSSrinivas Kandagatla 		ch_map[0] = PCM_CHANNEL_FL;
30*4dddbddbSSrinivas Kandagatla 		ch_map[1] = PCM_CHANNEL_FR;
31*4dddbddbSSrinivas Kandagatla 		ch_map[2] = PCM_CHANNEL_LS;
32*4dddbddbSSrinivas Kandagatla 		ch_map[3] = PCM_CHANNEL_RS;
33*4dddbddbSSrinivas Kandagatla 		break;
34*4dddbddbSSrinivas Kandagatla 	case 5:
35*4dddbddbSSrinivas Kandagatla 		ch_map[0] = PCM_CHANNEL_FL;
36*4dddbddbSSrinivas Kandagatla 		ch_map[1] = PCM_CHANNEL_FR;
37*4dddbddbSSrinivas Kandagatla 		ch_map[2] = PCM_CHANNEL_FC;
38*4dddbddbSSrinivas Kandagatla 		ch_map[3] = PCM_CHANNEL_LS;
39*4dddbddbSSrinivas Kandagatla 		ch_map[4] = PCM_CHANNEL_RS;
40*4dddbddbSSrinivas Kandagatla 		break;
41*4dddbddbSSrinivas Kandagatla 	case 6:
42*4dddbddbSSrinivas Kandagatla 		ch_map[0] = PCM_CHANNEL_FL;
43*4dddbddbSSrinivas Kandagatla 		ch_map[1] = PCM_CHANNEL_FR;
44*4dddbddbSSrinivas Kandagatla 		ch_map[2] = PCM_CHANNEL_LFE;
45*4dddbddbSSrinivas Kandagatla 		ch_map[3] = PCM_CHANNEL_FC;
46*4dddbddbSSrinivas Kandagatla 		ch_map[4] = PCM_CHANNEL_LS;
47*4dddbddbSSrinivas Kandagatla 		ch_map[5] = PCM_CHANNEL_RS;
48*4dddbddbSSrinivas Kandagatla 		break;
49*4dddbddbSSrinivas Kandagatla 	case 8:
50*4dddbddbSSrinivas Kandagatla 		ch_map[0] = PCM_CHANNEL_FL;
51*4dddbddbSSrinivas Kandagatla 		ch_map[1] = PCM_CHANNEL_FR;
52*4dddbddbSSrinivas Kandagatla 		ch_map[2] = PCM_CHANNEL_LFE;
53*4dddbddbSSrinivas Kandagatla 		ch_map[3] = PCM_CHANNEL_FC;
54*4dddbddbSSrinivas Kandagatla 		ch_map[4] = PCM_CHANNEL_LS;
55*4dddbddbSSrinivas Kandagatla 		ch_map[5] = PCM_CHANNEL_RS;
56*4dddbddbSSrinivas Kandagatla 		ch_map[6] = PCM_CHANNEL_LB;
57*4dddbddbSSrinivas Kandagatla 		ch_map[7] = PCM_CHANNEL_RB;
58*4dddbddbSSrinivas Kandagatla 		break;
59*4dddbddbSSrinivas Kandagatla 	default:
60*4dddbddbSSrinivas Kandagatla 		return -EINVAL;
61*4dddbddbSSrinivas Kandagatla 	}
62*4dddbddbSSrinivas Kandagatla 
63*4dddbddbSSrinivas Kandagatla 	return 0;
64*4dddbddbSSrinivas Kandagatla }
65*4dddbddbSSrinivas Kandagatla EXPORT_SYMBOL_GPL(q6dsp_map_channels);
66*4dddbddbSSrinivas Kandagatla MODULE_LICENSE("GPL v2");
67