1*a295be8dSValerio Setti /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */ 2*a295be8dSValerio Setti /* 3*a295be8dSValerio Setti * Copyright (c) 2026 Baylibre SAS. 4*a295be8dSValerio Setti * Author: Valerio Setti <vsetti@baylibre.com> 5*a295be8dSValerio Setti */ 6*a295be8dSValerio Setti 7*a295be8dSValerio Setti #ifndef _MESON_GX_FORMATTER_H 8*a295be8dSValerio Setti #define _MESON_GX_FORMATTER_H 9*a295be8dSValerio Setti 10*a295be8dSValerio Setti #include "gx-interface.h" 11*a295be8dSValerio Setti 12*a295be8dSValerio Setti struct platform_device; 13*a295be8dSValerio Setti struct regmap; 14*a295be8dSValerio Setti struct snd_soc_dapm_widget; 15*a295be8dSValerio Setti struct snd_kcontrol; 16*a295be8dSValerio Setti 17*a295be8dSValerio Setti struct gx_formatter_hw { 18*a295be8dSValerio Setti unsigned int skew_offset; 19*a295be8dSValerio Setti }; 20*a295be8dSValerio Setti 21*a295be8dSValerio Setti struct gx_formatter_ops { 22*a295be8dSValerio Setti struct gx_stream *(*get_stream)(struct snd_soc_dapm_widget *w); 23*a295be8dSValerio Setti void (*enable)(struct regmap *map); 24*a295be8dSValerio Setti void (*disable)(struct regmap *map); 25*a295be8dSValerio Setti int (*prepare)(struct regmap *map, 26*a295be8dSValerio Setti const struct gx_formatter_hw *quirks, 27*a295be8dSValerio Setti struct gx_stream *ts); 28*a295be8dSValerio Setti }; 29*a295be8dSValerio Setti 30*a295be8dSValerio Setti struct gx_formatter_driver { 31*a295be8dSValerio Setti const struct snd_soc_component_driver *component_drv; 32*a295be8dSValerio Setti const struct regmap_config *regmap_cfg; 33*a295be8dSValerio Setti const struct gx_formatter_ops *ops; 34*a295be8dSValerio Setti const struct gx_formatter_hw *quirks; 35*a295be8dSValerio Setti }; 36*a295be8dSValerio Setti 37*a295be8dSValerio Setti int gx_formatter_event(struct snd_soc_dapm_widget *w, 38*a295be8dSValerio Setti struct snd_kcontrol *control, 39*a295be8dSValerio Setti int event); 40*a295be8dSValerio Setti int gx_formatter_probe(struct platform_device *pdev); 41*a295be8dSValerio Setti 42*a295be8dSValerio Setti int gx_formatter_create(struct device *dev, 43*a295be8dSValerio Setti struct snd_soc_dapm_widget *w, 44*a295be8dSValerio Setti const struct gx_formatter_driver *drv, 45*a295be8dSValerio Setti struct regmap *regmap); 46*a295be8dSValerio Setti 47*a295be8dSValerio Setti /* 48*a295be8dSValerio Setti * Formatter data is already freed when the associated device is removed, 49*a295be8dSValerio Setti * so we just need to remove the pointer from the widget. 50*a295be8dSValerio Setti */ 51*a295be8dSValerio Setti static inline void gx_formatter_free(struct snd_soc_dapm_widget *w) 52*a295be8dSValerio Setti { 53*a295be8dSValerio Setti w->priv = NULL; 54*a295be8dSValerio Setti } 55*a295be8dSValerio Setti 56*a295be8dSValerio Setti #endif /* _MESON_GX_FORMATTER_H */ 57