xref: /openbmc/linux/sound/soc/meson/meson-card.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
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