/* SPDX-License-Identifier: GPL-2.0 */
/*
 * mtk-dsp-sof-common.h  --  MediaTek dsp sof common definition
 *
 * Copyright (c) 2022 MediaTek Inc.
 * Author: Chunxu Li <chunxu.li@mediatek.com>
 */

#ifndef _MTK_DSP_SOF_COMMON_H_
#define _MTK_DSP_SOF_COMMON_H_

#include <sound/soc.h>

struct sof_conn_stream {
	const char *normal_link;
	const char *sof_link;
	const char *sof_dma;
	int stream_dir;
};

struct mtk_dai_link {
	const char *name;
	int (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *rtd,
				  struct snd_pcm_hw_params *params);
	struct list_head list;
};

struct mtk_sof_priv {
	const struct sof_conn_stream *conn_streams;
	int num_streams;
	int (*sof_dai_link_fixup)(struct snd_soc_pcm_runtime *rtd,
				  struct snd_pcm_hw_params *params);
	struct list_head dai_link_list;
};

int mtk_sof_dai_link_fixup(struct snd_soc_pcm_runtime *rtd,
			   struct snd_pcm_hw_params *params);
int mtk_sof_card_probe(struct snd_soc_card *card);
int mtk_sof_card_late_probe(struct snd_soc_card *card);
int mtk_sof_dailink_parse_of(struct snd_soc_card *card, struct device_node *np,
			     const char *propname, struct snd_soc_dai_link *pre_dai_links,
			     int pre_num_links);

#endif
