162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * mt8188-afe-common.h -- MediaTek 8188 audio driver definitions 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) 2022 MediaTek Inc. 662306a36Sopenharmony_ci * Author: Bicycle Tsai <bicycle.tsai@mediatek.com> 762306a36Sopenharmony_ci * Trevor Wu <trevor.wu@mediatek.com> 862306a36Sopenharmony_ci * Chun-Chia Chiu <chun-chia.chiu@mediatek.com> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef _MT_8188_AFE_COMMON_H_ 1262306a36Sopenharmony_ci#define _MT_8188_AFE_COMMON_H_ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <linux/list.h> 1562306a36Sopenharmony_ci#include <linux/regmap.h> 1662306a36Sopenharmony_ci#include <sound/soc.h> 1762306a36Sopenharmony_ci#include "../common/mtk-base-afe.h" 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cienum { 2062306a36Sopenharmony_ci MT8188_DAI_START, 2162306a36Sopenharmony_ci MT8188_AFE_MEMIF_START = MT8188_DAI_START, 2262306a36Sopenharmony_ci MT8188_AFE_MEMIF_DL2 = MT8188_AFE_MEMIF_START, 2362306a36Sopenharmony_ci MT8188_AFE_MEMIF_DL3, 2462306a36Sopenharmony_ci MT8188_AFE_MEMIF_DL6, 2562306a36Sopenharmony_ci MT8188_AFE_MEMIF_DL7, 2662306a36Sopenharmony_ci MT8188_AFE_MEMIF_DL8, 2762306a36Sopenharmony_ci MT8188_AFE_MEMIF_DL10, 2862306a36Sopenharmony_ci MT8188_AFE_MEMIF_DL11, 2962306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL_START, 3062306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL1 = MT8188_AFE_MEMIF_UL_START, 3162306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL2, 3262306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL3, 3362306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL4, 3462306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL5, 3562306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL6, 3662306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL8, 3762306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL9, 3862306a36Sopenharmony_ci MT8188_AFE_MEMIF_UL10, 3962306a36Sopenharmony_ci MT8188_AFE_MEMIF_END, 4062306a36Sopenharmony_ci MT8188_AFE_MEMIF_NUM = (MT8188_AFE_MEMIF_END - MT8188_AFE_MEMIF_START), 4162306a36Sopenharmony_ci MT8188_AFE_IO_START = MT8188_AFE_MEMIF_END, 4262306a36Sopenharmony_ci MT8188_AFE_IO_DL_SRC = MT8188_AFE_IO_START, 4362306a36Sopenharmony_ci MT8188_AFE_IO_DMIC_IN, 4462306a36Sopenharmony_ci MT8188_AFE_IO_DPTX, 4562306a36Sopenharmony_ci MT8188_AFE_IO_ETDM_START, 4662306a36Sopenharmony_ci MT8188_AFE_IO_ETDM1_IN = MT8188_AFE_IO_ETDM_START, 4762306a36Sopenharmony_ci MT8188_AFE_IO_ETDM2_IN, 4862306a36Sopenharmony_ci MT8188_AFE_IO_ETDM1_OUT, 4962306a36Sopenharmony_ci MT8188_AFE_IO_ETDM2_OUT, 5062306a36Sopenharmony_ci MT8188_AFE_IO_ETDM3_OUT, 5162306a36Sopenharmony_ci MT8188_AFE_IO_ETDM_END, 5262306a36Sopenharmony_ci MT8188_AFE_IO_ETDM_NUM = 5362306a36Sopenharmony_ci (MT8188_AFE_IO_ETDM_END - MT8188_AFE_IO_ETDM_START), 5462306a36Sopenharmony_ci MT8188_AFE_IO_PCM = MT8188_AFE_IO_ETDM_END, 5562306a36Sopenharmony_ci MT8188_AFE_IO_UL_SRC, 5662306a36Sopenharmony_ci MT8188_AFE_IO_END, 5762306a36Sopenharmony_ci MT8188_AFE_IO_NUM = (MT8188_AFE_IO_END - MT8188_AFE_IO_START), 5862306a36Sopenharmony_ci MT8188_DAI_END = MT8188_AFE_IO_END, 5962306a36Sopenharmony_ci MT8188_DAI_NUM = (MT8188_DAI_END - MT8188_DAI_START), 6062306a36Sopenharmony_ci}; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cienum { 6362306a36Sopenharmony_ci MT8188_TOP_CG_A1SYS_TIMING, 6462306a36Sopenharmony_ci MT8188_TOP_CG_A2SYS_TIMING, 6562306a36Sopenharmony_ci MT8188_TOP_CG_26M_TIMING, 6662306a36Sopenharmony_ci MT8188_TOP_CG_NUM, 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cienum { 7062306a36Sopenharmony_ci MT8188_AFE_IRQ_1, 7162306a36Sopenharmony_ci MT8188_AFE_IRQ_2, 7262306a36Sopenharmony_ci MT8188_AFE_IRQ_3, 7362306a36Sopenharmony_ci MT8188_AFE_IRQ_8, 7462306a36Sopenharmony_ci MT8188_AFE_IRQ_9, 7562306a36Sopenharmony_ci MT8188_AFE_IRQ_10, 7662306a36Sopenharmony_ci MT8188_AFE_IRQ_13, 7762306a36Sopenharmony_ci MT8188_AFE_IRQ_14, 7862306a36Sopenharmony_ci MT8188_AFE_IRQ_15, 7962306a36Sopenharmony_ci MT8188_AFE_IRQ_16, 8062306a36Sopenharmony_ci MT8188_AFE_IRQ_17, 8162306a36Sopenharmony_ci MT8188_AFE_IRQ_18, 8262306a36Sopenharmony_ci MT8188_AFE_IRQ_19, 8362306a36Sopenharmony_ci MT8188_AFE_IRQ_20, 8462306a36Sopenharmony_ci MT8188_AFE_IRQ_21, 8562306a36Sopenharmony_ci MT8188_AFE_IRQ_22, 8662306a36Sopenharmony_ci MT8188_AFE_IRQ_23, 8762306a36Sopenharmony_ci MT8188_AFE_IRQ_24, 8862306a36Sopenharmony_ci MT8188_AFE_IRQ_25, 8962306a36Sopenharmony_ci MT8188_AFE_IRQ_26, 9062306a36Sopenharmony_ci MT8188_AFE_IRQ_27, 9162306a36Sopenharmony_ci MT8188_AFE_IRQ_28, 9262306a36Sopenharmony_ci MT8188_AFE_IRQ_NUM, 9362306a36Sopenharmony_ci}; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_cienum { 9662306a36Sopenharmony_ci MT8188_ETDM_OUT1_1X_EN = 9, 9762306a36Sopenharmony_ci MT8188_ETDM_OUT2_1X_EN = 10, 9862306a36Sopenharmony_ci MT8188_ETDM_OUT3_1X_EN = 11, 9962306a36Sopenharmony_ci MT8188_ETDM_IN1_1X_EN = 12, 10062306a36Sopenharmony_ci MT8188_ETDM_IN2_1X_EN = 13, 10162306a36Sopenharmony_ci MT8188_ETDM_IN1_NX_EN = 25, 10262306a36Sopenharmony_ci MT8188_ETDM_IN2_NX_EN = 26, 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cienum { 10662306a36Sopenharmony_ci MT8188_MTKAIF_MISO_0, 10762306a36Sopenharmony_ci MT8188_MTKAIF_MISO_1, 10862306a36Sopenharmony_ci MT8188_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[MT8188_MTKAIF_MISO_NUM]; 11862306a36Sopenharmony_ci int mtkaif_phase_cycle[MT8188_MTKAIF_MISO_NUM]; 11962306a36Sopenharmony_ci int mtkaif_dmic_on; 12062306a36Sopenharmony_ci}; 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_cistruct clk; 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_cistruct mt8188_afe_private { 12562306a36Sopenharmony_ci struct clk **clk; 12662306a36Sopenharmony_ci struct clk_lookup **lookup; 12762306a36Sopenharmony_ci struct regmap *topckgen; 12862306a36Sopenharmony_ci int pm_runtime_bypass_reg_ctl; 12962306a36Sopenharmony_ci spinlock_t afe_ctrl_lock; /* Lock for afe control */ 13062306a36Sopenharmony_ci struct mtk_dai_memif_irq_priv irq_priv[MT8188_AFE_IRQ_NUM]; 13162306a36Sopenharmony_ci struct mtkaif_param mtkaif_params; 13262306a36Sopenharmony_ci 13362306a36Sopenharmony_ci /* dai */ 13462306a36Sopenharmony_ci void *dai_priv[MT8188_DAI_NUM]; 13562306a36Sopenharmony_ci}; 13662306a36Sopenharmony_ci 13762306a36Sopenharmony_ciint mt8188_afe_fs_timing(unsigned int rate); 13862306a36Sopenharmony_ci/* dai register */ 13962306a36Sopenharmony_ciint mt8188_dai_adda_register(struct mtk_base_afe *afe); 14062306a36Sopenharmony_ciint mt8188_dai_etdm_register(struct mtk_base_afe *afe); 14162306a36Sopenharmony_ciint mt8188_dai_pcm_register(struct mtk_base_afe *afe); 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci#define MT8188_SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put, id) \ 14462306a36Sopenharmony_ci{ \ 14562306a36Sopenharmony_ci .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ 14662306a36Sopenharmony_ci .info = snd_soc_info_enum_double, \ 14762306a36Sopenharmony_ci .get = xhandler_get, .put = xhandler_put, \ 14862306a36Sopenharmony_ci .device = id, \ 14962306a36Sopenharmony_ci .private_value = (unsigned long)&(xenum), \ 15062306a36Sopenharmony_ci} 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci#endif 153