xref: /linux/sound/soc/meson/gx-interface.h (revision e5c91aac491def6ab3f90c4cc246e3fcb0f8f058)
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