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