xref: /linux/include/sound/sdca.h (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
13a513da1SPierre-Louis Bossart /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
23a513da1SPierre-Louis Bossart /*
33a513da1SPierre-Louis Bossart  * The MIPI SDCA specification is available for public downloads at
43a513da1SPierre-Louis Bossart  * https://www.mipi.org/mipi-sdca-v1-0-download
53a513da1SPierre-Louis Bossart  *
63a513da1SPierre-Louis Bossart  * Copyright(c) 2024 Intel Corporation
73a513da1SPierre-Louis Bossart  */
83a513da1SPierre-Louis Bossart 
93a513da1SPierre-Louis Bossart #ifndef __SDCA_H__
103a513da1SPierre-Louis Bossart #define __SDCA_H__
113a513da1SPierre-Louis Bossart 
123a513da1SPierre-Louis Bossart struct sdw_slave;
133a513da1SPierre-Louis Bossart 
143a513da1SPierre-Louis Bossart #define SDCA_MAX_FUNCTION_COUNT 8
153a513da1SPierre-Louis Bossart 
163a513da1SPierre-Louis Bossart /**
173a513da1SPierre-Louis Bossart  * sdca_device_desc - short descriptor for an SDCA Function
183a513da1SPierre-Louis Bossart  * @adr: ACPI address (used for SDCA register access)
193a513da1SPierre-Louis Bossart  * @type: Function topology type
203a513da1SPierre-Louis Bossart  * @name: human-readable string
213a513da1SPierre-Louis Bossart  */
223a513da1SPierre-Louis Bossart struct sdca_function_desc {
233a513da1SPierre-Louis Bossart 	u64 adr;
243a513da1SPierre-Louis Bossart 	u32 type;
253a513da1SPierre-Louis Bossart 	const char *name;
263a513da1SPierre-Louis Bossart };
273a513da1SPierre-Louis Bossart 
283a513da1SPierre-Louis Bossart /**
293a513da1SPierre-Louis Bossart  * sdca_device_data - structure containing all SDCA related information
303a513da1SPierre-Louis Bossart  * @sdca_interface_revision: value read from _DSD property, mainly to check
313a513da1SPierre-Louis Bossart  * for changes between silicon versions
323a513da1SPierre-Louis Bossart  * @num_functions: total number of supported SDCA functions. Invalid/unsupported
333a513da1SPierre-Louis Bossart  * functions will be skipped.
343a513da1SPierre-Louis Bossart  * @sdca_func: array of function descriptors
353a513da1SPierre-Louis Bossart  */
363a513da1SPierre-Louis Bossart struct sdca_device_data {
373a513da1SPierre-Louis Bossart 	u32 interface_revision;
383a513da1SPierre-Louis Bossart 	int num_functions;
393a513da1SPierre-Louis Bossart 	struct sdca_function_desc sdca_func[SDCA_MAX_FUNCTION_COUNT];
403a513da1SPierre-Louis Bossart };
413a513da1SPierre-Louis Bossart 
42*fdb22039SPierre-Louis Bossart enum sdca_quirk {
43*fdb22039SPierre-Louis Bossart 	SDCA_QUIRKS_RT712_VB,
44*fdb22039SPierre-Louis Bossart };
45*fdb22039SPierre-Louis Bossart 
463a513da1SPierre-Louis Bossart #if IS_ENABLED(CONFIG_ACPI) && IS_ENABLED(CONFIG_SND_SOC_SDCA)
473a513da1SPierre-Louis Bossart 
483a513da1SPierre-Louis Bossart void sdca_lookup_functions(struct sdw_slave *slave);
493a513da1SPierre-Louis Bossart void sdca_lookup_interface_revision(struct sdw_slave *slave);
50*fdb22039SPierre-Louis Bossart bool sdca_device_quirk_match(struct sdw_slave *slave, enum sdca_quirk quirk);
513a513da1SPierre-Louis Bossart 
523a513da1SPierre-Louis Bossart #else
533a513da1SPierre-Louis Bossart 
543a513da1SPierre-Louis Bossart static inline void sdca_lookup_functions(struct sdw_slave *slave) {}
553a513da1SPierre-Louis Bossart static inline void sdca_lookup_interface_revision(struct sdw_slave *slave) {}
56*fdb22039SPierre-Louis Bossart static inline bool sdca_device_quirk_match(struct sdw_slave *slave, enum sdca_quirk quirk)
57*fdb22039SPierre-Louis Bossart {
58*fdb22039SPierre-Louis Bossart 	return false;
59*fdb22039SPierre-Louis Bossart }
603a513da1SPierre-Louis Bossart #endif
613a513da1SPierre-Louis Bossart 
623a513da1SPierre-Louis Bossart #endif
63