Path: blob/master/sound/soc/mediatek/mt8195/mt8195-afe-common.h
26488 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* mt8195-afe-common.h -- Mediatek 8195 audio driver definitions3*4* Copyright (c) 2021 MediaTek Inc.5* Author: Bicycle Tsai <[email protected]>6* Trevor Wu <[email protected]>7*/89#ifndef _MT_8195_AFE_COMMON_H_10#define _MT_8195_AFE_COMMON_H_1112#include <sound/soc.h>13#include <linux/list.h>14#include <linux/regmap.h>15#include "../common/mtk-base-afe.h"1617enum {18MT8195_DAI_START,19MT8195_AFE_MEMIF_START = MT8195_DAI_START,20MT8195_AFE_MEMIF_DL2 = MT8195_AFE_MEMIF_START,21MT8195_AFE_MEMIF_DL3,22MT8195_AFE_MEMIF_DL6,23MT8195_AFE_MEMIF_DL7,24MT8195_AFE_MEMIF_DL8,25MT8195_AFE_MEMIF_DL10,26MT8195_AFE_MEMIF_DL11,27MT8195_AFE_MEMIF_UL_START,28MT8195_AFE_MEMIF_UL1 = MT8195_AFE_MEMIF_UL_START,29MT8195_AFE_MEMIF_UL2,30MT8195_AFE_MEMIF_UL3,31MT8195_AFE_MEMIF_UL4,32MT8195_AFE_MEMIF_UL5,33MT8195_AFE_MEMIF_UL6,34MT8195_AFE_MEMIF_UL8,35MT8195_AFE_MEMIF_UL9,36MT8195_AFE_MEMIF_UL10,37MT8195_AFE_MEMIF_END,38MT8195_AFE_MEMIF_NUM = (MT8195_AFE_MEMIF_END - MT8195_AFE_MEMIF_START),39MT8195_AFE_IO_START = MT8195_AFE_MEMIF_END,40MT8195_AFE_IO_DL_SRC = MT8195_AFE_IO_START,41MT8195_AFE_IO_DPTX,42MT8195_AFE_IO_ETDM_START,43MT8195_AFE_IO_ETDM1_IN = MT8195_AFE_IO_ETDM_START,44MT8195_AFE_IO_ETDM2_IN,45MT8195_AFE_IO_ETDM1_OUT,46MT8195_AFE_IO_ETDM2_OUT,47MT8195_AFE_IO_ETDM3_OUT,48MT8195_AFE_IO_ETDM_END,49MT8195_AFE_IO_ETDM_NUM =50(MT8195_AFE_IO_ETDM_END - MT8195_AFE_IO_ETDM_START),51MT8195_AFE_IO_PCM = MT8195_AFE_IO_ETDM_END,52MT8195_AFE_IO_UL_SRC1,53MT8195_AFE_IO_UL_SRC2,54MT8195_AFE_IO_END,55MT8195_AFE_IO_NUM = (MT8195_AFE_IO_END - MT8195_AFE_IO_START),56MT8195_DAI_END = MT8195_AFE_IO_END,57MT8195_DAI_NUM = (MT8195_DAI_END - MT8195_DAI_START),58};5960enum {61MT8195_TOP_CG_A1SYS_TIMING,62MT8195_TOP_CG_A2SYS_TIMING,63MT8195_TOP_CG_26M_TIMING,64MT8195_TOP_CG_NUM,65};6667enum {68MT8195_AFE_IRQ_1,69MT8195_AFE_IRQ_2,70MT8195_AFE_IRQ_3,71MT8195_AFE_IRQ_8,72MT8195_AFE_IRQ_9,73MT8195_AFE_IRQ_10,74MT8195_AFE_IRQ_13,75MT8195_AFE_IRQ_14,76MT8195_AFE_IRQ_15,77MT8195_AFE_IRQ_16,78MT8195_AFE_IRQ_17,79MT8195_AFE_IRQ_18,80MT8195_AFE_IRQ_19,81MT8195_AFE_IRQ_20,82MT8195_AFE_IRQ_21,83MT8195_AFE_IRQ_22,84MT8195_AFE_IRQ_23,85MT8195_AFE_IRQ_24,86MT8195_AFE_IRQ_25,87MT8195_AFE_IRQ_26,88MT8195_AFE_IRQ_27,89MT8195_AFE_IRQ_28,90MT8195_AFE_IRQ_NUM,91};9293enum {94MT8195_ETDM_OUT1_1X_EN = 9,95MT8195_ETDM_OUT2_1X_EN = 10,96MT8195_ETDM_OUT3_1X_EN = 11,97MT8195_ETDM_IN1_1X_EN = 12,98MT8195_ETDM_IN2_1X_EN = 13,99MT8195_ETDM_IN1_NX_EN = 25,100MT8195_ETDM_IN2_NX_EN = 26,101};102103enum {104MT8195_MTKAIF_MISO_0,105MT8195_MTKAIF_MISO_1,106MT8195_MTKAIF_MISO_2,107MT8195_MTKAIF_MISO_NUM,108};109110struct mtk_dai_memif_irq_priv {111unsigned int asys_timing_sel;112};113114struct mtkaif_param {115bool mtkaif_calibration_ok;116int mtkaif_chosen_phase[MT8195_MTKAIF_MISO_NUM];117int mtkaif_phase_cycle[MT8195_MTKAIF_MISO_NUM];118int mtkaif_dmic_on;119int mtkaif_adda6_only;120};121122struct clk;123124struct mt8195_afe_private {125struct clk **clk;126struct clk_lookup **lookup;127struct regmap *topckgen;128int pm_runtime_bypass_reg_ctl;129#ifdef CONFIG_DEBUG_FS130struct dentry **debugfs_dentry;131#endif132int afe_on_ref_cnt;133int top_cg_ref_cnt[MT8195_TOP_CG_NUM];134spinlock_t afe_ctrl_lock; /* Lock for afe control */135struct mtk_dai_memif_irq_priv irq_priv[MT8195_AFE_IRQ_NUM];136struct mtkaif_param mtkaif_params;137138/* dai */139void *dai_priv[MT8195_DAI_NUM];140};141142int mt8195_afe_fs_timing(unsigned int rate);143/* dai register */144int mt8195_dai_adda_register(struct mtk_base_afe *afe);145int mt8195_dai_etdm_register(struct mtk_base_afe *afe);146int mt8195_dai_pcm_register(struct mtk_base_afe *afe);147148#define MT8195_SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put, id) \149{ \150.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \151.info = snd_soc_info_enum_double, \152.get = xhandler_get, .put = xhandler_put, \153.device = id, \154.private_value = (unsigned long)&xenum, \155}156157#endif158159160