xref: /openbmc/linux/include/sound/hda-mlink.h (revision d56d2058)
118227585SPierre-Louis Bossart /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
218227585SPierre-Louis Bossart /*
318227585SPierre-Louis Bossart  * This file is provided under a dual BSD/GPLv2 license.  When using or
418227585SPierre-Louis Bossart  * redistributing this file, you may do so under either license.
518227585SPierre-Louis Bossart  *
618227585SPierre-Louis Bossart  * Copyright(c) 2022-2023 Intel Corporation. All rights reserved.
718227585SPierre-Louis Bossart  */
818227585SPierre-Louis Bossart 
918227585SPierre-Louis Bossart struct hdac_bus;
1018227585SPierre-Louis Bossart 
1118227585SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_MLINK)
1218227585SPierre-Louis Bossart 
1317c9b6ecSPierre-Louis Bossart int hda_bus_ml_init(struct hdac_bus *bus);
1418227585SPierre-Louis Bossart void hda_bus_ml_free(struct hdac_bus *bus);
15fc7dab8eSPierre-Louis Bossart 
166857c7eeSPierre-Louis Bossart int hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid);
172e428831SPierre-Louis Bossart void hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable);
182e428831SPierre-Louis Bossart bool hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid);
196857c7eeSPierre-Louis Bossart 
2002ba1b02SPierre-Louis Bossart int hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd);
2102ba1b02SPierre-Louis Bossart int hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd);
2202ba1b02SPierre-Louis Bossart 
2302ba1b02SPierre-Louis Bossart int hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid);
2402ba1b02SPierre-Louis Bossart int hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus);
2502ba1b02SPierre-Louis Bossart 
261f5a6e8bSPierre-Louis Bossart void hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
271f5a6e8bSPierre-Louis Bossart void hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink);
281f5a6e8bSPierre-Louis Bossart 
291f5a6e8bSPierre-Louis Bossart int hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid);
301f5a6e8bSPierre-Louis Bossart int hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus);
311f5a6e8bSPierre-Louis Bossart 
32*d56d2058SPierre-Louis Bossart bool hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid);
33*d56d2058SPierre-Louis Bossart bool hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus);
34*d56d2058SPierre-Louis Bossart 
35fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink);
36fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
37fc7dab8eSPierre-Louis Bossart 
38fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink);
39fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
40fc7dab8eSPierre-Louis Bossart 
41725218f1SPierre-Louis Bossart int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink);
42725218f1SPierre-Louis Bossart int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink);
43725218f1SPierre-Louis Bossart 
4418227585SPierre-Louis Bossart void hda_bus_ml_put_all(struct hdac_bus *bus);
4518227585SPierre-Louis Bossart void hda_bus_ml_reset_losidv(struct hdac_bus *bus);
4618227585SPierre-Louis Bossart int hda_bus_ml_resume(struct hdac_bus *bus);
4718227585SPierre-Louis Bossart int hda_bus_ml_suspend(struct hdac_bus *bus);
4818227585SPierre-Louis Bossart 
4918227585SPierre-Louis Bossart #else
5018227585SPierre-Louis Bossart 
5118227585SPierre-Louis Bossart static inline int
5217c9b6ecSPierre-Louis Bossart hda_bus_ml_init(struct hdac_bus *bus) { return 0; }
5318227585SPierre-Louis Bossart 
5418227585SPierre-Louis Bossart static inline void hda_bus_ml_free(struct hdac_bus *bus) { }
55fc7dab8eSPierre-Louis Bossart 
56fc7dab8eSPierre-Louis Bossart static inline int
576857c7eeSPierre-Louis Bossart hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; }
586857c7eeSPierre-Louis Bossart 
592e428831SPierre-Louis Bossart static inline void
602e428831SPierre-Louis Bossart hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { }
612e428831SPierre-Louis Bossart 
622e428831SPierre-Louis Bossart static inline bool
632e428831SPierre-Louis Bossart hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; }
642e428831SPierre-Louis Bossart 
656857c7eeSPierre-Louis Bossart static inline int
6602ba1b02SPierre-Louis Bossart hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd)
6702ba1b02SPierre-Louis Bossart {
6802ba1b02SPierre-Louis Bossart 	return 0;
6902ba1b02SPierre-Louis Bossart }
7002ba1b02SPierre-Louis Bossart 
7102ba1b02SPierre-Louis Bossart static inline int
7202ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd)
7302ba1b02SPierre-Louis Bossart {
7402ba1b02SPierre-Louis Bossart 	return 0;
7502ba1b02SPierre-Louis Bossart }
7602ba1b02SPierre-Louis Bossart 
7702ba1b02SPierre-Louis Bossart static inline int
7802ba1b02SPierre-Louis Bossart hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid)
7902ba1b02SPierre-Louis Bossart {
8002ba1b02SPierre-Louis Bossart 	return 0;
8102ba1b02SPierre-Louis Bossart }
8202ba1b02SPierre-Louis Bossart 
8302ba1b02SPierre-Louis Bossart static inline int
8402ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; }
8502ba1b02SPierre-Louis Bossart 
861f5a6e8bSPierre-Louis Bossart static inline void
871f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { }
881f5a6e8bSPierre-Louis Bossart 
891f5a6e8bSPierre-Louis Bossart static inline void
901f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { }
911f5a6e8bSPierre-Louis Bossart 
921f5a6e8bSPierre-Louis Bossart static inline int
931f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; }
941f5a6e8bSPierre-Louis Bossart 
951f5a6e8bSPierre-Louis Bossart static inline int
961f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; }
971f5a6e8bSPierre-Louis Bossart 
98*d56d2058SPierre-Louis Bossart static inline bool
99*d56d2058SPierre-Louis Bossart hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; }
100*d56d2058SPierre-Louis Bossart 
101*d56d2058SPierre-Louis Bossart static inline bool
102*d56d2058SPierre-Louis Bossart hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; }
103*d56d2058SPierre-Louis Bossart 
10402ba1b02SPierre-Louis Bossart static inline int
105fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink)
106fc7dab8eSPierre-Louis Bossart {
107fc7dab8eSPierre-Louis Bossart 	return 0;
108fc7dab8eSPierre-Louis Bossart }
109fc7dab8eSPierre-Louis Bossart 
110fc7dab8eSPierre-Louis Bossart static inline int
111fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
112fc7dab8eSPierre-Louis Bossart {
113fc7dab8eSPierre-Louis Bossart 	return 0;
114fc7dab8eSPierre-Louis Bossart }
115fc7dab8eSPierre-Louis Bossart 
116fc7dab8eSPierre-Louis Bossart static inline int
117fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink)
118fc7dab8eSPierre-Louis Bossart {
119fc7dab8eSPierre-Louis Bossart 	return 0;
120fc7dab8eSPierre-Louis Bossart }
121fc7dab8eSPierre-Louis Bossart 
122fc7dab8eSPierre-Louis Bossart static inline int
123fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
124fc7dab8eSPierre-Louis Bossart {
125fc7dab8eSPierre-Louis Bossart 	return 0;
126fc7dab8eSPierre-Louis Bossart }
127fc7dab8eSPierre-Louis Bossart 
128725218f1SPierre-Louis Bossart static inline int
129725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
130725218f1SPierre-Louis Bossart 
131725218f1SPierre-Louis Bossart static inline int
132725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
133725218f1SPierre-Louis Bossart 
13418227585SPierre-Louis Bossart static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { }
13518227585SPierre-Louis Bossart static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { }
13618227585SPierre-Louis Bossart static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; }
13718227585SPierre-Louis Bossart static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; }
13818227585SPierre-Louis Bossart 
13918227585SPierre-Louis Bossart #endif /* CONFIG_SND_SOC_SOF_HDA */
140