mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
3.8 KiB
158 lines
3.8 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
/* |
|
* mt8195-afe-common.h -- Mediatek 8195 audio driver definitions |
|
* |
|
* Copyright (c) 2021 MediaTek Inc. |
|
* Author: Bicycle Tsai <[email protected]> |
|
* Trevor Wu <[email protected]> |
|
*/ |
|
|
|
#ifndef _MT_8195_AFE_COMMON_H_ |
|
#define _MT_8195_AFE_COMMON_H_ |
|
|
|
#include <sound/soc.h> |
|
#include <linux/list.h> |
|
#include <linux/regmap.h> |
|
#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
|
|
|