xref: /linux/include/sound/sdca.h (revision 3a513da1ae33972e59efeef7908061f1f24af480)
1*3a513da1SPierre-Louis Bossart /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2*3a513da1SPierre-Louis Bossart /*
3*3a513da1SPierre-Louis Bossart  * The MIPI SDCA specification is available for public downloads at
4*3a513da1SPierre-Louis Bossart  * https://www.mipi.org/mipi-sdca-v1-0-download
5*3a513da1SPierre-Louis Bossart  *
6*3a513da1SPierre-Louis Bossart  * Copyright(c) 2024 Intel Corporation
7*3a513da1SPierre-Louis Bossart  */
8*3a513da1SPierre-Louis Bossart 
9*3a513da1SPierre-Louis Bossart #ifndef __SDCA_H__
10*3a513da1SPierre-Louis Bossart #define __SDCA_H__
11*3a513da1SPierre-Louis Bossart 
12*3a513da1SPierre-Louis Bossart struct sdw_slave;
13*3a513da1SPierre-Louis Bossart 
14*3a513da1SPierre-Louis Bossart #define SDCA_MAX_FUNCTION_COUNT 8
15*3a513da1SPierre-Louis Bossart 
16*3a513da1SPierre-Louis Bossart /**
17*3a513da1SPierre-Louis Bossart  * sdca_device_desc - short descriptor for an SDCA Function
18*3a513da1SPierre-Louis Bossart  * @adr: ACPI address (used for SDCA register access)
19*3a513da1SPierre-Louis Bossart  * @type: Function topology type
20*3a513da1SPierre-Louis Bossart  * @name: human-readable string
21*3a513da1SPierre-Louis Bossart  */
22*3a513da1SPierre-Louis Bossart struct sdca_function_desc {
23*3a513da1SPierre-Louis Bossart 	u64 adr;
24*3a513da1SPierre-Louis Bossart 	u32 type;
25*3a513da1SPierre-Louis Bossart 	const char *name;
26*3a513da1SPierre-Louis Bossart };
27*3a513da1SPierre-Louis Bossart 
28*3a513da1SPierre-Louis Bossart /**
29*3a513da1SPierre-Louis Bossart  * sdca_device_data - structure containing all SDCA related information
30*3a513da1SPierre-Louis Bossart  * @sdca_interface_revision: value read from _DSD property, mainly to check
31*3a513da1SPierre-Louis Bossart  * for changes between silicon versions
32*3a513da1SPierre-Louis Bossart  * @num_functions: total number of supported SDCA functions. Invalid/unsupported
33*3a513da1SPierre-Louis Bossart  * functions will be skipped.
34*3a513da1SPierre-Louis Bossart  * @sdca_func: array of function descriptors
35*3a513da1SPierre-Louis Bossart  */
36*3a513da1SPierre-Louis Bossart struct sdca_device_data {
37*3a513da1SPierre-Louis Bossart 	u32 interface_revision;
38*3a513da1SPierre-Louis Bossart 	int num_functions;
39*3a513da1SPierre-Louis Bossart 	struct sdca_function_desc sdca_func[SDCA_MAX_FUNCTION_COUNT];
40*3a513da1SPierre-Louis Bossart };
41*3a513da1SPierre-Louis Bossart 
42*3a513da1SPierre-Louis Bossart #if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_SND_SOC_SDCA)
43*3a513da1SPierre-Louis Bossart 
44*3a513da1SPierre-Louis Bossart void sdca_lookup_functions(struct sdw_slave *slave);
45*3a513da1SPierre-Louis Bossart void sdca_lookup_interface_revision(struct sdw_slave *slave);
46*3a513da1SPierre-Louis Bossart 
47*3a513da1SPierre-Louis Bossart #else
48*3a513da1SPierre-Louis Bossart 
49*3a513da1SPierre-Louis Bossart static inline void sdca_lookup_functions(struct sdw_slave *slave) {}
50*3a513da1SPierre-Louis Bossart static inline void sdca_lookup_interface_revision(struct sdw_slave *slave) {}
51*3a513da1SPierre-Louis Bossart 
52*3a513da1SPierre-Louis Bossart #endif
53*3a513da1SPierre-Louis Bossart 
54*3a513da1SPierre-Louis Bossart #endif
55