172 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * rt700.h -- RT700 ALSA SoC audio driver header4 *5 * Copyright(c) 2019 Realtek Semiconductor Corp.6 */7 8#ifndef __RT700_H__9#define __RT700_H__10 11extern const struct dev_pm_ops rt700_runtime_pm;12 13struct rt700_priv {14 struct snd_soc_component *component;15 struct regmap *regmap;16 struct regmap *sdw_regmap;17 struct sdw_slave *slave;18 struct sdw_bus_params params;19 bool hw_init;20 bool first_hw_init;21 struct snd_soc_jack *hs_jack;22 struct delayed_work jack_detect_work;23 struct delayed_work jack_btn_check_work;24 int jack_type;25 struct mutex disable_irq_lock; /* imp-def irq lock protection */26 bool disable_irq;27};28 29/* NID */30#define RT700_AUDIO_FUNCTION_GROUP 0x0131#define RT700_DAC_OUT1 0x0232#define RT700_DAC_OUT2 0x0333#define RT700_ADC_IN1 0x0934#define RT700_ADC_IN2 0x0835#define RT700_DMIC1 0x1236#define RT700_DMIC2 0x1337#define RT700_SPK_OUT 0x1438#define RT700_MIC2 0x1939#define RT700_LINE1 0x1a40#define RT700_LINE2 0x1b41#define RT700_BEEP 0x1d42#define RT700_SPDIF 0x1e43#define RT700_VENDOR_REGISTERS 0x2044#define RT700_HP_OUT 0x2145#define RT700_MIXER_IN1 0x2246#define RT700_MIXER_IN2 0x2347#define RT700_INLINE_CMD 0x5548 49/* Index (NID:20h) */50#define RT700_DAC_DC_CALI_CTL1 0x0051#define RT700_PARA_VERB_CTL 0x1a52#define RT700_COMBO_JACK_AUTO_CTL1 0x4553#define RT700_COMBO_JACK_AUTO_CTL2 0x4654#define RT700_INLINE_CMD_CTL 0x4855#define RT700_DIGITAL_MISC_CTRL4 0x4a56#define RT700_VREFOUT_CTL 0x6b57#define RT700_FSM_CTL 0x6f58#define RT700_IRQ_FLAG_TABLE1 0x8059#define RT700_IRQ_FLAG_TABLE2 0x8160#define RT700_IRQ_FLAG_TABLE3 0x8261 62/* Verb */63#define RT700_VERB_SET_CONNECT_SEL 0x310064#define RT700_VERB_SET_EAPD_BTLENABLE 0x3c0065#define RT700_VERB_GET_CONNECT_SEL 0xb10066#define RT700_VERB_SET_POWER_STATE 0x350067#define RT700_VERB_SET_CHANNEL_STREAMID 0x360068#define RT700_VERB_SET_PIN_WIDGET_CONTROL 0x370069#define RT700_VERB_SET_UNSOLICITED_ENABLE 0x380070#define RT700_SET_AMP_GAIN_MUTE_H 0x730071#define RT700_SET_AMP_GAIN_MUTE_L 0x838072#define RT700_VERB_GET_PIN_SENSE 0xb90073 74#define RT700_READ_HDA_3 0x201275#define RT700_READ_HDA_2 0x201376#define RT700_READ_HDA_1 0x201477#define RT700_READ_HDA_0 0x201578#define RT700_PRIV_INDEX_W_H 0x752079#define RT700_PRIV_INDEX_W_L 0x85a080#define RT700_PRIV_DATA_W_H 0x742081#define RT700_PRIV_DATA_W_L 0x84a082#define RT700_PRIV_INDEX_R_H 0x9d2083#define RT700_PRIV_INDEX_R_L 0xada084#define RT700_PRIV_DATA_R_H 0x9c2085#define RT700_PRIV_DATA_R_L 0xaca086#define RT700_DAC_FORMAT_H 0x720387#define RT700_DAC_FORMAT_L 0x828388#define RT700_ADC_FORMAT_H 0x720989#define RT700_ADC_FORMAT_L 0x828990#define RT700_SET_AUDIO_POWER_STATE\91 (RT700_VERB_SET_POWER_STATE | RT700_AUDIO_FUNCTION_GROUP)92#define RT700_SET_PIN_DMIC1\93 (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_DMIC1)94#define RT700_SET_PIN_DMIC2\95 (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_DMIC2)96#define RT700_SET_PIN_SPK\97 (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_SPK_OUT)98#define RT700_SET_PIN_HP\99 (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_HP_OUT)100#define RT700_SET_PIN_MIC2\101 (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_MIC2)102#define RT700_SET_PIN_LINE1\103 (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_LINE1)104#define RT700_SET_PIN_LINE2\105 (RT700_VERB_SET_PIN_WIDGET_CONTROL | RT700_LINE2)106#define RT700_SET_MIC2_UNSOLICITED_ENABLE\107 (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_MIC2)108#define RT700_SET_HP_UNSOLICITED_ENABLE\109 (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_HP_OUT)110#define RT700_SET_INLINE_UNSOLICITED_ENABLE\111 (RT700_VERB_SET_UNSOLICITED_ENABLE | RT700_INLINE_CMD)112#define RT700_SET_STREAMID_DAC1\113 (RT700_VERB_SET_CHANNEL_STREAMID | RT700_DAC_OUT1)114#define RT700_SET_STREAMID_DAC2\115 (RT700_VERB_SET_CHANNEL_STREAMID | RT700_DAC_OUT2)116#define RT700_SET_STREAMID_ADC1\117 (RT700_VERB_SET_CHANNEL_STREAMID | RT700_ADC_IN1)118#define RT700_SET_STREAMID_ADC2\119 (RT700_VERB_SET_CHANNEL_STREAMID | RT700_ADC_IN2)120#define RT700_SET_GAIN_DAC1_L\121 (RT700_SET_AMP_GAIN_MUTE_L | RT700_DAC_OUT1)122#define RT700_SET_GAIN_DAC1_H\123 (RT700_SET_AMP_GAIN_MUTE_H | RT700_DAC_OUT1)124#define RT700_SET_GAIN_ADC1_L\125 (RT700_SET_AMP_GAIN_MUTE_L | RT700_ADC_IN1)126#define RT700_SET_GAIN_ADC1_H\127 (RT700_SET_AMP_GAIN_MUTE_H | RT700_ADC_IN1)128#define RT700_SET_GAIN_ADC2_L\129 (RT700_SET_AMP_GAIN_MUTE_L | RT700_ADC_IN2)130#define RT700_SET_GAIN_ADC2_H\131 (RT700_SET_AMP_GAIN_MUTE_H | RT700_ADC_IN2)132#define RT700_SET_GAIN_AMIC_L\133 (RT700_SET_AMP_GAIN_MUTE_L | RT700_MIC2)134#define RT700_SET_GAIN_AMIC_H\135 (RT700_SET_AMP_GAIN_MUTE_H | RT700_MIC2)136#define RT700_SET_GAIN_HP_L\137 (RT700_SET_AMP_GAIN_MUTE_L | RT700_HP_OUT)138#define RT700_SET_GAIN_HP_H\139 (RT700_SET_AMP_GAIN_MUTE_H | RT700_HP_OUT)140#define RT700_SET_GAIN_SPK_L\141 (RT700_SET_AMP_GAIN_MUTE_L | RT700_SPK_OUT)142#define RT700_SET_GAIN_SPK_H\143 (RT700_SET_AMP_GAIN_MUTE_H | RT700_SPK_OUT)144#define RT700_SET_EAPD_SPK\145 (RT700_VERB_SET_EAPD_BTLENABLE | RT700_SPK_OUT)146 147/* combo jack auto switch control 2 (0x46)(NID:20h) */148#define RT700_COMBOJACK_AUTO_DET_STATUS (0x1 << 11)149#define RT700_COMBOJACK_AUTO_DET_TRS (0x1 << 10)150#define RT700_COMBOJACK_AUTO_DET_CTIA (0x1 << 9)151#define RT700_COMBOJACK_AUTO_DET_OMTP (0x1 << 8)152 153#define RT700_EAPD_HIGH 0x2154#define RT700_EAPD_LOW 0x0155#define RT700_MUTE_SFT 7156#define RT700_DIR_IN_SFT 6157#define RT700_DIR_OUT_SFT 7158 159enum {160 RT700_AIF1,161 RT700_AIF2,162 RT700_AIFS,163};164 165int rt700_io_init(struct device *dev, struct sdw_slave *slave);166int rt700_init(struct device *dev, struct regmap *sdw_regmap,167 struct regmap *regmap, struct sdw_slave *slave);168 169int rt700_jack_detect(struct rt700_priv *rt700, bool *hp, bool *mic);170int rt700_clock_config(struct device *dev);171#endif /* __RT700_H__ */172