1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2022, The Linux Foundation. All rights reserved. 4 */ 5 6 #ifndef __LPASS_MACRO_COMMON_H__ 7 #define __LPASS_MACRO_COMMON_H__ 8 9 /* NPL clock is expected */ 10 #define LPASS_MACRO_FLAG_HAS_NPL_CLOCK BIT(0) 11 /* The soundwire block should be internally reset at probe */ 12 #define LPASS_MACRO_FLAG_RESET_SWR BIT(1) 13 14 enum lpass_version { 15 LPASS_VER_9_0_0, 16 LPASS_VER_9_2_0, 17 LPASS_VER_10_0_0, 18 LPASS_VER_11_0_0, 19 }; 20 21 enum lpass_codec_version { 22 LPASS_CODEC_VERSION_UNKNOWN, 23 LPASS_CODEC_VERSION_1_0, 24 LPASS_CODEC_VERSION_1_1, 25 LPASS_CODEC_VERSION_1_2, 26 LPASS_CODEC_VERSION_2_0, 27 LPASS_CODEC_VERSION_2_1, 28 LPASS_CODEC_VERSION_2_5, 29 LPASS_CODEC_VERSION_2_6, 30 LPASS_CODEC_VERSION_2_7, 31 LPASS_CODEC_VERSION_2_8, 32 LPASS_CODEC_VERSION_2_9, 33 }; 34 35 struct lpass_macro { 36 struct device *macro_pd; 37 struct device *dcodec_pd; 38 }; 39 40 struct lpass_macro *lpass_macro_pds_init(struct device *dev); 41 void lpass_macro_pds_exit(struct lpass_macro *pds); 42 void lpass_macro_set_codec_version(enum lpass_codec_version version); 43 enum lpass_codec_version lpass_macro_get_codec_version(void); 44 45 static inline void lpass_macro_pds_exit_action(void *pds) 46 { 47 lpass_macro_pds_exit(pds); 48 } 49 50 static inline const char *lpass_macro_get_codec_version_string(int version) 51 { 52 switch (version) { 53 case LPASS_CODEC_VERSION_1_0: 54 return "v1.0"; 55 case LPASS_CODEC_VERSION_1_1: 56 return "v1.1"; 57 case LPASS_CODEC_VERSION_1_2: 58 return "v1.2"; 59 case LPASS_CODEC_VERSION_2_0: 60 return "v2.0"; 61 case LPASS_CODEC_VERSION_2_1: 62 return "v2.1"; 63 case LPASS_CODEC_VERSION_2_5: 64 return "v2.5"; 65 case LPASS_CODEC_VERSION_2_6: 66 return "v2.6"; 67 case LPASS_CODEC_VERSION_2_7: 68 return "v2.7"; 69 case LPASS_CODEC_VERSION_2_8: 70 return "v2.8"; 71 default: 72 break; 73 } 74 return "NA"; 75 } 76 77 #endif /* __LPASS_MACRO_COMMON_H__ */ 78