162306a36Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0 OR MIT) 262306a36Sopenharmony_ci * 362306a36Sopenharmony_ci * Copyright (c) 2018 Baylibre SAS. 462306a36Sopenharmony_ci * Author: Jerome Brunet <jbrunet@baylibre.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef _MESON_AXG_TDM_FORMATTER_H 862306a36Sopenharmony_ci#define _MESON_AXG_TDM_FORMATTER_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "axg-tdm.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistruct platform_device; 1362306a36Sopenharmony_cistruct regmap; 1462306a36Sopenharmony_cistruct snd_soc_dapm_widget; 1562306a36Sopenharmony_cistruct snd_kcontrol; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistruct axg_tdm_formatter_hw { 1862306a36Sopenharmony_ci unsigned int skew_offset; 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cistruct axg_tdm_formatter_ops { 2262306a36Sopenharmony_ci struct axg_tdm_stream *(*get_stream)(struct snd_soc_dapm_widget *w); 2362306a36Sopenharmony_ci void (*enable)(struct regmap *map); 2462306a36Sopenharmony_ci void (*disable)(struct regmap *map); 2562306a36Sopenharmony_ci int (*prepare)(struct regmap *map, 2662306a36Sopenharmony_ci const struct axg_tdm_formatter_hw *quirks, 2762306a36Sopenharmony_ci struct axg_tdm_stream *ts); 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct axg_tdm_formatter_driver { 3162306a36Sopenharmony_ci const struct snd_soc_component_driver *component_drv; 3262306a36Sopenharmony_ci const struct regmap_config *regmap_cfg; 3362306a36Sopenharmony_ci const struct axg_tdm_formatter_ops *ops; 3462306a36Sopenharmony_ci const struct axg_tdm_formatter_hw *quirks; 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ciint axg_tdm_formatter_set_channel_masks(struct regmap *map, 3862306a36Sopenharmony_ci struct axg_tdm_stream *ts, 3962306a36Sopenharmony_ci unsigned int offset); 4062306a36Sopenharmony_ciint axg_tdm_formatter_event(struct snd_soc_dapm_widget *w, 4162306a36Sopenharmony_ci struct snd_kcontrol *control, 4262306a36Sopenharmony_ci int event); 4362306a36Sopenharmony_ciint axg_tdm_formatter_probe(struct platform_device *pdev); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci#endif /* _MESON_AXG_TDM_FORMATTER_H */ 46