162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * mt8195-afe-common.h -- Mediatek 8195 audio driver definitions 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2021 MediaTek Inc. 662306a36Sopenharmony_ci * Author: Bicycle Tsai <bicycle.tsai@mediatek.com> 762306a36Sopenharmony_ci * Trevor Wu <trevor.wu@mediatek.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef _MT_8195_AFE_COMMON_H_ 1162306a36Sopenharmony_ci#define _MT_8195_AFE_COMMON_H_ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <sound/soc.h> 1462306a36Sopenharmony_ci#include <linux/list.h> 1562306a36Sopenharmony_ci#include <linux/regmap.h> 1662306a36Sopenharmony_ci#include "../common/mtk-base-afe.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cienum { 1962306a36Sopenharmony_ci MT8195_DAI_START, 2062306a36Sopenharmony_ci MT8195_AFE_MEMIF_START = MT8195_DAI_START, 2162306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL2 = MT8195_AFE_MEMIF_START, 2262306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL3, 2362306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL6, 2462306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL7, 2562306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL8, 2662306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL10, 2762306a36Sopenharmony_ci MT8195_AFE_MEMIF_DL11, 2862306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL_START, 2962306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL1 = MT8195_AFE_MEMIF_UL_START, 3062306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL2, 3162306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL3, 3262306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL4, 3362306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL5, 3462306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL6, 3562306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL8, 3662306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL9, 3762306a36Sopenharmony_ci MT8195_AFE_MEMIF_UL10, 3862306a36Sopenharmony_ci MT8195_AFE_MEMIF_END, 3962306a36Sopenharmony_ci MT8195_AFE_MEMIF_NUM = (MT8195_AFE_MEMIF_END - MT8195_AFE_MEMIF_START), 4062306a36Sopenharmony_ci MT8195_AFE_IO_START = MT8195_AFE_MEMIF_END, 4162306a36Sopenharmony_ci MT8195_AFE_IO_DL_SRC = MT8195_AFE_IO_START, 4262306a36Sopenharmony_ci MT8195_AFE_IO_DPTX, 4362306a36Sopenharmony_ci MT8195_AFE_IO_ETDM_START, 4462306a36Sopenharmony_ci MT8195_AFE_IO_ETDM1_IN = MT8195_AFE_IO_ETDM_START, 4562306a36Sopenharmony_ci MT8195_AFE_IO_ETDM2_IN, 4662306a36Sopenharmony_ci MT8195_AFE_IO_ETDM1_OUT, 4762306a36Sopenharmony_ci MT8195_AFE_IO_ETDM2_OUT, 4862306a36Sopenharmony_ci MT8195_AFE_IO_ETDM3_OUT, 4962306a36Sopenharmony_ci MT8195_AFE_IO_ETDM_END, 5062306a36Sopenharmony_ci MT8195_AFE_IO_ETDM_NUM = 5162306a36Sopenharmony_ci (MT8195_AFE_IO_ETDM_END - MT8195_AFE_IO_ETDM_START), 5262306a36Sopenharmony_ci MT8195_AFE_IO_PCM = MT8195_AFE_IO_ETDM_END, 5362306a36Sopenharmony_ci MT8195_AFE_IO_UL_SRC1, 5462306a36Sopenharmony_ci MT8195_AFE_IO_UL_SRC2, 5562306a36Sopenharmony_ci MT8195_AFE_IO_END, 5662306a36Sopenharmony_ci MT8195_AFE_IO_NUM = (MT8195_AFE_IO_END - MT8195_AFE_IO_START), 5762306a36Sopenharmony_ci MT8195_DAI_END = MT8195_AFE_IO_END, 5862306a36Sopenharmony_ci MT8195_DAI_NUM = (MT8195_DAI_END - MT8195_DAI_START), 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cienum { 6262306a36Sopenharmony_ci MT8195_TOP_CG_A1SYS_TIMING, 6362306a36Sopenharmony_ci MT8195_TOP_CG_A2SYS_TIMING, 6462306a36Sopenharmony_ci MT8195_TOP_CG_26M_TIMING, 6562306a36Sopenharmony_ci MT8195_TOP_CG_NUM, 6662306a36Sopenharmony_ci}; 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_cienum { 6962306a36Sopenharmony_ci MT8195_AFE_IRQ_1, 7062306a36Sopenharmony_ci MT8195_AFE_IRQ_2, 7162306a36Sopenharmony_ci MT8195_AFE_IRQ_3, 7262306a36Sopenharmony_ci MT8195_AFE_IRQ_8, 7362306a36Sopenharmony_ci MT8195_AFE_IRQ_9, 7462306a36Sopenharmony_ci MT8195_AFE_IRQ_10, 7562306a36Sopenharmony_ci MT8195_AFE_IRQ_13, 7662306a36Sopenharmony_ci MT8195_AFE_IRQ_14, 7762306a36Sopenharmony_ci MT8195_AFE_IRQ_15, 7862306a36Sopenharmony_ci MT8195_AFE_IRQ_16, 7962306a36Sopenharmony_ci MT8195_AFE_IRQ_17, 8062306a36Sopenharmony_ci MT8195_AFE_IRQ_18, 8162306a36Sopenharmony_ci MT8195_AFE_IRQ_19, 8262306a36Sopenharmony_ci MT8195_AFE_IRQ_20, 8362306a36Sopenharmony_ci MT8195_AFE_IRQ_21, 8462306a36Sopenharmony_ci MT8195_AFE_IRQ_22, 8562306a36Sopenharmony_ci MT8195_AFE_IRQ_23, 8662306a36Sopenharmony_ci MT8195_AFE_IRQ_24, 8762306a36Sopenharmony_ci MT8195_AFE_IRQ_25, 8862306a36Sopenharmony_ci MT8195_AFE_IRQ_26, 8962306a36Sopenharmony_ci MT8195_AFE_IRQ_27, 9062306a36Sopenharmony_ci MT8195_AFE_IRQ_28, 9162306a36Sopenharmony_ci MT8195_AFE_IRQ_NUM, 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_cienum { 9562306a36Sopenharmony_ci MT8195_ETDM_OUT1_1X_EN = 9, 9662306a36Sopenharmony_ci MT8195_ETDM_OUT2_1X_EN = 10, 9762306a36Sopenharmony_ci MT8195_ETDM_OUT3_1X_EN = 11, 9862306a36Sopenharmony_ci MT8195_ETDM_IN1_1X_EN = 12, 9962306a36Sopenharmony_ci MT8195_ETDM_IN2_1X_EN = 13, 10062306a36Sopenharmony_ci MT8195_ETDM_IN1_NX_EN = 25, 10162306a36Sopenharmony_ci MT8195_ETDM_IN2_NX_EN = 26, 10262306a36Sopenharmony_ci}; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cienum { 10562306a36Sopenharmony_ci MT8195_MTKAIF_MISO_0, 10662306a36Sopenharmony_ci MT8195_MTKAIF_MISO_1, 10762306a36Sopenharmony_ci MT8195_MTKAIF_MISO_2, 10862306a36Sopenharmony_ci MT8195_MTKAIF_MISO_NUM, 10962306a36Sopenharmony_ci}; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_cistruct mtk_dai_memif_irq_priv { 11262306a36Sopenharmony_ci unsigned int asys_timing_sel; 11362306a36Sopenharmony_ci}; 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_cistruct mtkaif_param { 11662306a36Sopenharmony_ci bool mtkaif_calibration_ok; 11762306a36Sopenharmony_ci int mtkaif_chosen_phase[MT8195_MTKAIF_MISO_NUM]; 11862306a36Sopenharmony_ci int mtkaif_phase_cycle[MT8195_MTKAIF_MISO_NUM]; 11962306a36Sopenharmony_ci int mtkaif_dmic_on; 12062306a36Sopenharmony_ci int mtkaif_adda6_only; 12162306a36Sopenharmony_ci}; 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_cistruct clk; 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_cistruct mt8195_afe_private { 12662306a36Sopenharmony_ci struct clk **clk; 12762306a36Sopenharmony_ci struct clk_lookup **lookup; 12862306a36Sopenharmony_ci struct regmap *topckgen; 12962306a36Sopenharmony_ci int pm_runtime_bypass_reg_ctl; 13062306a36Sopenharmony_ci#ifdef CONFIG_DEBUG_FS 13162306a36Sopenharmony_ci struct dentry **debugfs_dentry; 13262306a36Sopenharmony_ci#endif 13362306a36Sopenharmony_ci int afe_on_ref_cnt; 13462306a36Sopenharmony_ci int top_cg_ref_cnt[MT8195_TOP_CG_NUM]; 13562306a36Sopenharmony_ci spinlock_t afe_ctrl_lock; /* Lock for afe control */ 13662306a36Sopenharmony_ci struct mtk_dai_memif_irq_priv irq_priv[MT8195_AFE_IRQ_NUM]; 13762306a36Sopenharmony_ci struct mtkaif_param mtkaif_params; 13862306a36Sopenharmony_ci 13962306a36Sopenharmony_ci /* dai */ 14062306a36Sopenharmony_ci void *dai_priv[MT8195_DAI_NUM]; 14162306a36Sopenharmony_ci}; 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ciint mt8195_afe_fs_timing(unsigned int rate); 14462306a36Sopenharmony_ci/* dai register */ 14562306a36Sopenharmony_ciint mt8195_dai_adda_register(struct mtk_base_afe *afe); 14662306a36Sopenharmony_ciint mt8195_dai_etdm_register(struct mtk_base_afe *afe); 14762306a36Sopenharmony_ciint mt8195_dai_pcm_register(struct mtk_base_afe *afe); 14862306a36Sopenharmony_ci 14962306a36Sopenharmony_ci#define MT8195_SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put, id) \ 15062306a36Sopenharmony_ci{ \ 15162306a36Sopenharmony_ci .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 15262306a36Sopenharmony_ci .info = snd_soc_info_enum_double, \ 15362306a36Sopenharmony_ci .get = xhandler_get, .put = xhandler_put, \ 15462306a36Sopenharmony_ci .device = id, \ 15562306a36Sopenharmony_ci .private_value = (unsigned long)&xenum, \ 15662306a36Sopenharmony_ci} 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci#endif 159