xref: /linux/sound/soc/meson/aiu.h (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
16ae9ca9cSJerome Brunet /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
26ae9ca9cSJerome Brunet /*
36ae9ca9cSJerome Brunet  * Copyright (c) 2018 BayLibre, SAS.
46ae9ca9cSJerome Brunet  * Author: Jerome Brunet <jbrunet@baylibre.com>
56ae9ca9cSJerome Brunet  */
66ae9ca9cSJerome Brunet 
76ae9ca9cSJerome Brunet #ifndef _MESON_AIU_H
86ae9ca9cSJerome Brunet #define _MESON_AIU_H
96ae9ca9cSJerome Brunet 
106ae9ca9cSJerome Brunet struct clk;
116ae9ca9cSJerome Brunet struct clk_bulk_data;
126ae9ca9cSJerome Brunet struct device;
136ae9ca9cSJerome Brunet struct of_phandle_args;
146ae9ca9cSJerome Brunet struct snd_soc_dai;
156ae9ca9cSJerome Brunet struct snd_soc_dai_ops;
166ae9ca9cSJerome Brunet 
176ae9ca9cSJerome Brunet enum aiu_clk_ids {
186ae9ca9cSJerome Brunet 	PCLK = 0,
196ae9ca9cSJerome Brunet 	AOCLK,
206ae9ca9cSJerome Brunet 	MCLK,
216ae9ca9cSJerome Brunet 	MIXER
226ae9ca9cSJerome Brunet };
236ae9ca9cSJerome Brunet 
246ae9ca9cSJerome Brunet struct aiu_interface {
256ae9ca9cSJerome Brunet 	struct clk_bulk_data *clks;
266ae9ca9cSJerome Brunet 	unsigned int clk_num;
276e700f06SJerome Brunet 	int irq;
286ae9ca9cSJerome Brunet };
296ae9ca9cSJerome Brunet 
30edc76180SMartin Blumenstingl struct aiu_platform_data {
31edc76180SMartin Blumenstingl 	bool has_acodec;
323e25c445SMartin Blumenstingl 	bool has_clk_ctrl_more_i2s_div;
33edc76180SMartin Blumenstingl };
34edc76180SMartin Blumenstingl 
356ae9ca9cSJerome Brunet struct aiu {
366ae9ca9cSJerome Brunet 	struct clk *spdif_mclk;
376ae9ca9cSJerome Brunet 	struct aiu_interface i2s;
386ae9ca9cSJerome Brunet 	struct aiu_interface spdif;
39edc76180SMartin Blumenstingl 	const struct aiu_platform_data *platform;
406ae9ca9cSJerome Brunet };
416ae9ca9cSJerome Brunet 
426ae9ca9cSJerome Brunet #define AIU_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |	\
436ae9ca9cSJerome Brunet 		     SNDRV_PCM_FMTBIT_S20_LE |	\
446ae9ca9cSJerome Brunet 		     SNDRV_PCM_FMTBIT_S24_LE)
456ae9ca9cSJerome Brunet 
466ae9ca9cSJerome Brunet int aiu_of_xlate_dai_name(struct snd_soc_component *component,
47*933f98beSKrzysztof Kozlowski 			  const struct of_phandle_args *args,
486ae9ca9cSJerome Brunet 			  const char **dai_name,
496ae9ca9cSJerome Brunet 			  unsigned int component_id);
506ae9ca9cSJerome Brunet 
51b82b734cSJerome Brunet int aiu_hdmi_ctrl_register_component(struct device *dev);
5265816025SJerome Brunet int aiu_acodec_ctrl_register_component(struct device *dev);
53b82b734cSJerome Brunet 
546ae9ca9cSJerome Brunet int aiu_fifo_i2s_dai_probe(struct snd_soc_dai *dai);
556ae9ca9cSJerome Brunet int aiu_fifo_spdif_dai_probe(struct snd_soc_dai *dai);
566ae9ca9cSJerome Brunet 
576ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_fifo_i2s_dai_ops;
586ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_fifo_spdif_dai_ops;
596ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_encoder_i2s_dai_ops;
606ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_encoder_spdif_dai_ops;
616ae9ca9cSJerome Brunet 
626ae9ca9cSJerome Brunet #define AIU_IEC958_BPF			0x000
636ae9ca9cSJerome Brunet #define AIU_958_MISC			0x010
646ae9ca9cSJerome Brunet #define AIU_IEC958_DCU_FF_CTRL		0x01c
656ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_L0		0x020
666ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_L1		0x024
676ae9ca9cSJerome Brunet #define AIU_958_CTRL			0x028
686ae9ca9cSJerome Brunet #define AIU_I2S_SOURCE_DESC		0x034
696ae9ca9cSJerome Brunet #define AIU_I2S_DAC_CFG			0x040
706ae9ca9cSJerome Brunet #define AIU_I2S_SYNC			0x044
716ae9ca9cSJerome Brunet #define AIU_I2S_MISC			0x048
726ae9ca9cSJerome Brunet #define AIU_RST_SOFT			0x054
736ae9ca9cSJerome Brunet #define AIU_CLK_CTRL			0x058
746ae9ca9cSJerome Brunet #define AIU_CLK_CTRL_MORE		0x064
756ae9ca9cSJerome Brunet #define AIU_CODEC_DAC_LRCLK_CTRL	0x0a0
766ae9ca9cSJerome Brunet #define AIU_HDMI_CLK_DATA_CTRL		0x0a8
776ae9ca9cSJerome Brunet #define AIU_ACODEC_CTRL			0x0b0
786ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_R0		0x0c0
796ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_R1		0x0c4
806ae9ca9cSJerome Brunet #define AIU_MEM_I2S_START		0x180
816ae9ca9cSJerome Brunet #define AIU_MEM_I2S_MASKS		0x18c
826ae9ca9cSJerome Brunet #define AIU_MEM_I2S_CONTROL		0x190
836ae9ca9cSJerome Brunet #define AIU_MEM_IEC958_START		0x194
846ae9ca9cSJerome Brunet #define AIU_MEM_IEC958_CONTROL		0x1a4
856ae9ca9cSJerome Brunet #define AIU_MEM_I2S_BUF_CNTL		0x1d8
866ae9ca9cSJerome Brunet #define AIU_MEM_IEC958_BUF_CNTL		0x1fc
876ae9ca9cSJerome Brunet 
886ae9ca9cSJerome Brunet #endif /* _MESON_AIU_H */
89