xref: /linux/sound/soc/amd/acp/acp-sdw-mach-common.c (revision e50da555ca4d42b1b98d0f26789db64f26a0919a)
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright(c) 2024 Advanced Micro Devices, Inc.
3 
4 /*
5  *  acp-sdw-mach-common - Common machine driver helper functions for
6  *  legacy(No DSP) stack and SOF stack.
7  */
8 
9 #include <linux/device.h>
10 #include <linux/module.h>
11 #include "soc_amd_sdw_common.h"
12 
13 int get_acp63_cpu_pin_id(u32 sdw_link_id, int be_id, int *cpu_pin_id, struct device *dev)
14 {
15 	switch (sdw_link_id) {
16 	case AMD_SDW0:
17 		switch (be_id) {
18 		case SOC_SDW_JACK_OUT_DAI_ID:
19 			*cpu_pin_id = ACP63_SW0_AUDIO0_TX;
20 			break;
21 		case SOC_SDW_JACK_IN_DAI_ID:
22 			*cpu_pin_id = ACP63_SW0_AUDIO0_RX;
23 			break;
24 		case SOC_SDW_AMP_OUT_DAI_ID:
25 			*cpu_pin_id = ACP63_SW0_AUDIO1_TX;
26 			break;
27 		case SOC_SDW_AMP_IN_DAI_ID:
28 			*cpu_pin_id = ACP63_SW0_AUDIO1_RX;
29 			break;
30 		case SOC_SDW_DMIC_DAI_ID:
31 			*cpu_pin_id = ACP63_SW0_AUDIO2_RX;
32 			break;
33 		default:
34 			dev_err(dev, "Invalid be id:%d\n", be_id);
35 			return -EINVAL;
36 		}
37 		break;
38 	case AMD_SDW1:
39 		switch (be_id) {
40 		case SOC_SDW_JACK_OUT_DAI_ID:
41 		case SOC_SDW_AMP_OUT_DAI_ID:
42 			*cpu_pin_id = ACP63_SW1_AUDIO0_TX;
43 			break;
44 		case SOC_SDW_JACK_IN_DAI_ID:
45 		case SOC_SDW_AMP_IN_DAI_ID:
46 		case SOC_SDW_DMIC_DAI_ID:
47 			*cpu_pin_id = ACP63_SW1_AUDIO0_RX;
48 			break;
49 		default:
50 			dev_err(dev, "invalid be_id:%d\n", be_id);
51 			return -EINVAL;
52 		}
53 		break;
54 	default:
55 		dev_err(dev, "Invalid link id:%d\n", sdw_link_id);
56 		return -EINVAL;
57 	}
58 	return 0;
59 }
60 EXPORT_SYMBOL_NS_GPL(get_acp63_cpu_pin_id, "SND_SOC_AMD_SDW_MACH");
61 
62 int get_acp70_cpu_pin_id(u32 sdw_link_id, int be_id, int *cpu_pin_id, struct device *dev)
63 {
64 	switch (sdw_link_id) {
65 	case AMD_SDW0:
66 	case AMD_SDW1:
67 		switch (be_id) {
68 		case SOC_SDW_JACK_OUT_DAI_ID:
69 			*cpu_pin_id = ACP70_SW_AUDIO0_TX;
70 			break;
71 		case SOC_SDW_JACK_IN_DAI_ID:
72 			*cpu_pin_id = ACP70_SW_AUDIO0_RX;
73 			break;
74 		case SOC_SDW_AMP_OUT_DAI_ID:
75 			*cpu_pin_id = ACP70_SW_AUDIO1_TX;
76 			break;
77 		case SOC_SDW_AMP_IN_DAI_ID:
78 			*cpu_pin_id = ACP70_SW_AUDIO1_RX;
79 			break;
80 		case SOC_SDW_DMIC_DAI_ID:
81 			*cpu_pin_id = ACP70_SW_AUDIO2_RX;
82 			break;
83 		default:
84 			dev_err(dev, "Invalid be id:%d\n", be_id);
85 			return -EINVAL;
86 		}
87 		break;
88 	default:
89 		return -EINVAL;
90 	}
91 	dev_dbg(dev, "sdw_link_id:%d, be_id:%d, cpu_pin_id:%d\n", sdw_link_id, be_id, *cpu_pin_id);
92 	return 0;
93 }
94 EXPORT_SYMBOL_NS_GPL(get_acp70_cpu_pin_id, "SND_SOC_AMD_SDW_MACH");
95 
96 MODULE_DESCRIPTION("AMD SoundWire Common Machine driver");
97 MODULE_AUTHOR("Vijendar Mukunda <Vijendar.Mukunda@amd.com>");
98 MODULE_LICENSE("GPL");
99