1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2 /* 3 * This file is provided under a dual BSD/GPLv2 license. When using or 4 * redistributing this file, you may do so under either license. 5 * 6 * Copyright(c) 2022-2023 Intel Corporation. All rights reserved. 7 */ 8 9 struct hdac_bus; 10 struct hdac_ext_link; 11 12 #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_MLINK) 13 14 int hda_bus_ml_init(struct hdac_bus *bus); 15 void hda_bus_ml_free(struct hdac_bus *bus); 16 17 int hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid); 18 void hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable); 19 bool hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid); 20 21 int hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd); 22 int hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd); 23 24 int hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid); 25 int hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus); 26 27 void hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink); 28 void hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink); 29 30 int hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid); 31 int hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus); 32 33 bool hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid); 34 bool hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus); 35 36 int hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink); 37 int hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink); 38 39 int hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink); 40 int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink); 41 42 int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink); 43 int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink); 44 45 int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num); 46 47 void hda_bus_ml_put_all(struct hdac_bus *bus); 48 void hda_bus_ml_reset_losidv(struct hdac_bus *bus); 49 int hda_bus_ml_resume(struct hdac_bus *bus); 50 int hda_bus_ml_suspend(struct hdac_bus *bus); 51 52 struct hdac_ext_link *hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus); 53 struct hdac_ext_link *hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus); 54 55 struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid); 56 57 int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable); 58 59 #else 60 61 static inline int 62 hda_bus_ml_init(struct hdac_bus *bus) { return 0; } 63 64 static inline void hda_bus_ml_free(struct hdac_bus *bus) { } 65 66 static inline int 67 hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; } 68 69 static inline void 70 hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { } 71 72 static inline bool 73 hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; } 74 75 static inline int 76 hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd) 77 { 78 return 0; 79 } 80 81 static inline int 82 hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd) 83 { 84 return 0; 85 } 86 87 static inline int 88 hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid) 89 { 90 return 0; 91 } 92 93 static inline int 94 hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; } 95 96 static inline void 97 hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { } 98 99 static inline void 100 hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { } 101 102 static inline int 103 hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; } 104 105 static inline int 106 hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; } 107 108 static inline bool 109 hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; } 110 111 static inline bool 112 hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; } 113 114 static inline int 115 hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink) 116 { 117 return 0; 118 } 119 120 static inline int 121 hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) 122 { 123 return 0; 124 } 125 126 static inline int 127 hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink) 128 { 129 return 0; 130 } 131 132 static inline int 133 hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) 134 { 135 return 0; 136 } 137 138 static inline int 139 hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; } 140 141 static inline int 142 hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; } 143 144 static inline int 145 hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; } 146 147 static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { } 148 static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { } 149 static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; } 150 static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; } 151 152 static inline struct hdac_ext_link * 153 hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus) { return NULL; } 154 155 static inline struct hdac_ext_link * 156 hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus) { return NULL; } 157 158 static inline struct mutex * 159 hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; } 160 161 static inline int 162 hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable) 163 { 164 return 0; 165 } 166 #endif /* CONFIG_SND_SOC_SOF_HDA */ 167