summaryrefslogtreecommitdiffstats
path: root/sound/soc/meson/meson-card.h
blob: a0d693e4f4608bc43fcf15f8aa77ed1c4d5ac139 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/* 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 */