brintos

brintos / linux-shallow public Read only

0
0
Text · 2.9 KiB · 4925e03 Raw
128 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/* Copyright (C) 2014-2015 Broadcom Corporation */3#ifndef __CYGNUS_SSP_H__4#define __CYGNUS_SSP_H__5 6#define CYGNUS_TDM_DAI_MAX_SLOTS 167 8#define CYGNUS_MAX_PLAYBACK_PORTS 49#define CYGNUS_MAX_CAPTURE_PORTS 310#define CYGNUS_MAX_I2S_PORTS 311#define CYGNUS_MAX_PORTS  CYGNUS_MAX_PLAYBACK_PORTS12#define CYGNUS_AUIDO_MAX_NUM_CLKS 313 14#define CYGNUS_SSP_FRAMEBITS_DIV 115 16#define CYGNUS_SSPMODE_I2S 017#define CYGNUS_SSPMODE_TDM 118#define CYGNUS_SSPMODE_UNKNOWN -119 20#define CYGNUS_SSP_CLKSRC_PLL      021 22/* Max string length of our dt property names */23#define PROP_LEN_MAX 4024 25struct ringbuf_regs {26	unsigned rdaddr;27	unsigned wraddr;28	unsigned baseaddr;29	unsigned endaddr;30	unsigned fmark;   /* freemark for play, fullmark for caputure */31	unsigned period_bytes;32	unsigned buf_size;33};34 35#define RINGBUF_REG_PLAYBACK(num) ((struct ringbuf_regs) { \36	.rdaddr = SRC_RBUF_ ##num## _RDADDR_OFFSET, \37	.wraddr = SRC_RBUF_ ##num## _WRADDR_OFFSET, \38	.baseaddr = SRC_RBUF_ ##num## _BASEADDR_OFFSET, \39	.endaddr = SRC_RBUF_ ##num## _ENDADDR_OFFSET, \40	.fmark = SRC_RBUF_ ##num## _FREE_MARK_OFFSET, \41	.period_bytes = 0, \42	.buf_size = 0, \43})44 45#define RINGBUF_REG_CAPTURE(num) ((struct ringbuf_regs)  { \46	.rdaddr = DST_RBUF_ ##num## _RDADDR_OFFSET, \47	.wraddr = DST_RBUF_ ##num## _WRADDR_OFFSET, \48	.baseaddr = DST_RBUF_ ##num## _BASEADDR_OFFSET, \49	.endaddr = DST_RBUF_ ##num## _ENDADDR_OFFSET, \50	.fmark = DST_RBUF_ ##num## _FULL_MARK_OFFSET, \51	.period_bytes = 0, \52	.buf_size = 0, \53})54 55enum cygnus_audio_port_type {56	PORT_TDM,57	PORT_SPDIF,58};59 60struct cygnus_ssp_regs {61	u32 i2s_stream_cfg;62	u32 i2s_cfg;63	u32 i2s_cap_stream_cfg;64	u32 i2s_cap_cfg;65	u32 i2s_mclk_cfg;66 67	u32 bf_destch_ctrl;68	u32 bf_destch_cfg;69	u32 bf_sourcech_ctrl;70	u32 bf_sourcech_cfg;71	u32 bf_sourcech_grp;72};73 74struct cygnus_track_clk {75	bool cap_en;76	bool play_en;77	bool cap_clk_en;78	bool play_clk_en;79};80 81struct cygnus_aio_port {82	int portnum;83	int mode;84	bool is_slave;85	int streams_on;   /* will be 0 if both capture and play are off */86	int fsync_width;87	int port_type;88 89	u32 mclk;90	u32 lrclk;91	u32 bit_per_frame;92	u32 pll_clk_num;93 94	struct cygnus_audio *cygaud;95	struct cygnus_ssp_regs regs;96 97	struct ringbuf_regs play_rb_regs;98	struct ringbuf_regs capture_rb_regs;99 100	struct snd_pcm_substream *play_stream;101	struct snd_pcm_substream *capture_stream;102 103	struct cygnus_track_clk clk_trace;104};105 106 107struct cygnus_audio {108	struct cygnus_aio_port  portinfo[CYGNUS_MAX_PORTS];109 110	int irq_num;111	void __iomem *audio;112	struct device *dev;113	void __iomem *i2s_in;114 115	struct clk *audio_clk[CYGNUS_AUIDO_MAX_NUM_CLKS];116	int active_ports;117	unsigned long vco_rate;118};119 120extern int cygnus_ssp_set_custom_fsync_width(struct snd_soc_dai *cpu_dai,121						int len);122extern int cygnus_soc_platform_register(struct device *dev,123					struct cygnus_audio *cygaud);124extern int cygnus_soc_platform_unregister(struct device *dev);125extern int cygnus_ssp_set_custom_fsync_width(struct snd_soc_dai *cpu_dai,126	int len);127#endif128