Path: blob/master/sound/soc/mediatek/mt8192/mt8192-afe-clk.h
26488 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* mt8192-afe-clk.h -- Mediatek 8192 afe clock ctrl definition3*4* Copyright (c) 2020 MediaTek Inc.5* Author: Shane Chien <[email protected]>6*/78#ifndef _MT8192_AFE_CLOCK_CTRL_H_9#define _MT8192_AFE_CLOCK_CTRL_H_1011#define AP_PLL_CON3 0x001412#define APLL1_CON0 0x031813#define APLL1_CON1 0x031c14#define APLL1_CON2 0x032015#define APLL1_CON4 0x032816#define APLL1_TUNER_CON0 0x00401718#define APLL2_CON0 0x032c19#define APLL2_CON1 0x033020#define APLL2_CON2 0x033421#define APLL2_CON4 0x033c22#define APLL2_TUNER_CON0 0x00442324#define CLK_CFG_7 0x008025#define CLK_CFG_8 0x009026#define CLK_CFG_11 0x00c027#define CLK_CFG_12 0x00d028#define CLK_CFG_13 0x00e029#define CLK_CFG_15 0x01003031#define CLK_AUDDIV_0 0x032032#define CLK_AUDDIV_2 0x032833#define CLK_AUDDIV_3 0x033434#define CLK_AUDDIV_4 0x033835#define CKSYS_AUD_TOP_CFG 0x032c36#define CKSYS_AUD_TOP_MON 0x03303738#define PERI_BUS_DCM_CTRL 0x007439#define MODULE_SW_CG_1_STA 0x009440#define MODULE_SW_CG_2_STA 0x00ac4142/* CLK_AUDDIV_0 */43#define APLL12_DIV0_PDN_SFT 044#define APLL12_DIV0_PDN_MASK 0x145#define APLL12_DIV0_PDN_MASK_SFT (0x1 << 0)46#define APLL12_DIV1_PDN_SFT 147#define APLL12_DIV1_PDN_MASK 0x148#define APLL12_DIV1_PDN_MASK_SFT (0x1 << 1)49#define APLL12_DIV2_PDN_SFT 250#define APLL12_DIV2_PDN_MASK 0x151#define APLL12_DIV2_PDN_MASK_SFT (0x1 << 2)52#define APLL12_DIV3_PDN_SFT 353#define APLL12_DIV3_PDN_MASK 0x154#define APLL12_DIV3_PDN_MASK_SFT (0x1 << 3)55#define APLL12_DIV4_PDN_SFT 456#define APLL12_DIV4_PDN_MASK 0x157#define APLL12_DIV4_PDN_MASK_SFT (0x1 << 4)58#define APLL12_DIVB_PDN_SFT 559#define APLL12_DIVB_PDN_MASK 0x160#define APLL12_DIVB_PDN_MASK_SFT (0x1 << 5)61#define APLL12_DIV5_PDN_SFT 662#define APLL12_DIV5_PDN_MASK 0x163#define APLL12_DIV5_PDN_MASK_SFT (0x1 << 6)64#define APLL12_DIV6_PDN_SFT 765#define APLL12_DIV6_PDN_MASK 0x166#define APLL12_DIV6_PDN_MASK_SFT (0x1 << 7)67#define APLL12_DIV7_PDN_SFT 868#define APLL12_DIV7_PDN_MASK 0x169#define APLL12_DIV7_PDN_MASK_SFT (0x1 << 8)70#define APLL12_DIV8_PDN_SFT 971#define APLL12_DIV8_PDN_MASK 0x172#define APLL12_DIV8_PDN_MASK_SFT (0x1 << 9)73#define APLL12_DIV9_PDN_SFT 1074#define APLL12_DIV9_PDN_MASK 0x175#define APLL12_DIV9_PDN_MASK_SFT (0x1 << 10)76#define APLL_I2S0_MCK_SEL_SFT 1677#define APLL_I2S0_MCK_SEL_MASK 0x178#define APLL_I2S0_MCK_SEL_MASK_SFT (0x1 << 16)79#define APLL_I2S1_MCK_SEL_SFT 1780#define APLL_I2S1_MCK_SEL_MASK 0x181#define APLL_I2S1_MCK_SEL_MASK_SFT (0x1 << 17)82#define APLL_I2S2_MCK_SEL_SFT 1883#define APLL_I2S2_MCK_SEL_MASK 0x184#define APLL_I2S2_MCK_SEL_MASK_SFT (0x1 << 18)85#define APLL_I2S3_MCK_SEL_SFT 1986#define APLL_I2S3_MCK_SEL_MASK 0x187#define APLL_I2S3_MCK_SEL_MASK_SFT (0x1 << 19)88#define APLL_I2S4_MCK_SEL_SFT 2089#define APLL_I2S4_MCK_SEL_MASK 0x190#define APLL_I2S4_MCK_SEL_MASK_SFT (0x1 << 20)91#define APLL_I2S5_MCK_SEL_SFT 2192#define APLL_I2S5_MCK_SEL_MASK 0x193#define APLL_I2S5_MCK_SEL_MASK_SFT (0x1 << 21)94#define APLL_I2S6_MCK_SEL_SFT 2295#define APLL_I2S6_MCK_SEL_MASK 0x196#define APLL_I2S6_MCK_SEL_MASK_SFT (0x1 << 22)97#define APLL_I2S7_MCK_SEL_SFT 2398#define APLL_I2S7_MCK_SEL_MASK 0x199#define APLL_I2S7_MCK_SEL_MASK_SFT (0x1 << 23)100#define APLL_I2S8_MCK_SEL_SFT 24101#define APLL_I2S8_MCK_SEL_MASK 0x1102#define APLL_I2S8_MCK_SEL_MASK_SFT (0x1 << 24)103#define APLL_I2S9_MCK_SEL_SFT 25104#define APLL_I2S9_MCK_SEL_MASK 0x1105#define APLL_I2S9_MCK_SEL_MASK_SFT (0x1 << 25)106107/* CLK_AUDDIV_2 */108#define APLL12_CK_DIV0_SFT 0109#define APLL12_CK_DIV0_MASK 0xff110#define APLL12_CK_DIV0_MASK_SFT (0xff << 0)111#define APLL12_CK_DIV1_SFT 8112#define APLL12_CK_DIV1_MASK 0xff113#define APLL12_CK_DIV1_MASK_SFT (0xff << 8)114#define APLL12_CK_DIV2_SFT 16115#define APLL12_CK_DIV2_MASK 0xff116#define APLL12_CK_DIV2_MASK_SFT (0xff << 16)117#define APLL12_CK_DIV3_SFT 24118#define APLL12_CK_DIV3_MASK 0xff119#define APLL12_CK_DIV3_MASK_SFT (0xff << 24)120121/* CLK_AUDDIV_3 */122#define APLL12_CK_DIV4_SFT 0123#define APLL12_CK_DIV4_MASK 0xff124#define APLL12_CK_DIV4_MASK_SFT (0xff << 0)125#define APLL12_CK_DIVB_SFT 8126#define APLL12_CK_DIVB_MASK 0xff127#define APLL12_CK_DIVB_MASK_SFT (0xff << 8)128#define APLL12_CK_DIV5_SFT 16129#define APLL12_CK_DIV5_MASK 0xff130#define APLL12_CK_DIV5_MASK_SFT (0xff << 16)131#define APLL12_CK_DIV6_SFT 24132#define APLL12_CK_DIV6_MASK 0xff133#define APLL12_CK_DIV6_MASK_SFT (0xff << 24)134135/* CLK_AUDDIV_4 */136#define APLL12_CK_DIV7_SFT 0137#define APLL12_CK_DIV7_MASK 0xff138#define APLL12_CK_DIV7_MASK_SFT (0xff << 0)139#define APLL12_CK_DIV8_SFT 8140#define APLL12_CK_DIV8_MASK 0xff141#define APLL12_CK_DIV8_MASK_SFT (0xff << 0)142#define APLL12_CK_DIV9_SFT 16143#define APLL12_CK_DIV9_MASK 0xff144#define APLL12_CK_DIV9_MASK_SFT (0xff << 0)145146/* AUD_TOP_CFG */147#define AUD_TOP_CFG_SFT 0148#define AUD_TOP_CFG_MASK 0xffffffff149#define AUD_TOP_CFG_MASK_SFT (0xffffffff << 0)150151/* AUD_TOP_MON */152#define AUD_TOP_MON_SFT 0153#define AUD_TOP_MON_MASK 0xffffffff154#define AUD_TOP_MON_MASK_SFT (0xffffffff << 0)155156/* CLK_AUDDIV_3 */157#define APLL12_CK_DIV5_MSB_SFT 0158#define APLL12_CK_DIV5_MSB_MASK 0xf159#define APLL12_CK_DIV5_MSB_MASK_SFT (0xf << 0)160#define RESERVED0_SFT 4161#define RESERVED0_MASK 0xfffffff162#define RESERVED0_MASK_SFT (0xfffffff << 4)163164/* APLL */165#define APLL1_W_NAME "APLL1"166#define APLL2_W_NAME "APLL2"167enum {168MT8192_APLL1 = 0,169MT8192_APLL2,170};171172enum {173CLK_AFE = 0,174CLK_TML,175CLK_APLL22M,176CLK_APLL24M,177CLK_APLL1_TUNER,178CLK_APLL2_TUNER,179CLK_NLE,180CLK_INFRA_SYS_AUDIO,181CLK_INFRA_AUDIO_26M,182CLK_MUX_AUDIO,183CLK_MUX_AUDIOINTBUS,184CLK_TOP_MAINPLL_D4_D4,185/* apll related mux */186CLK_TOP_MUX_AUD_1,187CLK_TOP_APLL1_CK,188CLK_TOP_MUX_AUD_2,189CLK_TOP_APLL2_CK,190CLK_TOP_MUX_AUD_ENG1,191CLK_TOP_APLL1_D4,192CLK_TOP_MUX_AUD_ENG2,193CLK_TOP_APLL2_D4,194CLK_TOP_MUX_AUDIO_H,195CLK_TOP_I2S0_M_SEL,196CLK_TOP_I2S1_M_SEL,197CLK_TOP_I2S2_M_SEL,198CLK_TOP_I2S3_M_SEL,199CLK_TOP_I2S4_M_SEL,200CLK_TOP_I2S5_M_SEL,201CLK_TOP_I2S6_M_SEL,202CLK_TOP_I2S7_M_SEL,203CLK_TOP_I2S8_M_SEL,204CLK_TOP_I2S9_M_SEL,205CLK_TOP_APLL12_DIV0,206CLK_TOP_APLL12_DIV1,207CLK_TOP_APLL12_DIV2,208CLK_TOP_APLL12_DIV3,209CLK_TOP_APLL12_DIV4,210CLK_TOP_APLL12_DIVB,211CLK_TOP_APLL12_DIV5,212CLK_TOP_APLL12_DIV6,213CLK_TOP_APLL12_DIV7,214CLK_TOP_APLL12_DIV8,215CLK_TOP_APLL12_DIV9,216CLK_CLK26M,217CLK_NUM218};219220struct mtk_base_afe;221222int mt8192_init_clock(struct mtk_base_afe *afe);223int mt8192_afe_enable_clock(struct mtk_base_afe *afe);224void mt8192_afe_disable_clock(struct mtk_base_afe *afe);225226int mt8192_apll1_enable(struct mtk_base_afe *afe);227void mt8192_apll1_disable(struct mtk_base_afe *afe);228229int mt8192_apll2_enable(struct mtk_base_afe *afe);230void mt8192_apll2_disable(struct mtk_base_afe *afe);231232int mt8192_get_apll_rate(struct mtk_base_afe *afe, int apll);233int mt8192_get_apll_by_rate(struct mtk_base_afe *afe, int rate);234int mt8192_get_apll_by_name(struct mtk_base_afe *afe, const char *name);235236/* these will be replaced by using CCF */237int mt8192_mck_enable(struct mtk_base_afe *afe, int mck_id, int rate);238void mt8192_mck_disable(struct mtk_base_afe *afe, int mck_id);239240int mt8192_set_audio_int_bus_parent(struct mtk_base_afe *afe,241int clk_id);242243#endif244245246