xref: /linux/sound/soc/meson/aiu.h (revision 933f98be60a7b9c287acb081fb5d6659dd5e0441)
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 *pclk;
376ae9ca9cSJerome Brunet 	struct clk *spdif_mclk;
386ae9ca9cSJerome Brunet 	struct aiu_interface i2s;
396ae9ca9cSJerome Brunet 	struct aiu_interface spdif;
40edc76180SMartin Blumenstingl 	const struct aiu_platform_data *platform;
416ae9ca9cSJerome Brunet };
426ae9ca9cSJerome Brunet 
436ae9ca9cSJerome Brunet #define AIU_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |	\
446ae9ca9cSJerome Brunet 		     SNDRV_PCM_FMTBIT_S20_LE |	\
456ae9ca9cSJerome Brunet 		     SNDRV_PCM_FMTBIT_S24_LE)
466ae9ca9cSJerome Brunet 
476ae9ca9cSJerome Brunet int aiu_of_xlate_dai_name(struct snd_soc_component *component,
48*933f98beSKrzysztof Kozlowski 			  const struct of_phandle_args *args,
496ae9ca9cSJerome Brunet 			  const char **dai_name,
506ae9ca9cSJerome Brunet 			  unsigned int component_id);
516ae9ca9cSJerome Brunet 
52b82b734cSJerome Brunet int aiu_hdmi_ctrl_register_component(struct device *dev);
5365816025SJerome Brunet int aiu_acodec_ctrl_register_component(struct device *dev);
54b82b734cSJerome Brunet 
556ae9ca9cSJerome Brunet int aiu_fifo_i2s_dai_probe(struct snd_soc_dai *dai);
566ae9ca9cSJerome Brunet int aiu_fifo_spdif_dai_probe(struct snd_soc_dai *dai);
576ae9ca9cSJerome Brunet 
586ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_fifo_i2s_dai_ops;
596ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_fifo_spdif_dai_ops;
606ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_encoder_i2s_dai_ops;
616ae9ca9cSJerome Brunet extern const struct snd_soc_dai_ops aiu_encoder_spdif_dai_ops;
626ae9ca9cSJerome Brunet 
636ae9ca9cSJerome Brunet #define AIU_IEC958_BPF			0x000
646ae9ca9cSJerome Brunet #define AIU_958_MISC			0x010
656ae9ca9cSJerome Brunet #define AIU_IEC958_DCU_FF_CTRL		0x01c
666ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_L0		0x020
676ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_L1		0x024
686ae9ca9cSJerome Brunet #define AIU_958_CTRL			0x028
696ae9ca9cSJerome Brunet #define AIU_I2S_SOURCE_DESC		0x034
706ae9ca9cSJerome Brunet #define AIU_I2S_DAC_CFG			0x040
716ae9ca9cSJerome Brunet #define AIU_I2S_SYNC			0x044
726ae9ca9cSJerome Brunet #define AIU_I2S_MISC			0x048
736ae9ca9cSJerome Brunet #define AIU_RST_SOFT			0x054
746ae9ca9cSJerome Brunet #define AIU_CLK_CTRL			0x058
756ae9ca9cSJerome Brunet #define AIU_CLK_CTRL_MORE		0x064
766ae9ca9cSJerome Brunet #define AIU_CODEC_DAC_LRCLK_CTRL	0x0a0
776ae9ca9cSJerome Brunet #define AIU_HDMI_CLK_DATA_CTRL		0x0a8
786ae9ca9cSJerome Brunet #define AIU_ACODEC_CTRL			0x0b0
796ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_R0		0x0c0
806ae9ca9cSJerome Brunet #define AIU_958_CHSTAT_R1		0x0c4
816ae9ca9cSJerome Brunet #define AIU_MEM_I2S_START		0x180
826ae9ca9cSJerome Brunet #define AIU_MEM_I2S_MASKS		0x18c
836ae9ca9cSJerome Brunet #define AIU_MEM_I2S_CONTROL		0x190
846ae9ca9cSJerome Brunet #define AIU_MEM_IEC958_START		0x194
856ae9ca9cSJerome Brunet #define AIU_MEM_IEC958_CONTROL		0x1a4
866ae9ca9cSJerome Brunet #define AIU_MEM_I2S_BUF_CNTL		0x1d8
876ae9ca9cSJerome Brunet #define AIU_MEM_IEC958_BUF_CNTL		0x1fc
886ae9ca9cSJerome Brunet 
896ae9ca9cSJerome Brunet #endif /* _MESON_AIU_H */
90