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_INTERFACE_H 8*a295be8dSValerio Setti #define _MESON_GX_INTERFACE_H 9*a295be8dSValerio Setti 10*a295be8dSValerio Setti #include <linux/clk.h> 11*a295be8dSValerio Setti #include <linux/regmap.h> 12*a295be8dSValerio Setti #include <sound/pcm.h> 13*a295be8dSValerio Setti #include <sound/soc.h> 14*a295be8dSValerio Setti #include <sound/soc-dai.h> 15*a295be8dSValerio Setti 16*a295be8dSValerio Setti struct gx_iface { 17*a295be8dSValerio Setti struct clk *mclk; 18*a295be8dSValerio Setti unsigned long mclk_rate; 19*a295be8dSValerio Setti 20*a295be8dSValerio Setti /* format is common to all the DAIs of the iface */ 21*a295be8dSValerio Setti unsigned int fmt; 22*a295be8dSValerio Setti }; 23*a295be8dSValerio Setti 24*a295be8dSValerio Setti struct gx_stream { 25*a295be8dSValerio Setti struct gx_iface *iface; 26*a295be8dSValerio Setti struct list_head formatter_list; 27*a295be8dSValerio Setti struct mutex lock; 28*a295be8dSValerio Setti unsigned int channels; 29*a295be8dSValerio Setti unsigned int width; 30*a295be8dSValerio Setti unsigned int physical_width; 31*a295be8dSValerio Setti bool ready; 32*a295be8dSValerio Setti 33*a295be8dSValerio Setti /* For continuous clock tracking */ 34*a295be8dSValerio Setti bool clk_enabled; 35*a295be8dSValerio Setti }; 36*a295be8dSValerio Setti 37*a295be8dSValerio Setti struct gx_stream *gx_stream_alloc(struct gx_iface *iface); 38*a295be8dSValerio Setti void gx_stream_free(struct gx_stream *ts); 39*a295be8dSValerio Setti int gx_stream_start(struct gx_stream *ts); 40*a295be8dSValerio Setti void gx_stream_stop(struct gx_stream *ts); 41*a295be8dSValerio Setti 42*a295be8dSValerio Setti #endif /* _MESON_GX_INTERFACE_H */ 43