1aa9c3b72SJerome Brunet /* SPDX-License-Identifier: GPL-2.0 */ 2aa9c3b72SJerome Brunet /* 3aa9c3b72SJerome Brunet * Copyright (c) 2020 BayLibre, SAS. 4aa9c3b72SJerome Brunet * Author: Jerome Brunet <jbrunet@baylibre.com> 5aa9c3b72SJerome Brunet */ 6aa9c3b72SJerome Brunet 7aa9c3b72SJerome Brunet #ifndef _MESON_SND_CARD_H 8aa9c3b72SJerome Brunet #define _MESON_SND_CARD_H 9aa9c3b72SJerome Brunet 10aa9c3b72SJerome Brunet struct device_node; 11aa9c3b72SJerome Brunet struct platform_device; 12aa9c3b72SJerome Brunet 13aa9c3b72SJerome Brunet struct snd_soc_card; 14aa9c3b72SJerome Brunet struct snd_pcm_substream; 15aa9c3b72SJerome Brunet struct snd_pcm_hw_params; 16aa9c3b72SJerome Brunet 17aa9c3b72SJerome Brunet #define DT_PREFIX "amlogic," 18aa9c3b72SJerome Brunet 19aa9c3b72SJerome Brunet struct meson_card_match_data { 20aa9c3b72SJerome Brunet int (*add_link)(struct snd_soc_card *card, 21aa9c3b72SJerome Brunet struct device_node *node, 22aa9c3b72SJerome Brunet int *index); 23aa9c3b72SJerome Brunet }; 24aa9c3b72SJerome Brunet 25aa9c3b72SJerome Brunet struct meson_card { 26aa9c3b72SJerome Brunet const struct meson_card_match_data *match_data; 27aa9c3b72SJerome Brunet struct snd_soc_card card; 28aa9c3b72SJerome Brunet void **link_data; 29aa9c3b72SJerome Brunet }; 30aa9c3b72SJerome Brunet 31aa9c3b72SJerome Brunet unsigned int meson_card_parse_daifmt(struct device_node *node, 32aa9c3b72SJerome Brunet struct device_node *cpu_node); 33aa9c3b72SJerome Brunet 34aa9c3b72SJerome Brunet int meson_card_i2s_set_sysclk(struct snd_pcm_substream *substream, 35aa9c3b72SJerome Brunet struct snd_pcm_hw_params *params, 36aa9c3b72SJerome Brunet unsigned int mclk_fs); 37aa9c3b72SJerome Brunet 38aa9c3b72SJerome Brunet int meson_card_reallocate_links(struct snd_soc_card *card, 39aa9c3b72SJerome Brunet unsigned int num_links); 40aa9c3b72SJerome Brunet int meson_card_parse_dai(struct snd_soc_card *card, 41aa9c3b72SJerome Brunet struct device_node *node, 42*2e1dbea1SKuninori Morimoto struct snd_soc_dai_link_component *dlc); 43aa9c3b72SJerome Brunet int meson_card_set_be_link(struct snd_soc_card *card, 44aa9c3b72SJerome Brunet struct snd_soc_dai_link *link, 45aa9c3b72SJerome Brunet struct device_node *node); 46aa9c3b72SJerome Brunet int meson_card_set_fe_link(struct snd_soc_card *card, 47aa9c3b72SJerome Brunet struct snd_soc_dai_link *link, 48aa9c3b72SJerome Brunet struct device_node *node, 49aa9c3b72SJerome Brunet bool is_playback); 50aa9c3b72SJerome Brunet 51aa9c3b72SJerome Brunet int meson_card_probe(struct platform_device *pdev); 52aa9c3b72SJerome Brunet int meson_card_remove(struct platform_device *pdev); 53aa9c3b72SJerome Brunet 54aa9c3b72SJerome Brunet #endif /* _MESON_SND_CARD_H */ 55