xref: /openbmc/linux/include/sound/hda-mlink.h (revision dcb88fc4)
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;
102b864e96SPierre-Louis Bossart struct hdac_ext_link;
1118227585SPierre-Louis Bossart 
1218227585SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_MLINK)
1318227585SPierre-Louis Bossart 
1417c9b6ecSPierre-Louis Bossart int hda_bus_ml_init(struct hdac_bus *bus);
1518227585SPierre-Louis Bossart void hda_bus_ml_free(struct hdac_bus *bus);
16fc7dab8eSPierre-Louis Bossart 
176857c7eeSPierre-Louis Bossart int hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid);
182e428831SPierre-Louis Bossart void hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable);
192e428831SPierre-Louis Bossart bool hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid);
206857c7eeSPierre-Louis Bossart 
2102ba1b02SPierre-Louis Bossart int hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd);
2202ba1b02SPierre-Louis Bossart int hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd);
2302ba1b02SPierre-Louis Bossart 
2402ba1b02SPierre-Louis Bossart int hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid);
2502ba1b02SPierre-Louis Bossart int hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus);
2602ba1b02SPierre-Louis Bossart 
271f5a6e8bSPierre-Louis Bossart void hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
281f5a6e8bSPierre-Louis Bossart void hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink);
291f5a6e8bSPierre-Louis Bossart 
301f5a6e8bSPierre-Louis Bossart int hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid);
311f5a6e8bSPierre-Louis Bossart int hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus);
321f5a6e8bSPierre-Louis Bossart 
33d56d2058SPierre-Louis Bossart bool hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid);
34d56d2058SPierre-Louis Bossart bool hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus);
35d56d2058SPierre-Louis Bossart 
36fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink);
37fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
38fc7dab8eSPierre-Louis Bossart 
39fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink);
40fc7dab8eSPierre-Louis Bossart int hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink);
41fc7dab8eSPierre-Louis Bossart 
42725218f1SPierre-Louis Bossart int hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink);
43725218f1SPierre-Louis Bossart int hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink);
44725218f1SPierre-Louis Bossart 
4587a6ddc0SPierre-Louis Bossart int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num);
4687a6ddc0SPierre-Louis Bossart 
4718227585SPierre-Louis Bossart void hda_bus_ml_put_all(struct hdac_bus *bus);
4818227585SPierre-Louis Bossart void hda_bus_ml_reset_losidv(struct hdac_bus *bus);
4918227585SPierre-Louis Bossart int hda_bus_ml_resume(struct hdac_bus *bus);
5018227585SPierre-Louis Bossart int hda_bus_ml_suspend(struct hdac_bus *bus);
5118227585SPierre-Louis Bossart 
522b864e96SPierre-Louis Bossart struct hdac_ext_link *hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus);
532b864e96SPierre-Louis Bossart struct hdac_ext_link *hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus);
54*dcb88fc4SPierre-Louis Bossart struct hdac_ext_link *hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus);
552b864e96SPierre-Louis Bossart 
56681f27f3SPierre-Louis Bossart struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid);
57681f27f3SPierre-Louis Bossart 
5882958c40SPierre-Louis Bossart int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable);
5982958c40SPierre-Louis Bossart 
6018227585SPierre-Louis Bossart #else
6118227585SPierre-Louis Bossart 
6218227585SPierre-Louis Bossart static inline int
6317c9b6ecSPierre-Louis Bossart hda_bus_ml_init(struct hdac_bus *bus) { return 0; }
6418227585SPierre-Louis Bossart 
6518227585SPierre-Louis Bossart static inline void hda_bus_ml_free(struct hdac_bus *bus) { }
66fc7dab8eSPierre-Louis Bossart 
67fc7dab8eSPierre-Louis Bossart static inline int
686857c7eeSPierre-Louis Bossart hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; }
696857c7eeSPierre-Louis Bossart 
702e428831SPierre-Louis Bossart static inline void
712e428831SPierre-Louis Bossart hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { }
722e428831SPierre-Louis Bossart 
732e428831SPierre-Louis Bossart static inline bool
742e428831SPierre-Louis Bossart hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; }
752e428831SPierre-Louis Bossart 
766857c7eeSPierre-Louis Bossart static inline int
7702ba1b02SPierre-Louis Bossart hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd)
7802ba1b02SPierre-Louis Bossart {
7902ba1b02SPierre-Louis Bossart 	return 0;
8002ba1b02SPierre-Louis Bossart }
8102ba1b02SPierre-Louis Bossart 
8202ba1b02SPierre-Louis Bossart static inline int
8302ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd)
8402ba1b02SPierre-Louis Bossart {
8502ba1b02SPierre-Louis Bossart 	return 0;
8602ba1b02SPierre-Louis Bossart }
8702ba1b02SPierre-Louis Bossart 
8802ba1b02SPierre-Louis Bossart static inline int
8902ba1b02SPierre-Louis Bossart hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid)
9002ba1b02SPierre-Louis Bossart {
9102ba1b02SPierre-Louis Bossart 	return 0;
9202ba1b02SPierre-Louis Bossart }
9302ba1b02SPierre-Louis Bossart 
9402ba1b02SPierre-Louis Bossart static inline int
9502ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; }
9602ba1b02SPierre-Louis Bossart 
971f5a6e8bSPierre-Louis Bossart static inline void
981f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { }
991f5a6e8bSPierre-Louis Bossart 
1001f5a6e8bSPierre-Louis Bossart static inline void
1011f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { }
1021f5a6e8bSPierre-Louis Bossart 
1031f5a6e8bSPierre-Louis Bossart static inline int
1041f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; }
1051f5a6e8bSPierre-Louis Bossart 
1061f5a6e8bSPierre-Louis Bossart static inline int
1071f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; }
1081f5a6e8bSPierre-Louis Bossart 
109d56d2058SPierre-Louis Bossart static inline bool
110d56d2058SPierre-Louis Bossart hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; }
111d56d2058SPierre-Louis Bossart 
112d56d2058SPierre-Louis Bossart static inline bool
113d56d2058SPierre-Louis Bossart hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; }
114d56d2058SPierre-Louis Bossart 
11502ba1b02SPierre-Louis Bossart static inline int
116fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink)
117fc7dab8eSPierre-Louis Bossart {
118fc7dab8eSPierre-Louis Bossart 	return 0;
119fc7dab8eSPierre-Louis Bossart }
120fc7dab8eSPierre-Louis Bossart 
121fc7dab8eSPierre-Louis Bossart static inline int
122fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
123fc7dab8eSPierre-Louis Bossart {
124fc7dab8eSPierre-Louis Bossart 	return 0;
125fc7dab8eSPierre-Louis Bossart }
126fc7dab8eSPierre-Louis Bossart 
127fc7dab8eSPierre-Louis Bossart static inline int
128fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink)
129fc7dab8eSPierre-Louis Bossart {
130fc7dab8eSPierre-Louis Bossart 	return 0;
131fc7dab8eSPierre-Louis Bossart }
132fc7dab8eSPierre-Louis Bossart 
133fc7dab8eSPierre-Louis Bossart static inline int
134fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
135fc7dab8eSPierre-Louis Bossart {
136fc7dab8eSPierre-Louis Bossart 	return 0;
137fc7dab8eSPierre-Louis Bossart }
138fc7dab8eSPierre-Louis Bossart 
139725218f1SPierre-Louis Bossart static inline int
140725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
141725218f1SPierre-Louis Bossart 
142725218f1SPierre-Louis Bossart static inline int
143725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
144725218f1SPierre-Louis Bossart 
14587a6ddc0SPierre-Louis Bossart static inline int
14687a6ddc0SPierre-Louis Bossart hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; }
14787a6ddc0SPierre-Louis Bossart 
14818227585SPierre-Louis Bossart static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { }
14918227585SPierre-Louis Bossart static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { }
15018227585SPierre-Louis Bossart static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; }
15118227585SPierre-Louis Bossart static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; }
15218227585SPierre-Louis Bossart 
1532b864e96SPierre-Louis Bossart static inline struct hdac_ext_link *
1542b864e96SPierre-Louis Bossart hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus) { return NULL; }
1552b864e96SPierre-Louis Bossart 
1562b864e96SPierre-Louis Bossart static inline struct hdac_ext_link *
1572b864e96SPierre-Louis Bossart hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus) { return NULL; }
1582b864e96SPierre-Louis Bossart 
159*dcb88fc4SPierre-Louis Bossart static inline struct hdac_ext_link *
160*dcb88fc4SPierre-Louis Bossart hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus) { return NULL; }
161*dcb88fc4SPierre-Louis Bossart 
162681f27f3SPierre-Louis Bossart static inline struct mutex *
163681f27f3SPierre-Louis Bossart hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; }
164681f27f3SPierre-Louis Bossart 
16582958c40SPierre-Louis Bossart static inline int
16682958c40SPierre-Louis Bossart hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
16782958c40SPierre-Louis Bossart {
16882958c40SPierre-Louis Bossart 	return 0;
16982958c40SPierre-Louis Bossart }
17018227585SPierre-Louis Bossart #endif /* CONFIG_SND_SOC_SOF_HDA */
171