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