| /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */ | |
| /* | |
| * Copyright (c) 2026 Baylibre SAS. | |
| * Author: Valerio Setti <vsetti@baylibre.com> | |
| */ | |
| #ifndef _MESON_GX_INTERFACE_H | |
| #define _MESON_GX_INTERFACE_H | |
| #include <linux/clk.h> | |
| #include <linux/regmap.h> | |
| #include <sound/pcm.h> | |
| #include <sound/soc.h> | |
| #include <sound/soc-dai.h> | |
| struct gx_iface { | |
| struct clk *mclk; | |
| unsigned long mclk_rate; | |
| /* format is common to all the DAIs of the iface */ | |
| unsigned int fmt; | |
| }; | |
| struct gx_stream { | |
| struct gx_iface *iface; | |
| struct list_head formatter_list; | |
| struct mutex lock; | |
| unsigned int channels; | |
| unsigned int width; | |
| unsigned int physical_width; | |
| bool ready; | |
| /* For continuous clock tracking */ | |
| bool clk_enabled; | |
| }; | |
| struct gx_stream *gx_stream_alloc(struct gx_iface *iface); | |
| void gx_stream_free(struct gx_stream *ts); | |
| int gx_stream_start(struct gx_stream *ts); | |
| void gx_stream_stop(struct gx_stream *ts); | |
| #endif /* _MESON_GX_INTERFACE_H */ |