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