xref: /openbmc/linux/include/sound/hda-mlink.h (revision 34e38f03)
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 
45*34e38f03SPierre-Louis Bossart int hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid);
4687a6ddc0SPierre-Louis Bossart int hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num);
4787a6ddc0SPierre-Louis Bossart 
48ccc2f0c1SPierre-Louis Bossart int hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y,
49ccc2f0c1SPierre-Louis Bossart 				   int channel_mask, int stream_id, int dir);
50ccc2f0c1SPierre-Louis Bossart 
5118227585SPierre-Louis Bossart void hda_bus_ml_put_all(struct hdac_bus *bus);
5218227585SPierre-Louis Bossart void hda_bus_ml_reset_losidv(struct hdac_bus *bus);
5318227585SPierre-Louis Bossart int hda_bus_ml_resume(struct hdac_bus *bus);
5418227585SPierre-Louis Bossart int hda_bus_ml_suspend(struct hdac_bus *bus);
5518227585SPierre-Louis Bossart 
562b864e96SPierre-Louis Bossart struct hdac_ext_link *hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus);
572b864e96SPierre-Louis Bossart struct hdac_ext_link *hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus);
58dcb88fc4SPierre-Louis Bossart struct hdac_ext_link *hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus);
592b864e96SPierre-Louis Bossart 
60681f27f3SPierre-Louis Bossart struct mutex *hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid);
61681f27f3SPierre-Louis Bossart 
6282958c40SPierre-Louis Bossart int hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable);
6382958c40SPierre-Louis Bossart 
6418227585SPierre-Louis Bossart #else
6518227585SPierre-Louis Bossart 
6618227585SPierre-Louis Bossart static inline int
hda_bus_ml_init(struct hdac_bus * bus)6717c9b6ecSPierre-Louis Bossart hda_bus_ml_init(struct hdac_bus *bus) { return 0; }
6818227585SPierre-Louis Bossart 
hda_bus_ml_free(struct hdac_bus * bus)6918227585SPierre-Louis Bossart static inline void hda_bus_ml_free(struct hdac_bus *bus) { }
70fc7dab8eSPierre-Louis Bossart 
71fc7dab8eSPierre-Louis Bossart static inline int
hdac_bus_eml_get_count(struct hdac_bus * bus,bool alt,int elid)726857c7eeSPierre-Louis Bossart hdac_bus_eml_get_count(struct hdac_bus *bus, bool alt, int elid) { return 0; }
736857c7eeSPierre-Louis Bossart 
742e428831SPierre-Louis Bossart static inline void
hdac_bus_eml_enable_interrupt(struct hdac_bus * bus,bool alt,int elid,bool enable)752e428831SPierre-Louis Bossart hdac_bus_eml_enable_interrupt(struct hdac_bus *bus, bool alt, int elid, bool enable) { }
762e428831SPierre-Louis Bossart 
772e428831SPierre-Louis Bossart static inline bool
hdac_bus_eml_check_interrupt(struct hdac_bus * bus,bool alt,int elid)782e428831SPierre-Louis Bossart hdac_bus_eml_check_interrupt(struct hdac_bus *bus, bool alt, int elid) { return false; }
792e428831SPierre-Louis Bossart 
806857c7eeSPierre-Louis Bossart static inline int
hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus * bus,bool alt,int elid,u32 syncprd)8102ba1b02SPierre-Louis Bossart hdac_bus_eml_set_syncprd_unlocked(struct hdac_bus *bus, bool alt, int elid, u32 syncprd)
8202ba1b02SPierre-Louis Bossart {
8302ba1b02SPierre-Louis Bossart 	return 0;
8402ba1b02SPierre-Louis Bossart }
8502ba1b02SPierre-Louis Bossart 
8602ba1b02SPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus * bus,u32 syncprd)8702ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_set_syncprd_unlocked(struct hdac_bus *bus, u32 syncprd)
8802ba1b02SPierre-Louis Bossart {
8902ba1b02SPierre-Louis Bossart 	return 0;
9002ba1b02SPierre-Louis Bossart }
9102ba1b02SPierre-Louis Bossart 
9202ba1b02SPierre-Louis Bossart static inline int
hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus * bus,bool alt,int elid)9302ba1b02SPierre-Louis Bossart hdac_bus_eml_wait_syncpu_unlocked(struct hdac_bus *bus, bool alt, int elid)
9402ba1b02SPierre-Louis Bossart {
9502ba1b02SPierre-Louis Bossart 	return 0;
9602ba1b02SPierre-Louis Bossart }
9702ba1b02SPierre-Louis Bossart 
9802ba1b02SPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus * bus)9902ba1b02SPierre-Louis Bossart hdac_bus_eml_sdw_wait_syncpu_unlocked(struct hdac_bus *bus) { return 0; }
10002ba1b02SPierre-Louis Bossart 
1011f5a6e8bSPierre-Louis Bossart static inline void
hdac_bus_eml_sync_arm_unlocked(struct hdac_bus * bus,bool alt,int elid,int sublink)1021f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_arm_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink) { }
1031f5a6e8bSPierre-Louis Bossart 
1041f5a6e8bSPierre-Louis Bossart static inline void
hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus * bus,int sublink)1051f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_arm_unlocked(struct hdac_bus *bus, int sublink) { }
1061f5a6e8bSPierre-Louis Bossart 
1071f5a6e8bSPierre-Louis Bossart static inline int
hdac_bus_eml_sync_go_unlocked(struct hdac_bus * bus,bool alt,int elid)1081f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sync_go_unlocked(struct hdac_bus *bus, bool alt, int elid) { return 0; }
1091f5a6e8bSPierre-Louis Bossart 
1101f5a6e8bSPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus * bus)1111f5a6e8bSPierre-Louis Bossart hdac_bus_eml_sdw_sync_go_unlocked(struct hdac_bus *bus) { return 0; }
1121f5a6e8bSPierre-Louis Bossart 
113d56d2058SPierre-Louis Bossart static inline bool
hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus * bus,bool alt,int elid)114d56d2058SPierre-Louis Bossart hdac_bus_eml_check_cmdsync_unlocked(struct hdac_bus *bus, bool alt, int elid) { return false; }
115d56d2058SPierre-Louis Bossart 
116d56d2058SPierre-Louis Bossart static inline bool
hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus * bus)117d56d2058SPierre-Louis Bossart hdac_bus_eml_sdw_check_cmdsync_unlocked(struct hdac_bus *bus) { return false; }
118d56d2058SPierre-Louis Bossart 
11902ba1b02SPierre-Louis Bossart static inline int
hdac_bus_eml_power_up(struct hdac_bus * bus,bool alt,int elid,int sublink)120fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up(struct hdac_bus *bus, bool alt, int elid, int sublink)
121fc7dab8eSPierre-Louis Bossart {
122fc7dab8eSPierre-Louis Bossart 	return 0;
123fc7dab8eSPierre-Louis Bossart }
124fc7dab8eSPierre-Louis Bossart 
125fc7dab8eSPierre-Louis Bossart static inline int
hdac_bus_eml_power_up_unlocked(struct hdac_bus * bus,bool alt,int elid,int sublink)126fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_up_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
127fc7dab8eSPierre-Louis Bossart {
128fc7dab8eSPierre-Louis Bossart 	return 0;
129fc7dab8eSPierre-Louis Bossart }
130fc7dab8eSPierre-Louis Bossart 
131fc7dab8eSPierre-Louis Bossart static inline int
hdac_bus_eml_power_down(struct hdac_bus * bus,bool alt,int elid,int sublink)132fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down(struct hdac_bus *bus, bool alt, int elid, int sublink)
133fc7dab8eSPierre-Louis Bossart {
134fc7dab8eSPierre-Louis Bossart 	return 0;
135fc7dab8eSPierre-Louis Bossart }
136fc7dab8eSPierre-Louis Bossart 
137fc7dab8eSPierre-Louis Bossart static inline int
hdac_bus_eml_power_down_unlocked(struct hdac_bus * bus,bool alt,int elid,int sublink)138fc7dab8eSPierre-Louis Bossart hdac_bus_eml_power_down_unlocked(struct hdac_bus *bus, bool alt, int elid, int sublink)
139fc7dab8eSPierre-Louis Bossart {
140fc7dab8eSPierre-Louis Bossart 	return 0;
141fc7dab8eSPierre-Louis Bossart }
142fc7dab8eSPierre-Louis Bossart 
143725218f1SPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus * bus,int sublink)144725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_up_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
145725218f1SPierre-Louis Bossart 
146725218f1SPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus * bus,int sublink)147725218f1SPierre-Louis Bossart hdac_bus_eml_sdw_power_down_unlocked(struct hdac_bus *bus, int sublink) { return 0; }
148725218f1SPierre-Louis Bossart 
14987a6ddc0SPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus * bus,int sublink,u16 * lsdiid)150*34e38f03SPierre-Louis Bossart hdac_bus_eml_sdw_get_lsdiid_unlocked(struct hdac_bus *bus, int sublink, u16 *lsdiid) { return 0; }
151*34e38f03SPierre-Louis Bossart 
152*34e38f03SPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus * bus,int sublink,int dev_num)15387a6ddc0SPierre-Louis Bossart hdac_bus_eml_sdw_set_lsdiid(struct hdac_bus *bus, int sublink, int dev_num) { return 0; }
15487a6ddc0SPierre-Louis Bossart 
155ccc2f0c1SPierre-Louis Bossart static inline int
hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus * bus,int sublink,int y,int channel_mask,int stream_id,int dir)156ccc2f0c1SPierre-Louis Bossart hdac_bus_eml_sdw_map_stream_ch(struct hdac_bus *bus, int sublink, int y,
157ccc2f0c1SPierre-Louis Bossart 			       int channel_mask, int stream_id, int dir)
158ccc2f0c1SPierre-Louis Bossart {
159ccc2f0c1SPierre-Louis Bossart 	return 0;
160ccc2f0c1SPierre-Louis Bossart }
161ccc2f0c1SPierre-Louis Bossart 
hda_bus_ml_put_all(struct hdac_bus * bus)16218227585SPierre-Louis Bossart static inline void hda_bus_ml_put_all(struct hdac_bus *bus) { }
hda_bus_ml_reset_losidv(struct hdac_bus * bus)16318227585SPierre-Louis Bossart static inline void hda_bus_ml_reset_losidv(struct hdac_bus *bus) { }
hda_bus_ml_resume(struct hdac_bus * bus)16418227585SPierre-Louis Bossart static inline int hda_bus_ml_resume(struct hdac_bus *bus) { return 0; }
hda_bus_ml_suspend(struct hdac_bus * bus)16518227585SPierre-Louis Bossart static inline int hda_bus_ml_suspend(struct hdac_bus *bus) { return 0; }
16618227585SPierre-Louis Bossart 
1672b864e96SPierre-Louis Bossart static inline struct hdac_ext_link *
hdac_bus_eml_ssp_get_hlink(struct hdac_bus * bus)1682b864e96SPierre-Louis Bossart hdac_bus_eml_ssp_get_hlink(struct hdac_bus *bus) { return NULL; }
1692b864e96SPierre-Louis Bossart 
1702b864e96SPierre-Louis Bossart static inline struct hdac_ext_link *
hdac_bus_eml_dmic_get_hlink(struct hdac_bus * bus)1712b864e96SPierre-Louis Bossart hdac_bus_eml_dmic_get_hlink(struct hdac_bus *bus) { return NULL; }
1722b864e96SPierre-Louis Bossart 
173dcb88fc4SPierre-Louis Bossart static inline struct hdac_ext_link *
hdac_bus_eml_sdw_get_hlink(struct hdac_bus * bus)174dcb88fc4SPierre-Louis Bossart hdac_bus_eml_sdw_get_hlink(struct hdac_bus *bus) { return NULL; }
175dcb88fc4SPierre-Louis Bossart 
176681f27f3SPierre-Louis Bossart static inline struct mutex *
hdac_bus_eml_get_mutex(struct hdac_bus * bus,bool alt,int elid)177681f27f3SPierre-Louis Bossart hdac_bus_eml_get_mutex(struct hdac_bus *bus, bool alt, int elid) { return NULL; }
178681f27f3SPierre-Louis Bossart 
17982958c40SPierre-Louis Bossart static inline int
hdac_bus_eml_enable_offload(struct hdac_bus * bus,bool alt,int elid,bool enable)18082958c40SPierre-Louis Bossart hdac_bus_eml_enable_offload(struct hdac_bus *bus, bool alt, int elid, bool enable)
18182958c40SPierre-Louis Bossart {
18282958c40SPierre-Louis Bossart 	return 0;
18382958c40SPierre-Louis Bossart }
18418227585SPierre-Louis Bossart #endif /* CONFIG_SND_SOC_SOF_HDA */
185