1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 /* 1 /* 3 * mtk-base-afe.h -- Mediatek base afe struc 2 * mtk-base-afe.h -- Mediatek base afe structure 4 * 3 * 5 * Copyright (c) 2016 MediaTek Inc. 4 * Copyright (c) 2016 MediaTek Inc. 6 * Author: Garlic Tseng <garlic.tseng@mediatek 5 * Author: Garlic Tseng <garlic.tseng@mediatek.com> >> 6 * >> 7 * This program is free software; you can redistribute it and/or modify >> 8 * it under the terms of the GNU General Public License version 2 and >> 9 * only version 2 as published by the Free Software Foundation. >> 10 * >> 11 * This program is distributed in the hope that it will be useful, >> 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of >> 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> 14 * GNU General Public License for more details. 7 */ 15 */ 8 16 9 #ifndef _MTK_BASE_AFE_H_ 17 #ifndef _MTK_BASE_AFE_H_ 10 #define _MTK_BASE_AFE_H_ 18 #define _MTK_BASE_AFE_H_ 11 19 12 #include <linux/soc/mediatek/mtk_sip_svc.h> << 13 << 14 #define MTK_STREAM_NUM (SNDRV_PCM_STREAM_LAST << 15 #define MTK_SIP_AUDIO_CONTROL MTK_SIP_SMC_CMD( << 16 << 17 /* SMC CALL Operations */ << 18 enum mtk_audio_smc_call_op { << 19 MTK_AUDIO_SMC_OP_INIT = 0, << 20 MTK_AUDIO_SMC_OP_DRAM_REQUEST, << 21 MTK_AUDIO_SMC_OP_DRAM_RELEASE, << 22 MTK_AUDIO_SMC_OP_SRAM_REQUEST, << 23 MTK_AUDIO_SMC_OP_SRAM_RELEASE, << 24 MTK_AUDIO_SMC_OP_ADSP_REQUEST, << 25 MTK_AUDIO_SMC_OP_ADSP_RELEASE, << 26 MTK_AUDIO_SMC_OP_DOMAIN_SIDEBANDS, << 27 MTK_AUDIO_SMC_OP_BTCVSD_WRITE, << 28 MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_CL << 29 MTK_AUDIO_SMC_OP_BTCVSD_UPDATE_CTRL_UN << 30 MTK_AUDIO_SMC_OP_NUM << 31 }; << 32 << 33 struct mtk_base_memif_data { 20 struct mtk_base_memif_data { 34 int id; 21 int id; 35 const char *name; 22 const char *name; 36 int reg_ofs_base; 23 int reg_ofs_base; 37 int reg_ofs_cur; 24 int reg_ofs_cur; 38 int reg_ofs_end; << 39 int reg_ofs_base_msb; << 40 int reg_ofs_cur_msb; << 41 int reg_ofs_end_msb; << 42 int fs_reg; 25 int fs_reg; 43 int fs_shift; 26 int fs_shift; 44 int fs_maskbit; 27 int fs_maskbit; 45 int mono_reg; 28 int mono_reg; 46 int mono_shift; 29 int mono_shift; 47 int mono_invert; << 48 int quad_ch_reg; << 49 int quad_ch_mask; << 50 int quad_ch_shift; << 51 int int_odd_flag_reg; << 52 int int_odd_flag_shift; << 53 int enable_reg; 30 int enable_reg; 54 int enable_shift; 31 int enable_shift; 55 int hd_reg; 32 int hd_reg; 56 int hd_shift; 33 int hd_shift; 57 int hd_align_reg; << 58 int hd_align_mshift; << 59 int msb_reg; 34 int msb_reg; 60 int msb_shift; 35 int msb_shift; 61 int msb_end_reg; << 62 int msb_end_shift; << 63 int agent_disable_reg; 36 int agent_disable_reg; 64 int agent_disable_shift; 37 int agent_disable_shift; 65 int ch_num_reg; << 66 int ch_num_shift; << 67 int ch_num_maskbit; << 68 /* playback memif only */ << 69 int pbuf_reg; << 70 int pbuf_mask; << 71 int pbuf_shift; << 72 int minlen_reg; << 73 int minlen_mask; << 74 int minlen_shift; << 75 }; 38 }; 76 39 77 struct mtk_base_irq_data { 40 struct mtk_base_irq_data { 78 int id; 41 int id; 79 int irq_cnt_reg; 42 int irq_cnt_reg; 80 int irq_cnt_shift; 43 int irq_cnt_shift; 81 int irq_cnt_maskbit; 44 int irq_cnt_maskbit; 82 int irq_fs_reg; 45 int irq_fs_reg; 83 int irq_fs_shift; 46 int irq_fs_shift; 84 int irq_fs_maskbit; 47 int irq_fs_maskbit; 85 int irq_en_reg; 48 int irq_en_reg; 86 int irq_en_shift; 49 int irq_en_shift; 87 int irq_clr_reg; 50 int irq_clr_reg; 88 int irq_clr_shift; 51 int irq_clr_shift; 89 int irq_status_shift; << 90 }; 52 }; 91 53 92 struct device; 54 struct device; 93 struct list_head; << 94 struct mtk_base_afe_memif; 55 struct mtk_base_afe_memif; 95 struct mtk_base_afe_irq; 56 struct mtk_base_afe_irq; 96 struct mtk_base_afe_dai; << 97 struct regmap; 57 struct regmap; 98 struct snd_pcm_substream; 58 struct snd_pcm_substream; 99 struct snd_soc_dai; 59 struct snd_soc_dai; 100 60 101 struct mtk_base_afe { 61 struct mtk_base_afe { 102 void __iomem *base_addr; 62 void __iomem *base_addr; 103 struct device *dev; 63 struct device *dev; 104 struct regmap *regmap; 64 struct regmap *regmap; 105 struct mutex irq_alloc_lock; /* dynami 65 struct mutex irq_alloc_lock; /* dynamic alloc irq lock */ 106 66 107 unsigned int const *reg_back_up_list; 67 unsigned int const *reg_back_up_list; 108 unsigned int *reg_back_up; 68 unsigned int *reg_back_up; 109 unsigned int reg_back_up_list_num; 69 unsigned int reg_back_up_list_num; 110 70 111 int (*runtime_suspend)(struct device * 71 int (*runtime_suspend)(struct device *dev); 112 int (*runtime_resume)(struct device *d 72 int (*runtime_resume)(struct device *dev); 113 bool suspended; 73 bool suspended; 114 74 115 struct mtk_base_afe_memif *memif; 75 struct mtk_base_afe_memif *memif; 116 int memif_size; 76 int memif_size; 117 struct mtk_base_afe_irq *irqs; 77 struct mtk_base_afe_irq *irqs; 118 int irqs_size; 78 int irqs_size; 119 int memif_32bit_supported; << 120 << 121 struct list_head sub_dais; << 122 struct snd_soc_dai_driver *dai_drivers << 123 unsigned int num_dai_drivers; << 124 79 125 const struct snd_pcm_hardware *mtk_afe 80 const struct snd_pcm_hardware *mtk_afe_hardware; 126 int (*memif_fs)(struct snd_pcm_substre 81 int (*memif_fs)(struct snd_pcm_substream *substream, 127 unsigned int rate); 82 unsigned int rate); 128 int (*irq_fs)(struct snd_pcm_substream 83 int (*irq_fs)(struct snd_pcm_substream *substream, 129 unsigned int rate); 84 unsigned int rate); 130 int (*get_dai_fs)(struct mtk_base_afe << 131 int dai_id, unsigned << 132 int (*get_memif_pbuf_size)(struct snd_ << 133 << 134 int (*request_dram_resource)(struct de << 135 int (*release_dram_resource)(struct de << 136 85 137 void *platform_priv; 86 void *platform_priv; 138 }; 87 }; 139 88 140 struct mtk_base_afe_memif { 89 struct mtk_base_afe_memif { 141 unsigned int phys_buf_addr; 90 unsigned int phys_buf_addr; 142 int buffer_size; 91 int buffer_size; 143 struct snd_pcm_substream *substream; 92 struct snd_pcm_substream *substream; 144 const struct mtk_base_memif_data *data 93 const struct mtk_base_memif_data *data; 145 int irq_usage; 94 int irq_usage; 146 int const_irq; 95 int const_irq; 147 unsigned char *dma_area; << 148 dma_addr_t dma_addr; << 149 size_t dma_bytes; << 150 }; 96 }; 151 97 152 struct mtk_base_afe_irq { 98 struct mtk_base_afe_irq { 153 const struct mtk_base_irq_data *irq_da 99 const struct mtk_base_irq_data *irq_data; 154 int irq_occupyed; 100 int irq_occupyed; 155 }; << 156 << 157 struct mtk_base_afe_dai { << 158 struct snd_soc_dai_driver *dai_drivers << 159 unsigned int num_dai_drivers; << 160 << 161 const struct snd_kcontrol_new *control << 162 unsigned int num_controls; << 163 const struct snd_soc_dapm_widget *dapm << 164 unsigned int num_dapm_widgets; << 165 const struct snd_soc_dapm_route *dapm_ << 166 unsigned int num_dapm_routes; << 167 << 168 struct list_head list; << 169 }; 101 }; 170 102 171 #endif 103 #endif 172 104 173 105
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.