/* * Copyright (C) 2014-2015 Broadcom Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation version 2. * * This program is distributed "as is" WITHOUT ANY WARRANTY of any * kind, whether express or implied; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef __CYGNUS_SSP_H__ #define __CYGNUS_SSP_H__ #define CYGNUS_TDM_DAI_MAX_SLOTS 16 #define CYGNUS_MAX_PLAYBACK_PORTS 4 #define CYGNUS_MAX_CAPTURE_PORTS 3 #define CYGNUS_MAX_I2S_PORTS 3 #define CYGNUS_MAX_PORTS CYGNUS_MAX_PLAYBACK_PORTS #define CYGNUS_AUIDO_MAX_NUM_CLKS 3 #define CYGNUS_SSP_FRAMEBITS_DIV 1 #define CYGNUS_SSPMODE_I2S 0 #define CYGNUS_SSPMODE_TDM 1 #define CYGNUS_SSPMODE_UNKNOWN -1 #define CYGNUS_SSP_CLKSRC_PLL 0 /* Max string length of our dt property names */ #define PROP_LEN_MAX 40 struct ringbuf_regs { unsigned rdaddr; unsigned wraddr; unsigned baseaddr; unsigned endaddr; unsigned fmark; /* freemark for play, fullmark for caputure */ unsigned period_bytes; unsigned buf_size; }; #define RINGBUF_REG_PLAYBACK(num) ((struct ringbuf_regs) { \ .rdaddr = SRC_RBUF_ ##num## _RDADDR_OFFSET, \ .wraddr = SRC_RBUF_ ##num## _WRADDR_OFFSET, \ .baseaddr = SRC_RBUF_ ##num## _BASEADDR_OFFSET, \ .endaddr = SRC_RBUF_ ##num## _ENDADDR_OFFSET, \ .fmark = SRC_RBUF_ ##num## _FREE_MARK_OFFSET, \ .period_bytes = 0, \ .buf_size = 0, \ }) #define RINGBUF_REG_CAPTURE(num) ((struct ringbuf_regs) { \ .rdaddr = DST_RBUF_ ##num## _RDADDR_OFFSET, \ .wraddr = DST_RBUF_ ##num## _WRADDR_OFFSET, \ .baseaddr = DST_RBUF_ ##num## _BASEADDR_OFFSET, \ .endaddr = DST_RBUF_ ##num## _ENDADDR_OFFSET, \ .fmark = DST_RBUF_ ##num## _FULL_MARK_OFFSET, \ .period_bytes = 0, \ .buf_size = 0, \ }) enum cygnus_audio_port_type { PORT_TDM, PORT_SPDIF, }; struct cygnus_ssp_regs { u32 i2s_stream_cfg; u32 i2s_cfg; u32 i2s_cap_stream_cfg; u32 i2s_cap_cfg; u32 i2s_mclk_cfg; u32 bf_destch_ctrl; u32 bf_destch_cfg; u32 bf_sourcech_ctrl; u32 bf_sourcech_cfg; u32 bf_sourcech_grp; }; struct cygnus_track_clk { bool cap_en; bool play_en; bool cap_clk_en; bool play_clk_en; }; struct cygnus_aio_port { int portnum; int mode; bool is_slave; int streams_on; /* will be 0 if both capture and play are off */ int fsync_width; int port_type; u32 mclk; u32 lrclk; u32 bit_per_frame; u32 pll_clk_num; struct cygnus_audio *cygaud; struct cygnus_ssp_regs regs; struct ringbuf_regs play_rb_regs; struct ringbuf_regs capture_rb_regs; struct snd_pcm_substream *play_stream; struct snd_pcm_substream *capture_stream; struct cygnus_track_clk clk_trace; }; struct cygnus_audio { struct cygnus_aio_port portinfo[CYGNUS_MAX_PORTS]; int irq_num; void __iomem *audio; struct device *dev; void __iomem *i2s_in; struct clk *audio_clk[CYGNUS_AUIDO_MAX_NUM_CLKS]; int active_ports; unsigned long vco_rate; }; extern int cygnus_ssp_get_mode(struct snd_soc_dai *cpu_dai); extern int cygnus_ssp_add_pll_tweak_controls(struct snd_soc_pcm_runtime *rtd); extern int cygnus_ssp_set_custom_fsync_width(struct snd_soc_dai *cpu_dai, int len); extern int cygnus_soc_platform_register(struct device *dev, struct cygnus_audio *cygaud); extern int cygnus_soc_platform_unregister(struct device *dev); extern int cygnus_ssp_set_custom_fsync_width(struct snd_soc_dai *cpu_dai, int len); #endif ct name='context' onchange='this.form.submit();'>
author | Jiri Kosina <jkosina@suse.cz> | 2017-01-27 22:25:52 +0000 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-01-28 09:18:56 +0100 |
commit | bf29bddf0417a4783da3b24e8c9e017ac649326f (patch) | |
tree | 54a05a4883b73f80e4e1d8c4b15750aa01c39932 /sound/pci/echoaudio/indigo.c | |
parent | 883af14e67e8b8702b5560aa64c888c0cd0bd66c (diff) |