Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / sound / soc / qcom / qdsp6 / q6dsp-common.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
11 int 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 }
65 EXPORT_SYMBOL_GPL(q6dsp_map_channels);
66 MODULE_LICENSE("GPL v2");