0001
0002
0003
0004
0005 #include "q6dsp-common.h"
0006 #include <linux/kernel.h>
0007 #include <linux/module.h>
0008 #include <linux/string.h>
0009 #include <linux/errno.h>
0010
0011 int q6dsp_map_channels(u8 ch_map[PCM_MAX_NUM_CHANNEL], int ch)
0012 {
0013 memset(ch_map, 0, PCM_MAX_NUM_CHANNEL);
0014
0015 switch (ch) {
0016 case 1:
0017 ch_map[0] = PCM_CHANNEL_FC;
0018 break;
0019 case 2:
0020 ch_map[0] = PCM_CHANNEL_FL;
0021 ch_map[1] = PCM_CHANNEL_FR;
0022 break;
0023 case 3:
0024 ch_map[0] = PCM_CHANNEL_FL;
0025 ch_map[1] = PCM_CHANNEL_FR;
0026 ch_map[2] = PCM_CHANNEL_FC;
0027 break;
0028 case 4:
0029 ch_map[0] = PCM_CHANNEL_FL;
0030 ch_map[1] = PCM_CHANNEL_FR;
0031 ch_map[2] = PCM_CHANNEL_LS;
0032 ch_map[3] = PCM_CHANNEL_RS;
0033 break;
0034 case 5:
0035 ch_map[0] = PCM_CHANNEL_FL;
0036 ch_map[1] = PCM_CHANNEL_FR;
0037 ch_map[2] = PCM_CHANNEL_FC;
0038 ch_map[3] = PCM_CHANNEL_LS;
0039 ch_map[4] = PCM_CHANNEL_RS;
0040 break;
0041 case 6:
0042 ch_map[0] = PCM_CHANNEL_FL;
0043 ch_map[1] = PCM_CHANNEL_FR;
0044 ch_map[2] = PCM_CHANNEL_LFE;
0045 ch_map[3] = PCM_CHANNEL_FC;
0046 ch_map[4] = PCM_CHANNEL_LS;
0047 ch_map[5] = PCM_CHANNEL_RS;
0048 break;
0049 case 8:
0050 ch_map[0] = PCM_CHANNEL_FL;
0051 ch_map[1] = PCM_CHANNEL_FR;
0052 ch_map[2] = PCM_CHANNEL_LFE;
0053 ch_map[3] = PCM_CHANNEL_FC;
0054 ch_map[4] = PCM_CHANNEL_LS;
0055 ch_map[5] = PCM_CHANNEL_RS;
0056 ch_map[6] = PCM_CHANNEL_LB;
0057 ch_map[7] = PCM_CHANNEL_RB;
0058 break;
0059 default:
0060 return -EINVAL;
0061 }
0062
0063 return 0;
0064 }
0065 EXPORT_SYMBOL_GPL(q6dsp_map_channels);
0066 MODULE_LICENSE("GPL v2");