1*63a51128SShuming Fan /* SPDX-License-Identifier: GPL-2.0-only */ 2*63a51128SShuming Fan /* 3*63a51128SShuming Fan * rt712-sdca-dmic.h -- RT712 SDCA DMIC ALSA SoC audio driver header 4*63a51128SShuming Fan * 5*63a51128SShuming Fan * Copyright(c) 2023 Realtek Semiconductor Corp. 6*63a51128SShuming Fan */ 7*63a51128SShuming Fan 8*63a51128SShuming Fan #ifndef __RT712_SDW_DMIC_H__ 9*63a51128SShuming Fan #define __RT712_SDW_DMIC_H__ 10*63a51128SShuming Fan 11*63a51128SShuming Fan #include <linux/regmap.h> 12*63a51128SShuming Fan #include <linux/soundwire/sdw_registers.h> 13*63a51128SShuming Fan 14*63a51128SShuming Fan struct rt712_sdca_dmic_priv { 15*63a51128SShuming Fan struct regmap *regmap; 16*63a51128SShuming Fan struct regmap *mbq_regmap; 17*63a51128SShuming Fan struct snd_soc_component *component; 18*63a51128SShuming Fan struct sdw_slave *slave; 19*63a51128SShuming Fan struct sdw_bus_params params; 20*63a51128SShuming Fan bool hw_init; 21*63a51128SShuming Fan bool first_hw_init; 22*63a51128SShuming Fan bool fu1e_dapm_mute; 23*63a51128SShuming Fan bool fu1e_mixer_mute[4]; 24*63a51128SShuming Fan }; 25*63a51128SShuming Fan 26*63a51128SShuming Fan struct rt712_sdca_dmic_kctrl_priv { 27*63a51128SShuming Fan unsigned int reg_base; 28*63a51128SShuming Fan unsigned int count; 29*63a51128SShuming Fan unsigned int max; 30*63a51128SShuming Fan unsigned int invert; 31*63a51128SShuming Fan }; 32*63a51128SShuming Fan 33*63a51128SShuming Fan /* SDCA (Channel) */ 34*63a51128SShuming Fan #define CH_01 0x01 35*63a51128SShuming Fan #define CH_02 0x02 36*63a51128SShuming Fan #define CH_03 0x03 37*63a51128SShuming Fan #define CH_04 0x04 38*63a51128SShuming Fan 39*63a51128SShuming Fan static const struct reg_default rt712_sdca_dmic_reg_defaults[] = { 40*63a51128SShuming Fan { 0x201a, 0x00 }, 41*63a51128SShuming Fan { 0x201b, 0x00 }, 42*63a51128SShuming Fan { 0x201c, 0x00 }, 43*63a51128SShuming Fan { 0x201d, 0x00 }, 44*63a51128SShuming Fan { 0x201e, 0x00 }, 45*63a51128SShuming Fan { 0x201f, 0x00 }, 46*63a51128SShuming Fan { 0x2029, 0x00 }, 47*63a51128SShuming Fan { 0x202a, 0x00 }, 48*63a51128SShuming Fan { 0x202d, 0x00 }, 49*63a51128SShuming Fan { 0x202e, 0x00 }, 50*63a51128SShuming Fan { 0x202f, 0x00 }, 51*63a51128SShuming Fan { 0x2030, 0x00 }, 52*63a51128SShuming Fan { 0x2031, 0x00 }, 53*63a51128SShuming Fan { 0x2032, 0x00 }, 54*63a51128SShuming Fan { 0x2033, 0x00 }, 55*63a51128SShuming Fan { 0x2034, 0x00 }, 56*63a51128SShuming Fan { 0x2230, 0x00 }, 57*63a51128SShuming Fan { 0x2231, 0x2f }, 58*63a51128SShuming Fan { 0x2232, 0x80 }, 59*63a51128SShuming Fan { 0x2f01, 0x00 }, 60*63a51128SShuming Fan { 0x2f02, 0x09 }, 61*63a51128SShuming Fan { 0x2f03, 0x00 }, 62*63a51128SShuming Fan { 0x2f04, 0x00 }, 63*63a51128SShuming Fan { 0x2f05, 0x0b }, 64*63a51128SShuming Fan { 0x2f06, 0x01 }, 65*63a51128SShuming Fan { 0x2f08, 0x00 }, 66*63a51128SShuming Fan { 0x2f09, 0x00 }, 67*63a51128SShuming Fan { 0x2f0a, 0x01 }, 68*63a51128SShuming Fan { 0x2f35, 0x02 }, 69*63a51128SShuming Fan { 0x2f36, 0xcf }, 70*63a51128SShuming Fan { 0x2f52, 0x08 }, 71*63a51128SShuming Fan { 0x2f58, 0x07 }, 72*63a51128SShuming Fan { 0x2f59, 0x07 }, 73*63a51128SShuming Fan { 0x3201, 0x01 }, 74*63a51128SShuming Fan { 0x320c, 0x00 }, 75*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_IT26, RT712_SDCA_CTL_VENDOR_DEF, 0), 0x00 }, 76*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_MUTE, CH_01), 0x01 }, 77*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_MUTE, CH_02), 0x01 }, 78*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_MUTE, CH_03), 0x01 }, 79*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_MUTE, CH_04), 0x01 }, 80*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_CS1F, RT712_SDCA_CTL_SAMPLE_FREQ_INDEX, 0), 0x09 }, 81*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_CS1C, RT712_SDCA_CTL_SAMPLE_FREQ_INDEX, 0), 0x09 }, 82*63a51128SShuming Fan }; 83*63a51128SShuming Fan 84*63a51128SShuming Fan static const struct reg_default rt712_sdca_dmic_mbq_defaults[] = { 85*63a51128SShuming Fan { 0x0590001e, 0x0020 }, 86*63a51128SShuming Fan { 0x06100000, 0x0010 }, 87*63a51128SShuming Fan { 0x06100006, 0x0055 }, 88*63a51128SShuming Fan { 0x06100010, 0x2630 }, 89*63a51128SShuming Fan { 0x06100011, 0x152f }, 90*63a51128SShuming Fan { 0x06100013, 0x0102 }, 91*63a51128SShuming Fan { 0x06100015, 0x2219 }, 92*63a51128SShuming Fan { 0x06100018, 0x0102 }, 93*63a51128SShuming Fan { 0x06100026, 0x2c29 }, 94*63a51128SShuming Fan { 0x06100027, 0x2d2b }, 95*63a51128SShuming Fan { 0x0610002b, 0x2a32 }, 96*63a51128SShuming Fan { 0x0610002f, 0x3355 }, 97*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_PLATFORM_FU15, RT712_SDCA_CTL_FU_CH_GAIN, CH_01), 0x0000 }, 98*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_PLATFORM_FU15, RT712_SDCA_CTL_FU_CH_GAIN, CH_02), 0x0000 }, 99*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_PLATFORM_FU15, RT712_SDCA_CTL_FU_CH_GAIN, CH_03), 0x0000 }, 100*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_PLATFORM_FU15, RT712_SDCA_CTL_FU_CH_GAIN, CH_04), 0x0000 }, 101*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_VOLUME, CH_01), 0x0000 }, 102*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_VOLUME, CH_02), 0x0000 }, 103*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_VOLUME, CH_03), 0x0000 }, 104*63a51128SShuming Fan { SDW_SDCA_CTL(FUNC_NUM_MIC_ARRAY, RT712_SDCA_ENT_USER_FU1E, RT712_SDCA_CTL_FU_VOLUME, CH_04), 0x0000 }, 105*63a51128SShuming Fan }; 106*63a51128SShuming Fan 107*63a51128SShuming Fan #endif /* __RT712_SDW_DMIC_H__ */ 108