Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/qcom/qdsp6/q6dsp-common.c
26444 views
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
102
MODULE_DESCRIPTION("ASoC MSM QDSP6 helper functions");
103
MODULE_LICENSE("GPL v2");
104
105