/* SPDX-License-Identifier: GPL-2.0 */ /* * mt8195-afe-common.h -- Mediatek 8195 audio driver definitions * * Copyright (c) 2021 MediaTek Inc. * Author: Bicycle Tsai * Trevor Wu */ #ifndef _MT_8195_AFE_COMMON_H_ #define _MT_8195_AFE_COMMON_H_ #include #include #include #include "../common/mtk-base-afe.h" enum { MT8195_DAI_START, MT8195_AFE_MEMIF_START = MT8195_DAI_START, MT8195_AFE_MEMIF_DL2 = MT8195_AFE_MEMIF_START, MT8195_AFE_MEMIF_DL3, MT8195_AFE_MEMIF_DL6, MT8195_AFE_MEMIF_DL7, MT8195_AFE_MEMIF_DL8, MT8195_AFE_MEMIF_DL10, MT8195_AFE_MEMIF_DL11, MT8195_AFE_MEMIF_UL_START, MT8195_AFE_MEMIF_UL1 = MT8195_AFE_MEMIF_UL_START, MT8195_AFE_MEMIF_UL2, MT8195_AFE_MEMIF_UL3, MT8195_AFE_MEMIF_UL4, MT8195_AFE_MEMIF_UL5, MT8195_AFE_MEMIF_UL6, MT8195_AFE_MEMIF_UL8, MT8195_AFE_MEMIF_UL9, MT8195_AFE_MEMIF_UL10, MT8195_AFE_MEMIF_END, MT8195_AFE_MEMIF_NUM = (MT8195_AFE_MEMIF_END - MT8195_AFE_MEMIF_START), MT8195_AFE_IO_START = MT8195_AFE_MEMIF_END, MT8195_AFE_IO_DL_SRC = MT8195_AFE_IO_START, MT8195_AFE_IO_DPTX, MT8195_AFE_IO_ETDM_START, MT8195_AFE_IO_ETDM1_IN = MT8195_AFE_IO_ETDM_START, MT8195_AFE_IO_ETDM2_IN, MT8195_AFE_IO_ETDM1_OUT, MT8195_AFE_IO_ETDM2_OUT, MT8195_AFE_IO_ETDM3_OUT, MT8195_AFE_IO_ETDM_END, MT8195_AFE_IO_ETDM_NUM = (MT8195_AFE_IO_ETDM_END - MT8195_AFE_IO_ETDM_START), MT8195_AFE_IO_PCM = MT8195_AFE_IO_ETDM_END, MT8195_AFE_IO_UL_SRC1, MT8195_AFE_IO_UL_SRC2, MT8195_AFE_IO_END, MT8195_AFE_IO_NUM = (MT8195_AFE_IO_END - MT8195_AFE_IO_START), MT8195_DAI_END = MT8195_AFE_IO_END, MT8195_DAI_NUM = (MT8195_DAI_END - MT8195_DAI_START), }; enum { MT8195_TOP_CG_A1SYS_TIMING, MT8195_TOP_CG_A2SYS_TIMING, MT8195_TOP_CG_26M_TIMING, MT8195_TOP_CG_NUM, }; enum { MT8195_AFE_IRQ_1, MT8195_AFE_IRQ_2, MT8195_AFE_IRQ_3, MT8195_AFE_IRQ_8, MT8195_AFE_IRQ_9, MT8195_AFE_IRQ_10, MT8195_AFE_IRQ_13, MT8195_AFE_IRQ_14, MT8195_AFE_IRQ_15, MT8195_AFE_IRQ_16, MT8195_AFE_IRQ_17, MT8195_AFE_IRQ_18, MT8195_AFE_IRQ_19, MT8195_AFE_IRQ_20, MT8195_AFE_IRQ_21, MT8195_AFE_IRQ_22, MT8195_AFE_IRQ_23, MT8195_AFE_IRQ_24, MT8195_AFE_IRQ_25, MT8195_AFE_IRQ_26, MT8195_AFE_IRQ_27, MT8195_AFE_IRQ_28, MT8195_AFE_IRQ_NUM, }; enum { MT8195_ETDM_OUT1_1X_EN = 9, MT8195_ETDM_OUT2_1X_EN = 10, MT8195_ETDM_OUT3_1X_EN = 11, MT8195_ETDM_IN1_1X_EN = 12, MT8195_ETDM_IN2_1X_EN = 13, MT8195_ETDM_IN1_NX_EN = 25, MT8195_ETDM_IN2_NX_EN = 26, }; enum { MT8195_MTKAIF_MISO_0, MT8195_MTKAIF_MISO_1, MT8195_MTKAIF_MISO_2, MT8195_MTKAIF_MISO_NUM, }; struct mtk_dai_memif_irq_priv { unsigned int asys_timing_sel; }; struct mtkaif_param { bool mtkaif_calibration_ok; int mtkaif_chosen_phase[MT8195_MTKAIF_MISO_NUM]; int mtkaif_phase_cycle[MT8195_MTKAIF_MISO_NUM]; int mtkaif_dmic_on; int mtkaif_adda6_only; }; struct clk; struct mt8195_afe_private { struct clk **clk; struct clk_lookup **lookup; struct regmap *topckgen; int pm_runtime_bypass_reg_ctl; #ifdef CONFIG_DEBUG_FS struct dentry **debugfs_dentry; #endif int afe_on_ref_cnt; int top_cg_ref_cnt[MT8195_TOP_CG_NUM]; spinlock_t afe_ctrl_lock; /* Lock for afe control */ struct mtk_dai_memif_irq_priv irq_priv[MT8195_AFE_IRQ_NUM]; struct mtkaif_param mtkaif_params; /* dai */ void *dai_priv[MT8195_DAI_NUM]; }; int mt8195_afe_fs_timing(unsigned int rate); /* dai register */ int mt8195_dai_adda_register(struct mtk_base_afe *afe); int mt8195_dai_etdm_register(struct mtk_base_afe *afe); int mt8195_dai_pcm_register(struct mtk_base_afe *afe); #define MT8195_SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put, id) \ { \ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ .info = snd_soc_info_enum_double, \ .get = xhandler_get, .put = xhandler_put, \ .device = id, \ .private_value = (unsigned long)&xenum, \ } #endif