xref: /OK3568_Linux_fs/kernel/sound/soc/meson/axg-tdm-formatter.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0 OR MIT)
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright (c) 2018 Baylibre SAS.
4*4882a593Smuzhiyun  * Author: Jerome Brunet <jbrunet@baylibre.com>
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _MESON_AXG_TDM_FORMATTER_H
8*4882a593Smuzhiyun #define _MESON_AXG_TDM_FORMATTER_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include "axg-tdm.h"
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun struct platform_device;
13*4882a593Smuzhiyun struct regmap;
14*4882a593Smuzhiyun struct snd_soc_dapm_widget;
15*4882a593Smuzhiyun struct snd_kcontrol;
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun struct axg_tdm_formatter_hw {
18*4882a593Smuzhiyun 	unsigned int skew_offset;
19*4882a593Smuzhiyun };
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun struct axg_tdm_formatter_ops {
22*4882a593Smuzhiyun 	struct axg_tdm_stream *(*get_stream)(struct snd_soc_dapm_widget *w);
23*4882a593Smuzhiyun 	void (*enable)(struct regmap *map);
24*4882a593Smuzhiyun 	void (*disable)(struct regmap *map);
25*4882a593Smuzhiyun 	int (*prepare)(struct regmap *map,
26*4882a593Smuzhiyun 		       const struct axg_tdm_formatter_hw *quirks,
27*4882a593Smuzhiyun 		       struct axg_tdm_stream *ts);
28*4882a593Smuzhiyun };
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun struct axg_tdm_formatter_driver {
31*4882a593Smuzhiyun 	const struct snd_soc_component_driver *component_drv;
32*4882a593Smuzhiyun 	const struct regmap_config *regmap_cfg;
33*4882a593Smuzhiyun 	const struct axg_tdm_formatter_ops *ops;
34*4882a593Smuzhiyun 	const struct axg_tdm_formatter_hw *quirks;
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun int axg_tdm_formatter_set_channel_masks(struct regmap *map,
38*4882a593Smuzhiyun 					struct axg_tdm_stream *ts,
39*4882a593Smuzhiyun 					unsigned int offset);
40*4882a593Smuzhiyun int axg_tdm_formatter_event(struct snd_soc_dapm_widget *w,
41*4882a593Smuzhiyun 			    struct snd_kcontrol *control,
42*4882a593Smuzhiyun 			    int event);
43*4882a593Smuzhiyun int axg_tdm_formatter_probe(struct platform_device *pdev);
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun #endif /* _MESON_AXG_TDM_FORMATTER_H */
46