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