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