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