228 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * rt715.h -- RT715 ALSA SoC audio driver header4 *5 * Copyright(c) 2019 Realtek Semiconductor Corp.6 */7 8#ifndef __RT715_H__9#define __RT715_H__10 11#include <linux/regulator/consumer.h>12 13struct rt715_priv {14 struct regmap *regmap;15 struct regmap *sdw_regmap;16 struct snd_soc_codec *codec;17 struct sdw_slave *slave;18 int dbg_nid;19 int dbg_vid;20 int dbg_payload;21 struct sdw_bus_params params;22 bool hw_init;23 bool first_hw_init;24 unsigned int kctl_2ch_vol_ori[2];25 unsigned int kctl_8ch_switch_ori[8];26 unsigned int kctl_8ch_vol_ori[8];27};28 29/* NID */30#define RT715_AUDIO_FUNCTION_GROUP 0x0131#define RT715_MIC_ADC 0x0732#define RT715_LINE_ADC 0x0833#define RT715_MIX_ADC 0x0934#define RT715_DMIC1 0x1235#define RT715_DMIC2 0x1336#define RT715_MIC1 0x1837#define RT715_MIC2 0x1938#define RT715_LINE1 0x1a39#define RT715_LINE2 0x1b40#define RT715_DMIC3 0x1d41#define RT715_DMIC4 0x2942#define RT715_VENDOR_REGISTERS 0x2043#define RT715_MUX_IN1 0x2244#define RT715_MUX_IN2 0x2345#define RT715_MUX_IN3 0x2446#define RT715_MUX_IN4 0x2547#define RT715_MIX_ADC2 0x2748#define RT715_INLINE_CMD 0x5549 50/* Index (NID:20h) */51#define RT715_VD_CLEAR_CTRL 0x0152#define RT715_SDW_INPUT_SEL 0x3953#define RT715_EXT_DMIC_CLK_CTRL2 0x5454 55/* Verb */56#define RT715_VERB_SET_CONNECT_SEL 0x310057#define RT715_VERB_GET_CONNECT_SEL 0xb10058#define RT715_VERB_SET_EAPD_BTLENABLE 0x3c0059#define RT715_VERB_SET_POWER_STATE 0x350060#define RT715_VERB_SET_CHANNEL_STREAMID 0x360061#define RT715_VERB_SET_PIN_WIDGET_CONTROL 0x370062#define RT715_VERB_SET_CONFIG_DEFAULT1 0x4c0063#define RT715_VERB_SET_CONFIG_DEFAULT2 0x4d0064#define RT715_VERB_SET_CONFIG_DEFAULT3 0x4e0065#define RT715_VERB_SET_CONFIG_DEFAULT4 0x4f0066#define RT715_VERB_SET_UNSOLICITED_ENABLE 0x380067#define RT715_SET_AMP_GAIN_MUTE_H 0x730068#define RT715_SET_AMP_GAIN_MUTE_L 0x838069#define RT715_READ_HDA_3 0x201270#define RT715_READ_HDA_2 0x201371#define RT715_READ_HDA_1 0x201472#define RT715_READ_HDA_0 0x201573#define RT715_PRIV_INDEX_W_H 0x752074#define RT715_PRIV_INDEX_W_L 0x85a075#define RT715_PRIV_INDEX_W_H_2 0x750076#define RT715_PRIV_INDEX_W_L_2 0x858077#define RT715_PRIV_DATA_W_H 0x742078#define RT715_PRIV_DATA_W_L 0x84a079#define RT715_PRIV_INDEX_R_H 0x9d2080#define RT715_PRIV_INDEX_R_L 0xada081#define RT715_PRIV_DATA_R_H 0x9c2082#define RT715_PRIV_DATA_R_L 0xaca083#define RT715_MIC_ADC_FORMAT_H 0x720784#define RT715_MIC_ADC_FORMAT_L 0x828785#define RT715_MIC_LINE_FORMAT_H 0x720886#define RT715_MIC_LINE_FORMAT_L 0x828887#define RT715_MIX_ADC_FORMAT_H 0x720988#define RT715_MIX_ADC_FORMAT_L 0x828989#define RT715_MIX_ADC2_FORMAT_H 0x722790#define RT715_MIX_ADC2_FORMAT_L 0x82a791#define RT715_FUNC_RESET 0xff0192 93#define RT715_SET_AUDIO_POWER_STATE\94 (RT715_VERB_SET_POWER_STATE | RT715_AUDIO_FUNCTION_GROUP)95#define RT715_SET_PIN_DMIC1\96 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_DMIC1)97#define RT715_SET_PIN_DMIC2\98 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_DMIC2)99#define RT715_SET_PIN_DMIC3\100 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_DMIC3)101#define RT715_SET_PIN_DMIC4\102 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_DMIC4)103#define RT715_SET_PIN_MIC1\104 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_MIC1)105#define RT715_SET_PIN_MIC2\106 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_MIC2)107#define RT715_SET_PIN_LINE1\108 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_LINE1)109#define RT715_SET_PIN_LINE2\110 (RT715_VERB_SET_PIN_WIDGET_CONTROL | RT715_LINE2)111#define RT715_SET_MIC1_UNSOLICITED_ENABLE\112 (RT715_VERB_SET_UNSOLICITED_ENABLE | RT715_MIC1)113#define RT715_SET_MIC2_UNSOLICITED_ENABLE\114 (RT715_VERB_SET_UNSOLICITED_ENABLE | RT715_MIC2)115#define RT715_SET_STREAMID_MIC_ADC\116 (RT715_VERB_SET_CHANNEL_STREAMID | RT715_MIC_ADC)117#define RT715_SET_STREAMID_LINE_ADC\118 (RT715_VERB_SET_CHANNEL_STREAMID | RT715_LINE_ADC)119#define RT715_SET_STREAMID_MIX_ADC\120 (RT715_VERB_SET_CHANNEL_STREAMID | RT715_MIX_ADC)121#define RT715_SET_STREAMID_MIX_ADC2\122 (RT715_VERB_SET_CHANNEL_STREAMID | RT715_MIX_ADC2)123#define RT715_SET_GAIN_MIC_ADC_L\124 (RT715_SET_AMP_GAIN_MUTE_L | RT715_MIC_ADC)125#define RT715_SET_GAIN_MIC_ADC_H\126 (RT715_SET_AMP_GAIN_MUTE_H | RT715_MIC_ADC)127#define RT715_SET_GAIN_LINE_ADC_L\128 (RT715_SET_AMP_GAIN_MUTE_L | RT715_LINE_ADC)129#define RT715_SET_GAIN_LINE_ADC_H\130 (RT715_SET_AMP_GAIN_MUTE_H | RT715_LINE_ADC)131#define RT715_SET_GAIN_MIX_ADC_L\132 (RT715_SET_AMP_GAIN_MUTE_L | RT715_MIX_ADC)133#define RT715_SET_GAIN_MIX_ADC_H\134 (RT715_SET_AMP_GAIN_MUTE_H | RT715_MIX_ADC)135#define RT715_SET_GAIN_MIX_ADC2_L\136 (RT715_SET_AMP_GAIN_MUTE_L | RT715_MIX_ADC2)137#define RT715_SET_GAIN_MIX_ADC2_H\138 (RT715_SET_AMP_GAIN_MUTE_H | RT715_MIX_ADC2)139#define RT715_SET_GAIN_DMIC1_L\140 (RT715_SET_AMP_GAIN_MUTE_L | RT715_DMIC1)141#define RT715_SET_GAIN_DMIC1_H\142 (RT715_SET_AMP_GAIN_MUTE_H | RT715_DMIC1)143#define RT715_SET_GAIN_DMIC2_L\144 (RT715_SET_AMP_GAIN_MUTE_L | RT715_DMIC2)145#define RT715_SET_GAIN_DMIC2_H\146 (RT715_SET_AMP_GAIN_MUTE_H | RT715_DMIC2)147#define RT715_SET_GAIN_DMIC3_L\148 (RT715_SET_AMP_GAIN_MUTE_L | RT715_DMIC3)149#define RT715_SET_GAIN_DMIC3_H\150 (RT715_SET_AMP_GAIN_MUTE_H | RT715_DMIC3)151#define RT715_SET_GAIN_DMIC4_L\152 (RT715_SET_AMP_GAIN_MUTE_L | RT715_DMIC4)153#define RT715_SET_GAIN_DMIC4_H\154 (RT715_SET_AMP_GAIN_MUTE_H | RT715_DMIC4)155#define RT715_SET_GAIN_MIC1_L\156 (RT715_SET_AMP_GAIN_MUTE_L | RT715_MIC1)157#define RT715_SET_GAIN_MIC1_H\158 (RT715_SET_AMP_GAIN_MUTE_H | RT715_MIC1)159#define RT715_SET_GAIN_MIC2_L\160 (RT715_SET_AMP_GAIN_MUTE_L | RT715_MIC2)161#define RT715_SET_GAIN_MIC2_H\162 (RT715_SET_AMP_GAIN_MUTE_H | RT715_MIC2)163#define RT715_SET_GAIN_LINE1_L\164 (RT715_SET_AMP_GAIN_MUTE_L | RT715_LINE1)165#define RT715_SET_GAIN_LINE1_H\166 (RT715_SET_AMP_GAIN_MUTE_H | RT715_LINE1)167#define RT715_SET_GAIN_LINE2_L\168 (RT715_SET_AMP_GAIN_MUTE_L | RT715_LINE2)169#define RT715_SET_GAIN_LINE2_H\170 (RT715_SET_AMP_GAIN_MUTE_H | RT715_LINE2)171#define RT715_SET_DMIC1_CONFIG_DEFAULT1\172 (RT715_VERB_SET_CONFIG_DEFAULT1 | RT715_DMIC1)173#define RT715_SET_DMIC2_CONFIG_DEFAULT1\174 (RT715_VERB_SET_CONFIG_DEFAULT1 | RT715_DMIC2)175#define RT715_SET_DMIC1_CONFIG_DEFAULT2\176 (RT715_VERB_SET_CONFIG_DEFAULT2 | RT715_DMIC1)177#define RT715_SET_DMIC2_CONFIG_DEFAULT2\178 (RT715_VERB_SET_CONFIG_DEFAULT2 | RT715_DMIC2)179#define RT715_SET_DMIC1_CONFIG_DEFAULT3\180 (RT715_VERB_SET_CONFIG_DEFAULT3 | RT715_DMIC1)181#define RT715_SET_DMIC2_CONFIG_DEFAULT3\182 (RT715_VERB_SET_CONFIG_DEFAULT3 | RT715_DMIC2)183#define RT715_SET_DMIC1_CONFIG_DEFAULT4\184 (RT715_VERB_SET_CONFIG_DEFAULT4 | RT715_DMIC1)185#define RT715_SET_DMIC2_CONFIG_DEFAULT4\186 (RT715_VERB_SET_CONFIG_DEFAULT4 | RT715_DMIC2)187#define RT715_SET_DMIC3_CONFIG_DEFAULT1\188 (RT715_VERB_SET_CONFIG_DEFAULT1 | RT715_DMIC3)189#define RT715_SET_DMIC4_CONFIG_DEFAULT1\190 (RT715_VERB_SET_CONFIG_DEFAULT1 | RT715_DMIC4)191#define RT715_SET_DMIC3_CONFIG_DEFAULT2\192 (RT715_VERB_SET_CONFIG_DEFAULT2 | RT715_DMIC3)193#define RT715_SET_DMIC4_CONFIG_DEFAULT2\194 (RT715_VERB_SET_CONFIG_DEFAULT2 | RT715_DMIC4)195#define RT715_SET_DMIC3_CONFIG_DEFAULT3\196 (RT715_VERB_SET_CONFIG_DEFAULT3 | RT715_DMIC3)197#define RT715_SET_DMIC4_CONFIG_DEFAULT3\198 (RT715_VERB_SET_CONFIG_DEFAULT3 | RT715_DMIC4)199#define RT715_SET_DMIC3_CONFIG_DEFAULT4\200 (RT715_VERB_SET_CONFIG_DEFAULT4 | RT715_DMIC3)201#define RT715_SET_DMIC4_CONFIG_DEFAULT4\202 (RT715_VERB_SET_CONFIG_DEFAULT4 | RT715_DMIC4)203 204/* vendor register clear ctrl-1 (0x01)(NID:20h) */205#define RT715_CLEAR_HIDDEN_REG (0x1 << 15)206 207 208#define RT715_MUTE_SFT 7209#define RT715_DIR_IN_SFT 6210#define RT715_DIR_OUT_SFT 7211 212enum {213 RT715_AIF1,214 RT715_AIF2,215};216 217#define RT715_POWER_UP_DELAY_MS 400218 219int rt715_io_init(struct device *dev, struct sdw_slave *slave);220int rt715_init(struct device *dev, struct regmap *sdw_regmap,221 struct regmap *regmap, struct sdw_slave *slave);222 223int hda_to_sdw(unsigned int nid, unsigned int verb, unsigned int payload,224 unsigned int *sdw_addr_h, unsigned int *sdw_data_h,225 unsigned int *sdw_addr_l, unsigned int *sdw_data_l);226int rt715_clock_config(struct device *dev);227#endif /* __RT715_H__ */228