root/sound/soc/meson/meson-card.h
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (c) 2020 BayLibre, SAS.
 * Author: Jerome Brunet <jbrunet@baylibre.com>
 */

#ifndef _MESON_SND_CARD_H
#define _MESON_SND_CARD_H

struct device_node;
struct platform_device;

struct snd_soc_card;
struct snd_pcm_substream;
struct snd_pcm_hw_params;

#define DT_PREFIX "amlogic,"

struct meson_card_match_data {
        int (*add_link)(struct snd_soc_card *card,
                        struct device_node *node,
                        int *index);
};

struct meson_card {
        const struct meson_card_match_data *match_data;
        struct snd_soc_card card;
        void **link_data;
};

unsigned int meson_card_parse_daifmt(struct device_node *node,
                                     struct device_node *cpu_node);

int meson_card_i2s_set_sysclk(struct snd_pcm_substream *substream,
                              struct snd_pcm_hw_params *params,
                              unsigned int mclk_fs);

int meson_card_reallocate_links(struct snd_soc_card *card,
                                unsigned int num_links);
int meson_card_parse_dai(struct snd_soc_card *card,
                         struct device_node *node,
                         struct snd_soc_dai_link_component *dlc);
int meson_card_set_be_link(struct snd_soc_card *card,
                           struct snd_soc_dai_link *link,
                           struct device_node *node);
int meson_card_set_fe_link(struct snd_soc_card *card,
                           struct snd_soc_dai_link *link,
                           struct device_node *node,
                           bool is_playback);

int meson_card_probe(struct platform_device *pdev);
void meson_card_remove(struct platform_device *pdev);

#endif /* _MESON_SND_CARD_H */