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