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