1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * rt700.h -- RT700 ALSA SoC audio driver header 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright(c) 2019 Realtek Semiconductor Corp. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __RT700_H__ 9*4882a593Smuzhiyun #define __RT700_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun extern const struct dev_pm_ops rt700_runtime_pm; 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun struct rt700_priv { 14*4882a593Smuzhiyun struct snd_soc_component *component; 15*4882a593Smuzhiyun struct regmap *regmap; 16*4882a593Smuzhiyun struct regmap *sdw_regmap; 17*4882a593Smuzhiyun struct sdw_slave *slave; 18*4882a593Smuzhiyun enum sdw_slave_status status; 19*4882a593Smuzhiyun struct sdw_bus_params params; 20*4882a593Smuzhiyun bool hw_init; 21*4882a593Smuzhiyun bool first_hw_init; 22*4882a593Smuzhiyun struct snd_soc_jack *hs_jack; 23*4882a593Smuzhiyun struct delayed_work jack_detect_work; 24*4882a593Smuzhiyun struct delayed_work jack_btn_check_work; 25*4882a593Smuzhiyun int jack_type; 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun struct sdw_stream_data { 29*4882a593Smuzhiyun struct sdw_stream_runtime *sdw_stream; 30*4882a593Smuzhiyun }; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* NID */ 33*4882a593Smuzhiyun #define RT700_AUDIO_FUNCTION_GROUP 0x01 34*4882a593Smuzhiyun #define RT700_DAC_OUT1 0x02 35*4882a593Smuzhiyun #define RT700_DAC_OUT2 0x03 36*4882a593Smuzhiyun #define RT700_ADC_IN1 0x09 37*4882a593Smuzhiyun #define RT700_ADC_IN2 0x08 38*4882a593Smuzhiyun #define RT700_DMIC1 0x12 39*4882a593Smuzhiyun #define RT700_DMIC2 0x13 40*4882a593Smuzhiyun #define RT700_SPK_OUT 0x14 41*4882a593Smuzhiyun #define RT700_MIC2 0x19 42*4882a593Smuzhiyun #define RT700_LINE1 0x1a 43*4882a593Smuzhiyun #define RT700_LINE2 0x1b 44*4882a593Smuzhiyun #define RT700_BEEP 0x1d 45*4882a593Smuzhiyun #define RT700_SPDIF 0x1e 46*4882a593Smuzhiyun #define RT700_VENDOR_REGISTERS 0x20 47*4882a593Smuzhiyun #define RT700_HP_OUT 0x21 48*4882a593Smuzhiyun #define RT700_MIXER_IN1 0x22 49*4882a593Smuzhiyun #define RT700_MIXER_IN2 0x23 50*4882a593Smuzhiyun #define RT700_INLINE_CMD 0x55 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* Index (NID:20h) */ 53*4882a593Smuzhiyun #define RT700_DAC_DC_CALI_CTL1 0x00 54*4882a593Smuzhiyun #define RT700_PARA_VERB_CTL 0x1a 55*4882a593Smuzhiyun #define RT700_COMBO_JACK_AUTO_CTL1 0x45 56*4882a593Smuzhiyun #define RT700_COMBO_JACK_AUTO_CTL2 0x46 57*4882a593Smuzhiyun #define RT700_INLINE_CMD_CTL 0x48 58*4882a593Smuzhiyun #define RT700_DIGITAL_MISC_CTRL4 0x4a 59*4882a593Smuzhiyun #define RT700_VREFOUT_CTL 0x6b 60*4882a593Smuzhiyun #define RT700_FSM_CTL 0x6f 61*4882a593Smuzhiyun #define RT700_IRQ_FLAG_TABLE1 0x80 62*4882a593Smuzhiyun #define RT700_IRQ_FLAG_TABLE2 0x81 63*4882a593Smuzhiyun #define RT700_IRQ_FLAG_TABLE3 0x82 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* Verb */ 66*4882a593Smuzhiyun #define RT700_VERB_SET_CONNECT_SEL 0x3100 67*4882a593Smuzhiyun #define RT700_VERB_SET_EAPD_BTLENABLE 0x3c00 68*4882a593Smuzhiyun #define RT700_VERB_GET_CONNECT_SEL 0xb100 69*4882a593Smuzhiyun #define RT700_VERB_SET_POWER_STATE 0x3500 70*4882a593Smuzhiyun #define RT700_VERB_SET_CHANNEL_STREAMID 0x3600 71*4882a593Smuzhiyun #define RT700_VERB_SET_PIN_WIDGET_CONTROL 0x3700 72*4882a593Smuzhiyun #define RT700_VERB_SET_UNSOLICITED_ENABLE 0x3800 73*4882a593Smuzhiyun #define RT700_SET_AMP_GAIN_MUTE_H 0x7300 74*4882a593Smuzhiyun #define RT700_SET_AMP_GAIN_MUTE_L 0x8380 75*4882a593Smuzhiyun #define RT700_VERB_GET_PIN_SENSE 0xb900 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define RT700_READ_HDA_3 0x2012 78*4882a593Smuzhiyun #define RT700_READ_HDA_2 0x2013 79*4882a593Smuzhiyun #define RT700_READ_HDA_1 0x2014 80*4882a593Smuzhiyun #define RT700_READ_HDA_0 0x2015 81*4882a593Smuzhiyun #define RT700_PRIV_INDEX_W_H 0x7520 82*4882a593Smuzhiyun #define RT700_PRIV_INDEX_W_L 0x85a0 83*4882a593Smuzhiyun #define RT700_PRIV_DATA_W_H 0x7420 84*4882a593Smuzhiyun #define RT700_PRIV_DATA_W_L 0x84a0 85*4882a593Smuzhiyun #define RT700_PRIV_INDEX_R_H 0x9d20 86*4882a593Smuzhiyun #define RT700_PRIV_INDEX_R_L 0xada0 87*4882a593Smuzhiyun #define RT700_PRIV_DATA_R_H 0x9c20 88*4882a593Smuzhiyun #define RT700_PRIV_DATA_R_L 0xaca0 89*4882a593Smuzhiyun #define RT700_DAC_FORMAT_H 0x7203 90*4882a593Smuzhiyun #define RT700_DAC_FORMAT_L 0x8283 91*4882a593Smuzhiyun #define RT700_ADC_FORMAT_H 0x7209 92*4882a593Smuzhiyun #define RT700_ADC_FORMAT_L 0x8289 93*4882a593Smuzhiyun #define RT700_SET_AUDIO_POWER_STATE\ 94*4882a593Smuzhiyun (RT700_VERB_SET_POWER_STATE | RT700_AUDIO_FUNCTION_GROUP) 95*4882a593Smuzhiyun #define RT700_SET_PIN_DMIC1\ 96*4882a593Smuzhiyun (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_DMIC1) 97*4882a593Smuzhiyun #define RT700_SET_PIN_DMIC2\ 98*4882a593Smuzhiyun (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_DMIC2) 99*4882a593Smuzhiyun #define RT700_SET_PIN_SPK\ 100*4882a593Smuzhiyun (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_SPK_OUT) 101*4882a593Smuzhiyun #define RT700_SET_PIN_HP\ 102*4882a593Smuzhiyun (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_HP_OUT) 103*4882a593Smuzhiyun #define RT700_SET_PIN_MIC2\ 104*4882a593Smuzhiyun (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_MIC2) 105*4882a593Smuzhiyun #define RT700_SET_PIN_LINE1\ 106*4882a593Smuzhiyun (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_LINE1) 107*4882a593Smuzhiyun #define RT700_SET_PIN_LINE2\ 108*4882a593Smuzhiyun (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_LINE2) 109*4882a593Smuzhiyun #define RT700_SET_MIC2_UNSOLICITED_ENABLE\ 110*4882a593Smuzhiyun (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_MIC2) 111*4882a593Smuzhiyun #define RT700_SET_HP_UNSOLICITED_ENABLE\ 112*4882a593Smuzhiyun (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_HP_OUT) 113*4882a593Smuzhiyun #define RT700_SET_INLINE_UNSOLICITED_ENABLE\ 114*4882a593Smuzhiyun (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_INLINE_CMD) 115*4882a593Smuzhiyun #define RT700_SET_STREAMID_DAC1\ 116*4882a593Smuzhiyun (RT700_VERB_SET_CHANNEL_STREAMID | RT700_DAC_OUT1) 117*4882a593Smuzhiyun #define RT700_SET_STREAMID_DAC2\ 118*4882a593Smuzhiyun (RT700_VERB_SET_CHANNEL_STREAMID | RT700_DAC_OUT2) 119*4882a593Smuzhiyun #define RT700_SET_STREAMID_ADC1\ 120*4882a593Smuzhiyun (RT700_VERB_SET_CHANNEL_STREAMID | RT700_ADC_IN1) 121*4882a593Smuzhiyun #define RT700_SET_STREAMID_ADC2\ 122*4882a593Smuzhiyun (RT700_VERB_SET_CHANNEL_STREAMID | RT700_ADC_IN2) 123*4882a593Smuzhiyun #define RT700_SET_GAIN_DAC1_L\ 124*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_L | RT700_DAC_OUT1) 125*4882a593Smuzhiyun #define RT700_SET_GAIN_DAC1_H\ 126*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_H | RT700_DAC_OUT1) 127*4882a593Smuzhiyun #define RT700_SET_GAIN_ADC1_L\ 128*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_L | RT700_ADC_IN1) 129*4882a593Smuzhiyun #define RT700_SET_GAIN_ADC1_H\ 130*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_H | RT700_ADC_IN1) 131*4882a593Smuzhiyun #define RT700_SET_GAIN_ADC2_L\ 132*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_L | RT700_ADC_IN2) 133*4882a593Smuzhiyun #define RT700_SET_GAIN_ADC2_H\ 134*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_H | RT700_ADC_IN2) 135*4882a593Smuzhiyun #define RT700_SET_GAIN_AMIC_L\ 136*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_L | RT700_MIC2) 137*4882a593Smuzhiyun #define RT700_SET_GAIN_AMIC_H\ 138*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_H | RT700_MIC2) 139*4882a593Smuzhiyun #define RT700_SET_GAIN_HP_L\ 140*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_L | RT700_HP_OUT) 141*4882a593Smuzhiyun #define RT700_SET_GAIN_HP_H\ 142*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_H | RT700_HP_OUT) 143*4882a593Smuzhiyun #define RT700_SET_GAIN_SPK_L\ 144*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_L | RT700_SPK_OUT) 145*4882a593Smuzhiyun #define RT700_SET_GAIN_SPK_H\ 146*4882a593Smuzhiyun (RT700_SET_AMP_GAIN_MUTE_H | RT700_SPK_OUT) 147*4882a593Smuzhiyun #define RT700_SET_EAPD_SPK\ 148*4882a593Smuzhiyun (RT700_VERB_SET_EAPD_BTLENABLE | RT700_SPK_OUT) 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun /* combo jack auto switch control 2 (0x46)(NID:20h) */ 151*4882a593Smuzhiyun #define RT700_COMBOJACK_AUTO_DET_STATUS (0x1 << 11) 152*4882a593Smuzhiyun #define RT700_COMBOJACK_AUTO_DET_TRS (0x1 << 10) 153*4882a593Smuzhiyun #define RT700_COMBOJACK_AUTO_DET_CTIA (0x1 << 9) 154*4882a593Smuzhiyun #define RT700_COMBOJACK_AUTO_DET_OMTP (0x1 << 8) 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun #define RT700_EAPD_HIGH 0x2 157*4882a593Smuzhiyun #define RT700_EAPD_LOW 0x0 158*4882a593Smuzhiyun #define RT700_MUTE_SFT 7 159*4882a593Smuzhiyun #define RT700_DIR_IN_SFT 6 160*4882a593Smuzhiyun #define RT700_DIR_OUT_SFT 7 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun enum { 163*4882a593Smuzhiyun RT700_AIF1, 164*4882a593Smuzhiyun RT700_AIF2, 165*4882a593Smuzhiyun RT700_AIFS, 166*4882a593Smuzhiyun }; 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun int rt700_io_init(struct device *dev, struct sdw_slave *slave); 169*4882a593Smuzhiyun int rt700_init(struct device *dev, struct regmap *sdw_regmap, 170*4882a593Smuzhiyun struct regmap *regmap, struct sdw_slave *slave); 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun int rt700_jack_detect(struct rt700_priv *rt700, bool *hp, bool *mic); 173*4882a593Smuzhiyun int rt700_clock_config(struct device *dev); 174*4882a593Smuzhiyun #endif /* __RT700_H__ */ 175