arm64: dts: qcom: sm8550: add TRNG node
[linux-modified.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
67 int 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 }
100 EXPORT_SYMBOL_GPL(q6dsp_get_channel_allocation);
101 MODULE_LICENSE("GPL v2");