xref: /openbmc/linux/include/sound/hda-mlink.h (revision 681f27f3)
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);
542b864e96SPierre-Louis Bossart 
55*681f27f3SPierre-Louis Bossart struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid);
56*681f27f3SPierre-Louis Bossart 
5782958c40SPierre-Louis Bossart int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable);
5882958c40SPierre-Louis Bossart 
5918227585SPierre-Louis Bossart #else
6018227585SPierre-Louis Bossart 
6118227585SPierre-Louis Bossart static inline int
6217c9b6ecSPierre-Louis Bossart hda_bus_ml_init(struct hdac_bus *bus) { return 0; }
6318227585SPierre-Louis Bossart 
6418227585SPierre-Louis Bossart static inline void hda_bus_ml_free(struct hdac_bus *bus) { }
65fc7dab8eSPierre-Louis Bossart 
66fc7dab8eSPierre-Louis Bossart static inline int
676857c7eeSPierre-Louis Bossart hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; }
686857c7eeSPierre-Louis Bossart 
692e428831SPierre-Louis Bossart static inline void
702e428831SPierre-Louis Bossart hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { }
712e428831SPierre-Louis Bossart 
722e428831SPierre-Louis Bossart static inline bool
732e428831SPierre-Louis Bossart hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; }
742e428831SPierre-Louis Bossart 
756857c7eeSPierre-Louis Bossart static inline int
7602ba1b02SPierre-Louis Bossart hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd)
7702ba1b02SPierre-Louis Bossart {
7802ba1b02SPierre-Louis Bossart 	return 0;
7902ba1b02SPierre-Louis Bossart }
8002ba1b02SPierre-Louis Bossart 
8102ba1b02SPierre-Louis Bossart static inline int
8202ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd)
8302ba1b02SPierre-Louis Bossart {
8402ba1b02SPierre-Louis Bossart 	return 0;
8502ba1b02SPierre-Louis Bossart }
8602ba1b02SPierre-Louis Bossart 
8702ba1b02SPierre-Louis Bossart static inline int
8802ba1b02SPierre-Louis Bossart hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid)
8902ba1b02SPierre-Louis Bossart {
9002ba1b02SPierre-Louis Bossart 	return 0;
9102ba1b02SPierre-Louis Bossart }
9202ba1b02SPierre-Louis Bossart 
9302ba1b02SPierre-Louis Bossart static inline int
9402ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; }
9502ba1b02SPierre-Louis Bossart 
961f5a6e8bSPierre-Louis Bossart static inline void
971f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { }
981f5a6e8bSPierre-Louis Bossart 
991f5a6e8bSPierre-Louis Bossart static inline void
1001f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { }
1011f5a6e8bSPierre-Louis Bossart 
1021f5a6e8bSPierre-Louis Bossart static inline int
1031f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; }
1041f5a6e8bSPierre-Louis Bossart 
1051f5a6e8bSPierre-Louis Bossart static inline int
1061f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; }
1071f5a6e8bSPierre-Louis Bossart 
108d56d2058SPierre-Louis Bossart static inline bool
109d56d2058SPierre-Louis Bossart hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; }
110d56d2058SPierre-Louis Bossart 
111d56d2058SPierre-Louis Bossart static inline bool
112d56d2058SPierre-Louis Bossart hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; }
113d56d2058SPierre-Louis Bossart 
11402ba1b02SPierre-Louis Bossart static inline int
115fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink)
116fc7dab8eSPierre-Louis Bossart {
117fc7dab8eSPierre-Louis Bossart 	return 0;
118fc7dab8eSPierre-Louis Bossart }
119fc7dab8eSPierre-Louis Bossart 
120fc7dab8eSPierre-Louis Bossart static inline int
121fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
122fc7dab8eSPierre-Louis Bossart {
123fc7dab8eSPierre-Louis Bossart 	return 0;
124fc7dab8eSPierre-Louis Bossart }
125fc7dab8eSPierre-Louis Bossart 
126fc7dab8eSPierre-Louis Bossart static inline int
127fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink)
128fc7dab8eSPierre-Louis Bossart {
129fc7dab8eSPierre-Louis Bossart 	return 0;
130fc7dab8eSPierre-Louis Bossart }
131fc7dab8eSPierre-Louis Bossart 
132fc7dab8eSPierre-Louis Bossart static inline int
133fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
134fc7dab8eSPierre-Louis Bossart {
135fc7dab8eSPierre-Louis Bossart 	return 0;
136fc7dab8eSPierre-Louis Bossart }
137fc7dab8eSPierre-Louis Bossart 
138725218f1SPierre-Louis Bossart static inline int
139725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
140725218f1SPierre-Louis Bossart 
141725218f1SPierre-Louis Bossart static inline int
142725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
143725218f1SPierre-Louis Bossart 
14487a6ddc0SPierre-Louis Bossart static inline int
14587a6ddc0SPierre-Louis Bossart hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; }
14687a6ddc0SPierre-Louis Bossart 
14718227585SPierre-Louis Bossart static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { }
14818227585SPierre-Louis Bossart static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { }
14918227585SPierre-Louis Bossart static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; }
15018227585SPierre-Louis Bossart static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; }
15118227585SPierre-Louis Bossart 
1522b864e96SPierre-Louis Bossart static inline struct hdac_ext_link *
1532b864e96SPierre-Louis Bossart hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus) { return NULL; }
1542b864e96SPierre-Louis Bossart 
1552b864e96SPierre-Louis Bossart static inline struct hdac_ext_link *
1562b864e96SPierre-Louis Bossart hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus) { return NULL; }
1572b864e96SPierre-Louis Bossart 
158*681f27f3SPierre-Louis Bossart static inline struct mutex *
159*681f27f3SPierre-Louis Bossart hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; }
160*681f27f3SPierre-Louis Bossart 
16182958c40SPierre-Louis Bossart static inline int
16282958c40SPierre-Louis Bossart hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
16382958c40SPierre-Louis Bossart {
16482958c40SPierre-Louis Bossart 	return 0;
16582958c40SPierre-Louis Bossart }
16618227585SPierre-Louis Bossart #endif /* CONFIG_SND_SOC_SOF_HDA */
167