xref: /openbmc/linux/sound/soc/meson/axg-tdm-formatter.h (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
11a11d88fSJerome Brunet /* SPDX-License-Identifier: (GPL-2.0 OR MIT)
21a11d88fSJerome Brunet  *
31a11d88fSJerome Brunet  * Copyright (c) 2018 Baylibre SAS.
41a11d88fSJerome Brunet  * Author: Jerome Brunet <jbrunet@baylibre.com>
51a11d88fSJerome Brunet  */
61a11d88fSJerome Brunet 
71a11d88fSJerome Brunet #ifndef _MESON_AXG_TDM_FORMATTER_H
81a11d88fSJerome Brunet #define _MESON_AXG_TDM_FORMATTER_H
91a11d88fSJerome Brunet 
101a11d88fSJerome Brunet #include "axg-tdm.h"
111a11d88fSJerome Brunet 
121a11d88fSJerome Brunet struct platform_device;
131a11d88fSJerome Brunet struct regmap;
141a11d88fSJerome Brunet struct snd_soc_dapm_widget;
151a11d88fSJerome Brunet struct snd_kcontrol;
161a11d88fSJerome Brunet 
17*f01bc67fSJerome Brunet struct axg_tdm_formatter_hw {
18*f01bc67fSJerome Brunet 	unsigned int skew_offset;
19*f01bc67fSJerome Brunet };
20*f01bc67fSJerome Brunet 
211a11d88fSJerome Brunet struct axg_tdm_formatter_ops {
221a11d88fSJerome Brunet 	struct axg_tdm_stream *(*get_stream)(struct snd_soc_dapm_widget *w);
231a11d88fSJerome Brunet 	void (*enable)(struct regmap *map);
241a11d88fSJerome Brunet 	void (*disable)(struct regmap *map);
25*f01bc67fSJerome Brunet 	int (*prepare)(struct regmap *map,
26*f01bc67fSJerome Brunet 		       const struct axg_tdm_formatter_hw *quirks,
27*f01bc67fSJerome Brunet 		       struct axg_tdm_stream *ts);
281a11d88fSJerome Brunet };
291a11d88fSJerome Brunet 
301a11d88fSJerome Brunet struct axg_tdm_formatter_driver {
311a11d88fSJerome Brunet 	const struct snd_soc_component_driver *component_drv;
321a11d88fSJerome Brunet 	const struct regmap_config *regmap_cfg;
331a11d88fSJerome Brunet 	const struct axg_tdm_formatter_ops *ops;
34*f01bc67fSJerome Brunet 	const struct axg_tdm_formatter_hw *quirks;
351a11d88fSJerome Brunet };
361a11d88fSJerome Brunet 
371a11d88fSJerome Brunet int axg_tdm_formatter_set_channel_masks(struct regmap *map,
381a11d88fSJerome Brunet 					struct axg_tdm_stream *ts,
391a11d88fSJerome Brunet 					unsigned int offset);
401a11d88fSJerome Brunet int axg_tdm_formatter_event(struct snd_soc_dapm_widget *w,
411a11d88fSJerome Brunet 			    struct snd_kcontrol *control,
421a11d88fSJerome Brunet 			    int event);
431a11d88fSJerome Brunet int axg_tdm_formatter_probe(struct platform_device *pdev);
441a11d88fSJerome Brunet 
451a11d88fSJerome Brunet #endif /* _MESON_AXG_TDM_FORMATTER_H */
46