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