Path: blob/master/sound/hda/codecs/cirrus/cs8409-tables.c
52282 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* cs8409-tables.c -- HD audio codec driver for Cirrus Logic CS8409 HDA bridge chip3*4* Copyright (C) 2021 Cirrus Logic, Inc. and5* Cirrus Logic International Semiconductor Ltd.6*7* Author: Lucas Tanure <[email protected]>8*/910#include "cs8409.h"1112/******************************************************************************13* CS42L42 Specific Data14*15******************************************************************************/1617static const DECLARE_TLV_DB_SCALE(cs42l42_dac_db_scale, CS42L42_HP_VOL_REAL_MIN * 100, 100, 1);1819static const DECLARE_TLV_DB_SCALE(cs42l42_adc_db_scale, CS42L42_AMIC_VOL_REAL_MIN * 100, 100, 1);2021const struct snd_kcontrol_new cs42l42_dac_volume_mixer = {22.iface = SNDRV_CTL_ELEM_IFACE_MIXER,23.index = 0,24.subdevice = (HDA_SUBDEV_AMP_FLAG | HDA_SUBDEV_NID_FLAG),25.access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ),26.info = cs42l42_volume_info,27.get = cs42l42_volume_get,28.put = cs42l42_volume_put,29.tlv = { .p = cs42l42_dac_db_scale },30.private_value = HDA_COMPOSE_AMP_VAL_OFS(CS8409_PIN_ASP1_TRANSMITTER_A, 3, CS8409_CODEC0,31HDA_OUTPUT, CS42L42_VOL_DAC) | HDA_AMP_VAL_MIN_MUTE32};3334const struct snd_kcontrol_new cs42l42_adc_volume_mixer = {35.iface = SNDRV_CTL_ELEM_IFACE_MIXER,36.index = 0,37.subdevice = (HDA_SUBDEV_AMP_FLAG | HDA_SUBDEV_NID_FLAG),38.access = (SNDRV_CTL_ELEM_ACCESS_READWRITE | SNDRV_CTL_ELEM_ACCESS_TLV_READ),39.info = cs42l42_volume_info,40.get = cs42l42_volume_get,41.put = cs42l42_volume_put,42.tlv = { .p = cs42l42_adc_db_scale },43.private_value = HDA_COMPOSE_AMP_VAL_OFS(CS8409_PIN_ASP1_RECEIVER_A, 1, CS8409_CODEC0,44HDA_INPUT, CS42L42_VOL_ADC) | HDA_AMP_VAL_MIN_MUTE45};4647const struct hda_pcm_stream cs42l42_48k_pcm_analog_playback = {48.rates = SNDRV_PCM_RATE_48000, /* fixed rate */49};5051const struct hda_pcm_stream cs42l42_48k_pcm_analog_capture = {52.rates = SNDRV_PCM_RATE_48000, /* fixed rate */53};5455/******************************************************************************56* BULLSEYE / WARLOCK / CYBORG Specific Arrays57* CS8409/CS42L4258******************************************************************************/5960const struct hda_verb cs8409_cs42l42_init_verbs[] = {61{ CS8409_PIN_AFG, AC_VERB_SET_GPIO_WAKE_MASK, 0x0018 }, /* WAKE from GPIO 3,4 */62{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_PROC_STATE, 0x0001 }, /* Enable VPW processing */63{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_COEF_INDEX, 0x0002 }, /* Configure GPIO 6,7 */64{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_PROC_COEF, 0x0080 }, /* I2C mode */65{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_COEF_INDEX, 0x005b }, /* Set I2C bus speed */66{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_PROC_COEF, 0x0200 }, /* 100kHz I2C_STO = 2 */67{} /* terminator */68};6970static const struct hda_pintbl cs8409_cs42l42_pincfgs[] = {71{ CS8409_PIN_ASP1_TRANSMITTER_A, 0x042120f0 }, /* ASP-1-TX */72{ CS8409_PIN_ASP1_RECEIVER_A, 0x04a12050 }, /* ASP-1-RX */73{ CS8409_PIN_ASP2_TRANSMITTER_A, 0x901000f0 }, /* ASP-2-TX */74{ CS8409_PIN_DMIC1_IN, 0x90a00090 }, /* DMIC-1 */75{} /* terminator */76};7778static const struct hda_pintbl cs8409_cs42l42_pincfgs_no_dmic[] = {79{ CS8409_PIN_ASP1_TRANSMITTER_A, 0x042120f0 }, /* ASP-1-TX */80{ CS8409_PIN_ASP1_RECEIVER_A, 0x04a12050 }, /* ASP-1-RX */81{ CS8409_PIN_ASP2_TRANSMITTER_A, 0x901000f0 }, /* ASP-2-TX */82{} /* terminator */83};8485/* Vendor specific HW configuration for CS42L42 */86static const struct cs8409_i2c_param cs42l42_init_reg_seq[] = {87{ CS42L42_I2C_TIMEOUT, 0xB0 },88{ CS42L42_ADC_CTL, 0x00 },89{ 0x1D02, 0x06 },90{ CS42L42_ADC_VOLUME, 0x9F },91{ CS42L42_OSC_SWITCH, 0x01 },92{ CS42L42_MCLK_CTL, 0x02 },93{ CS42L42_SRC_CTL, 0x03 },94{ CS42L42_MCLK_SRC_SEL, 0x00 },95{ CS42L42_ASP_FRM_CFG, 0x13 },96{ CS42L42_FSYNC_P_LOWER, 0xFF },97{ CS42L42_FSYNC_P_UPPER, 0x00 },98{ CS42L42_ASP_CLK_CFG, 0x20 },99{ CS42L42_SPDIF_CLK_CFG, 0x0D },100{ CS42L42_ASP_RX_DAI0_CH1_AP_RES, 0x02 },101{ CS42L42_ASP_RX_DAI0_CH1_BIT_MSB, 0x00 },102{ CS42L42_ASP_RX_DAI0_CH1_BIT_LSB, 0x00 },103{ CS42L42_ASP_RX_DAI0_CH2_AP_RES, 0x02 },104{ CS42L42_ASP_RX_DAI0_CH2_BIT_MSB, 0x00 },105{ CS42L42_ASP_RX_DAI0_CH2_BIT_LSB, 0x20 },106{ CS42L42_ASP_RX_DAI0_CH3_AP_RES, 0x02 },107{ CS42L42_ASP_RX_DAI0_CH3_BIT_MSB, 0x00 },108{ CS42L42_ASP_RX_DAI0_CH3_BIT_LSB, 0x80 },109{ CS42L42_ASP_RX_DAI0_CH4_AP_RES, 0x02 },110{ CS42L42_ASP_RX_DAI0_CH4_BIT_MSB, 0x00 },111{ CS42L42_ASP_RX_DAI0_CH4_BIT_LSB, 0xA0 },112{ CS42L42_ASP_RX_DAI0_EN, 0x0C },113{ CS42L42_ASP_TX_CH_EN, 0x01 },114{ CS42L42_ASP_TX_CH_AP_RES, 0x02 },115{ CS42L42_ASP_TX_CH1_BIT_MSB, 0x00 },116{ CS42L42_ASP_TX_CH1_BIT_LSB, 0x00 },117{ CS42L42_ASP_TX_SZ_EN, 0x01 },118{ CS42L42_PWR_CTL1, 0x0A },119{ CS42L42_PWR_CTL2, 0x84 },120{ CS42L42_MIXER_CHA_VOL, 0x3F },121{ CS42L42_MIXER_CHB_VOL, 0x3F },122{ CS42L42_MIXER_ADC_VOL, 0x3f },123{ CS42L42_HP_CTL, 0x0D },124{ CS42L42_MIC_DET_CTL1, 0xB6 },125{ CS42L42_TIPSENSE_CTL, 0xC2 },126{ CS42L42_HS_CLAMP_DISABLE, 0x01 },127{ CS42L42_HS_SWITCH_CTL, 0xF3 },128{ CS42L42_PWR_CTL3, 0x20 },129{ CS42L42_RSENSE_CTL2, 0x00 },130{ CS42L42_RSENSE_CTL3, 0x00 },131{ CS42L42_TSENSE_CTL, 0x80 },132{ CS42L42_HS_BIAS_CTL, 0xC0 },133{ CS42L42_PWR_CTL1, 0x02, 10000 },134{ CS42L42_ADC_OVFL_INT_MASK, 0xff },135{ CS42L42_MIXER_INT_MASK, 0xff },136{ CS42L42_SRC_INT_MASK, 0xff },137{ CS42L42_ASP_RX_INT_MASK, 0xff },138{ CS42L42_ASP_TX_INT_MASK, 0xff },139{ CS42L42_CODEC_INT_MASK, 0xff },140{ CS42L42_SRCPL_INT_MASK, 0xff },141{ CS42L42_VPMON_INT_MASK, 0xff },142{ CS42L42_PLL_LOCK_INT_MASK, 0xff },143{ CS42L42_TSRS_PLUG_INT_MASK, 0xff },144{ CS42L42_DET_INT1_MASK, 0xff },145{ CS42L42_DET_INT2_MASK, 0xff },146};147148/* Vendor specific hw configuration for CS8409 */149const struct cs8409_cir_param cs8409_cs42l42_hw_cfg[] = {150/* +PLL1/2_EN, +I2C_EN */151{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG1, 0xb008 },152/* ASP1/2_EN=0, ASP1_STP=1 */153{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG2, 0x0002 },154/* ASP1/2_BUS_IDLE=10, +GPIO_I2C */155{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG3, 0x0a80 },156/* ASP1.A: TX.LAP=0, TX.LSZ=24 bits, TX.LCS=0 */157{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_TX_CTRL1, 0x0800 },158/* ASP1.A: TX.RAP=0, TX.RSZ=24 bits, TX.RCS=32 */159{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_TX_CTRL2, 0x0820 },160/* ASP2.A: TX.LAP=0, TX.LSZ=24 bits, TX.LCS=0 */161{ CS8409_PIN_VENDOR_WIDGET, ASP2_A_TX_CTRL1, 0x0800 },162/* ASP2.A: TX.RAP=1, TX.RSZ=24 bits, TX.RCS=0 */163{ CS8409_PIN_VENDOR_WIDGET, ASP2_A_TX_CTRL2, 0x2800 },164/* ASP1.A: RX.LAP=0, RX.LSZ=24 bits, RX.LCS=0 */165{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_RX_CTRL1, 0x0800 },166/* ASP1.A: RX.RAP=0, RX.RSZ=24 bits, RX.RCS=0 */167{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_RX_CTRL2, 0x0800 },168/* ASP1: LCHI = 00h */169{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL1, 0x8000 },170/* ASP1: MC/SC_SRCSEL=PLL1, LCPR=FFh */171{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL2, 0x28ff },172/* ASP1: MCEN=0, FSD=011, SCPOL_IN/OUT=0, SCDIV=1:4 */173{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL3, 0x0062 },174/* ASP2: LCHI=1Fh */175{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP2_CLK_CTRL1, 0x801f },176/* ASP2: MC/SC_SRCSEL=PLL1, LCPR=3Fh */177{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP2_CLK_CTRL2, 0x283f },178/* ASP2: 5050=1, MCEN=0, FSD=010, SCPOL_IN/OUT=1, SCDIV=1:16 */179{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP2_CLK_CTRL3, 0x805c },180/* DMIC1_MO=10b, DMIC1/2_SR=1 */181{ CS8409_PIN_VENDOR_WIDGET, CS8409_DMIC_CFG, 0x0023 },182/* ASP1/2_BEEP=0 */183{ CS8409_PIN_VENDOR_WIDGET, CS8409_BEEP_CFG, 0x0000 },184/* ASP1/2_EN=1, ASP1_STP=1 */185{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG2, 0x0062 },186/* -PLL2_EN */187{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG1, 0x9008 },188/* TX2.A: pre-scale att.=0 dB */189{ CS8409_PIN_VENDOR_WIDGET, CS8409_PRE_SCALE_ATTN2, 0x0000 },190/* ASP1/2_xxx_EN=1, ASP1/2_MCLK_EN=0, DMIC1_SCL_EN=1 */191{ CS8409_PIN_VENDOR_WIDGET, CS8409_PAD_CFG_SLW_RATE_CTRL, 0xfc03 },192/* test mode on */193{ CS8409_PIN_VENDOR_WIDGET, 0xc0, 0x9999 },194/* GPIO hysteresis = 30 us */195{ CS8409_PIN_VENDOR_WIDGET, 0xc5, 0x0000 },196/* test mode off */197{ CS8409_PIN_VENDOR_WIDGET, 0xc0, 0x0000 },198{} /* Terminator */199};200201const struct cs8409_cir_param cs8409_cs42l42_bullseye_atn[] = {202/* EQ_SEL=1, EQ1/2_EN=0 */203{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_CTRL1, 0x4000 },204/* +EQ_ACC */205{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0x4000 },206/* +EQ2_EN */207{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_CTRL1, 0x4010 },208/* EQ_DATA_HI=0x0647 */209{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0x0647 },210/* +EQ_WRT, +EQ_ACC, EQ_ADR=0, EQ_DATA_LO=0x67 */211{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc0c7 },212/* EQ_DATA_HI=0x0647 */213{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0x0647 },214/* +EQ_WRT, +EQ_ACC, EQ_ADR=1, EQ_DATA_LO=0x67 */215{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc1c7 },216/* EQ_DATA_HI=0xf370 */217{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0xf370 },218/* +EQ_WRT, +EQ_ACC, EQ_ADR=2, EQ_DATA_LO=0x71 */219{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc271 },220/* EQ_DATA_HI=0x1ef8 */221{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0x1ef8 },222/* +EQ_WRT, +EQ_ACC, EQ_ADR=3, EQ_DATA_LO=0x48 */223{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc348 },224/* EQ_DATA_HI=0xc110 */225{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0xc110 },226/* +EQ_WRT, +EQ_ACC, EQ_ADR=4, EQ_DATA_LO=0x5a */227{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc45a },228/* EQ_DATA_HI=0x1f29 */229{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0x1f29 },230/* +EQ_WRT, +EQ_ACC, EQ_ADR=5, EQ_DATA_LO=0x74 */231{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc574 },232/* EQ_DATA_HI=0x1d7a */233{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0x1d7a },234/* +EQ_WRT, +EQ_ACC, EQ_ADR=6, EQ_DATA_LO=0x53 */235{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc653 },236/* EQ_DATA_HI=0xc38c */237{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0xc38c },238/* +EQ_WRT, +EQ_ACC, EQ_ADR=7, EQ_DATA_LO=0x14 */239{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc714 },240/* EQ_DATA_HI=0x1ca3 */241{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0x1ca3 },242/* +EQ_WRT, +EQ_ACC, EQ_ADR=8, EQ_DATA_LO=0xc7 */243{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc8c7 },244/* EQ_DATA_HI=0xc38c */245{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W1, 0xc38c },246/* +EQ_WRT, +EQ_ACC, EQ_ADR=9, EQ_DATA_LO=0x14 */247{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0xc914 },248/* -EQ_ACC, -EQ_WRT */249{ CS8409_PIN_VENDOR_WIDGET, CS8409_PFE_COEF_W2, 0x0000 },250{} /* Terminator */251};252253struct sub_codec cs8409_cs42l42_codec = {254.addr = CS42L42_I2C_ADDR,255.reset_gpio = CS8409_CS42L42_RESET,256.irq_mask = CS8409_CS42L42_INT,257.init_seq = cs42l42_init_reg_seq,258.init_seq_num = ARRAY_SIZE(cs42l42_init_reg_seq),259.hp_jack_in = 0,260.mic_jack_in = 0,261.paged = 1,262.suspended = 1,263.no_type_dect = 0,264};265266/******************************************************************************267* Dolphin Specific Arrays268* CS8409/ 2 X CS42L42269******************************************************************************/270271const struct hda_verb dolphin_init_verbs[] = {272{ 0x01, AC_VERB_SET_GPIO_WAKE_MASK, DOLPHIN_WAKE }, /* WAKE from GPIO 0,4 */273{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_PROC_STATE, 0x0001 }, /* Enable VPW processing */274{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_COEF_INDEX, 0x0002 }, /* Configure GPIO 6,7 */275{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_PROC_COEF, 0x0080 }, /* I2C mode */276{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_COEF_INDEX, 0x005b }, /* Set I2C bus speed */277{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_PROC_COEF, 0x0200 }, /* 100kHz I2C_STO = 2 */278{} /* terminator */279};280281static const struct hda_pintbl dolphin_pincfgs[] = {282{ 0x24, 0x022210f0 }, /* ASP-1-TX-A */283{ 0x25, 0x010240f0 }, /* ASP-1-TX-B */284{ 0x34, 0x02a21050 }, /* ASP-1-RX */285{} /* terminator */286};287288/* Vendor specific HW configuration for CS42L42 */289static const struct cs8409_i2c_param dolphin_c0_init_reg_seq[] = {290{ CS42L42_I2C_TIMEOUT, 0xB0 },291{ CS42L42_ADC_CTL, 0x00 },292{ 0x1D02, 0x06 },293{ CS42L42_ADC_VOLUME, 0x9F },294{ CS42L42_OSC_SWITCH, 0x01 },295{ CS42L42_MCLK_CTL, 0x02 },296{ CS42L42_SRC_CTL, 0x03 },297{ CS42L42_MCLK_SRC_SEL, 0x00 },298{ CS42L42_ASP_FRM_CFG, 0x13 },299{ CS42L42_FSYNC_P_LOWER, 0xFF },300{ CS42L42_FSYNC_P_UPPER, 0x00 },301{ CS42L42_ASP_CLK_CFG, 0x20 },302{ CS42L42_SPDIF_CLK_CFG, 0x0D },303{ CS42L42_ASP_RX_DAI0_CH1_AP_RES, 0x02 },304{ CS42L42_ASP_RX_DAI0_CH1_BIT_MSB, 0x00 },305{ CS42L42_ASP_RX_DAI0_CH1_BIT_LSB, 0x00 },306{ CS42L42_ASP_RX_DAI0_CH2_AP_RES, 0x02 },307{ CS42L42_ASP_RX_DAI0_CH2_BIT_MSB, 0x00 },308{ CS42L42_ASP_RX_DAI0_CH2_BIT_LSB, 0x20 },309{ CS42L42_ASP_RX_DAI0_EN, 0x0C },310{ CS42L42_ASP_TX_CH_EN, 0x01 },311{ CS42L42_ASP_TX_CH_AP_RES, 0x02 },312{ CS42L42_ASP_TX_CH1_BIT_MSB, 0x00 },313{ CS42L42_ASP_TX_CH1_BIT_LSB, 0x00 },314{ CS42L42_ASP_TX_SZ_EN, 0x01 },315{ CS42L42_PWR_CTL1, 0x0A },316{ CS42L42_PWR_CTL2, 0x84 },317{ CS42L42_HP_CTL, 0x0D },318{ CS42L42_MIXER_CHA_VOL, 0x3F },319{ CS42L42_MIXER_CHB_VOL, 0x3F },320{ CS42L42_MIXER_ADC_VOL, 0x3f },321{ CS42L42_MIC_DET_CTL1, 0xB6 },322{ CS42L42_TIPSENSE_CTL, 0xC2 },323{ CS42L42_HS_CLAMP_DISABLE, 0x01 },324{ CS42L42_HS_SWITCH_CTL, 0xF3 },325{ CS42L42_PWR_CTL3, 0x20 },326{ CS42L42_RSENSE_CTL2, 0x00 },327{ CS42L42_RSENSE_CTL3, 0x00 },328{ CS42L42_TSENSE_CTL, 0x80 },329{ CS42L42_HS_BIAS_CTL, 0xC0 },330{ CS42L42_PWR_CTL1, 0x02, 10000 },331{ CS42L42_ADC_OVFL_INT_MASK, 0xff },332{ CS42L42_MIXER_INT_MASK, 0xff },333{ CS42L42_SRC_INT_MASK, 0xff },334{ CS42L42_ASP_RX_INT_MASK, 0xff },335{ CS42L42_ASP_TX_INT_MASK, 0xff },336{ CS42L42_CODEC_INT_MASK, 0xff },337{ CS42L42_SRCPL_INT_MASK, 0xff },338{ CS42L42_VPMON_INT_MASK, 0xff },339{ CS42L42_PLL_LOCK_INT_MASK, 0xff },340{ CS42L42_TSRS_PLUG_INT_MASK, 0xff },341{ CS42L42_DET_INT1_MASK, 0xff },342{ CS42L42_DET_INT2_MASK, 0xff }343};344345static const struct cs8409_i2c_param dolphin_c1_init_reg_seq[] = {346{ CS42L42_I2C_TIMEOUT, 0xB0 },347{ CS42L42_ADC_CTL, 0x00 },348{ 0x1D02, 0x06 },349{ CS42L42_ADC_VOLUME, 0x9F },350{ CS42L42_OSC_SWITCH, 0x01 },351{ CS42L42_MCLK_CTL, 0x02 },352{ CS42L42_SRC_CTL, 0x03 },353{ CS42L42_MCLK_SRC_SEL, 0x00 },354{ CS42L42_ASP_FRM_CFG, 0x13 },355{ CS42L42_FSYNC_P_LOWER, 0xFF },356{ CS42L42_FSYNC_P_UPPER, 0x00 },357{ CS42L42_ASP_CLK_CFG, 0x20 },358{ CS42L42_SPDIF_CLK_CFG, 0x0D },359{ CS42L42_ASP_RX_DAI0_CH1_AP_RES, 0x02 },360{ CS42L42_ASP_RX_DAI0_CH1_BIT_MSB, 0x00 },361{ CS42L42_ASP_RX_DAI0_CH1_BIT_LSB, 0x80 },362{ CS42L42_ASP_RX_DAI0_CH2_AP_RES, 0x02 },363{ CS42L42_ASP_RX_DAI0_CH2_BIT_MSB, 0x00 },364{ CS42L42_ASP_RX_DAI0_CH2_BIT_LSB, 0xA0 },365{ CS42L42_ASP_RX_DAI0_EN, 0x0C },366{ CS42L42_ASP_TX_CH_EN, 0x00 },367{ CS42L42_ASP_TX_CH_AP_RES, 0x02 },368{ CS42L42_ASP_TX_CH1_BIT_MSB, 0x00 },369{ CS42L42_ASP_TX_CH1_BIT_LSB, 0x00 },370{ CS42L42_ASP_TX_SZ_EN, 0x00 },371{ CS42L42_PWR_CTL1, 0x0E },372{ CS42L42_PWR_CTL2, 0x84 },373{ CS42L42_HP_CTL, 0x0D },374{ CS42L42_MIXER_CHA_VOL, 0x3F },375{ CS42L42_MIXER_CHB_VOL, 0x3F },376{ CS42L42_MIXER_ADC_VOL, 0x3f },377{ CS42L42_MIC_DET_CTL1, 0xB6 },378{ CS42L42_TIPSENSE_CTL, 0xC2 },379{ CS42L42_HS_CLAMP_DISABLE, 0x01 },380{ CS42L42_HS_SWITCH_CTL, 0xF3 },381{ CS42L42_PWR_CTL3, 0x20 },382{ CS42L42_RSENSE_CTL2, 0x00 },383{ CS42L42_RSENSE_CTL3, 0x00 },384{ CS42L42_TSENSE_CTL, 0x80 },385{ CS42L42_HS_BIAS_CTL, 0xC0 },386{ CS42L42_PWR_CTL1, 0x06, 10000 },387{ CS42L42_ADC_OVFL_INT_MASK, 0xff },388{ CS42L42_MIXER_INT_MASK, 0xff },389{ CS42L42_SRC_INT_MASK, 0xff },390{ CS42L42_ASP_RX_INT_MASK, 0xff },391{ CS42L42_ASP_TX_INT_MASK, 0xff },392{ CS42L42_CODEC_INT_MASK, 0xff },393{ CS42L42_SRCPL_INT_MASK, 0xff },394{ CS42L42_VPMON_INT_MASK, 0xff },395{ CS42L42_PLL_LOCK_INT_MASK, 0xff },396{ CS42L42_TSRS_PLUG_INT_MASK, 0xff },397{ CS42L42_DET_INT1_MASK, 0xff },398{ CS42L42_DET_INT2_MASK, 0xff }399};400401/* Vendor specific hw configuration for CS8409 */402const struct cs8409_cir_param dolphin_hw_cfg[] = {403/* +PLL1/2_EN, +I2C_EN */404{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG1, 0xb008 },405/* ASP1_EN=0, ASP1_STP=1 */406{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG2, 0x0002 },407/* ASP1/2_BUS_IDLE=10, +GPIO_I2C */408{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG3, 0x0a80 },409/* ASP1.A: TX.LAP=0, TX.LSZ=24 bits, TX.LCS=0 */410{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_TX_CTRL1, 0x0800 },411/* ASP1.A: TX.RAP=0, TX.RSZ=24 bits, TX.RCS=32 */412{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_TX_CTRL2, 0x0820 },413/* ASP1.B: TX.LAP=0, TX.LSZ=24 bits, TX.LCS=128 */414{ CS8409_PIN_VENDOR_WIDGET, ASP1_B_TX_CTRL1, 0x0880 },415/* ASP1.B: TX.RAP=0, TX.RSZ=24 bits, TX.RCS=160 */416{ CS8409_PIN_VENDOR_WIDGET, ASP1_B_TX_CTRL2, 0x08a0 },417/* ASP1.A: RX.LAP=0, RX.LSZ=24 bits, RX.LCS=0 */418{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_RX_CTRL1, 0x0800 },419/* ASP1.A: RX.RAP=0, RX.RSZ=24 bits, RX.RCS=0 */420{ CS8409_PIN_VENDOR_WIDGET, ASP1_A_RX_CTRL2, 0x0800 },421/* ASP1: LCHI = 00h */422{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL1, 0x8000 },423/* ASP1: MC/SC_SRCSEL=PLL1, LCPR=FFh */424{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL2, 0x28ff },425/* ASP1: MCEN=0, FSD=011, SCPOL_IN/OUT=0, SCDIV=1:4 */426{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL3, 0x0062 },427/* ASP1/2_BEEP=0 */428{ CS8409_PIN_VENDOR_WIDGET, CS8409_BEEP_CFG, 0x0000 },429/* ASP1_EN=1, ASP1_STP=1 */430{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG2, 0x0022 },431/* -PLL2_EN */432{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG1, 0x9008 },433/* ASP1_xxx_EN=1, ASP1_MCLK_EN=0 */434{ CS8409_PIN_VENDOR_WIDGET, CS8409_PAD_CFG_SLW_RATE_CTRL, 0x5400 },435/* test mode on */436{ CS8409_PIN_VENDOR_WIDGET, 0xc0, 0x9999 },437/* GPIO hysteresis = 30 us */438{ CS8409_PIN_VENDOR_WIDGET, 0xc5, 0x0000 },439/* test mode off */440{ CS8409_PIN_VENDOR_WIDGET, 0xc0, 0x0000 },441{} /* Terminator */442};443444struct sub_codec dolphin_cs42l42_0 = {445.addr = DOLPHIN_C0_I2C_ADDR,446.reset_gpio = DOLPHIN_C0_RESET,447.irq_mask = DOLPHIN_C0_INT,448.init_seq = dolphin_c0_init_reg_seq,449.init_seq_num = ARRAY_SIZE(dolphin_c0_init_reg_seq),450.hp_jack_in = 0,451.mic_jack_in = 0,452.paged = 1,453.suspended = 1,454.no_type_dect = 0,455};456457struct sub_codec dolphin_cs42l42_1 = {458.addr = DOLPHIN_C1_I2C_ADDR,459.reset_gpio = DOLPHIN_C1_RESET,460.irq_mask = DOLPHIN_C1_INT,461.init_seq = dolphin_c1_init_reg_seq,462.init_seq_num = ARRAY_SIZE(dolphin_c1_init_reg_seq),463.hp_jack_in = 0,464.mic_jack_in = 0,465.paged = 1,466.suspended = 1,467.no_type_dect = 1,468};469470/******************************************************************************471* CDB35L56-FOUR-HD Specific Arrays472******************************************************************************/473const struct hda_verb cs8409_cdb35l56_four_init_verbs[] = {474{ CS8409_PIN_VENDOR_WIDGET, AC_VERB_SET_PROC_STATE, 0x0001 }, /* Enable VPW processing */475{} /* terminator */476};477478static const struct hda_pintbl cs8409_cdb35l56_four_pincfgs[] = {479/* 0xPPLLLLLLDDDDTTTTCCCCMMMMAAAASSSS480* P = PCON: AC_JACK_PORT_*481* L = LOC: AC_JACK_LOC_*482* D = DD: device type AC_JACK_*483* T = CTYP: AC_JACK_CONN_*484* C = COL: AC_JACK_COLOR_*485* M = MISC: ?486* A = DA: AC_DEFCFG_DEF_ASSOC487* S = SEQ: Sequence number in DA group488*/489{ CS8409_PIN_ASP2_TRANSMITTER_A, 0x901000f0 }, /* ASP-2-TX */490/* "Mic" */491{ CS8409_PIN_ASP2_RECEIVER_A, 0x04a12050 }, /* ASP-2-RX */492{} /* terminator */493};494495const struct cs8409_cir_param cs8409_cdb35l56_four_hw_cfg[] = {496/* +PLL1/2_EN, +I2C_EN */497{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG1, 0xb008 },498/* ASP1/2_EN=0, ASP1_STP=1 */499{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG2, 0x0002 },500/* ASP1/2_BUS_IDLE=10, +GPIO_I2C */501{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG3, 0x0a80 },502/* ASP2.A: TX.LAP=0, TX.LSZ=24 bits, TX.LCS=0 */503{ CS8409_PIN_VENDOR_WIDGET, ASP2_A_TX_CTRL1, 0x0800 },504/* ASP2.A: TX.RAP=1, TX.RSZ=24 bits, TX.RCS=0 */505{ CS8409_PIN_VENDOR_WIDGET, ASP2_A_TX_CTRL2, 0x2800 },506/* ASP2.A: RX.LAP=0, RX.LSZ=24 bits, RX.LCS=0 */507{ CS8409_PIN_VENDOR_WIDGET, ASP2_A_RX_CTRL1, 0x0800 },508/* ASP2.A: RX.RAP=1, RX.RSZ=24 bits, RX.RCS=0 */509{ CS8409_PIN_VENDOR_WIDGET, ASP2_A_RX_CTRL2, 0x2800 },510/* ASP1: LCHI = 00h */511{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL1, 0x8000 },512/* ASP1: MC/SC_SRCSEL=PLL1, LCPR=FFh */513{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL2, 0x28ff },514/* ASP1: MCEN=0, FSD=011, SCPOL_IN/OUT=0, SCDIV=1:4 */515{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP1_CLK_CTRL3, 0x0062 },516/* ASP2: LCHI=1Fh */517{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP2_CLK_CTRL1, 0x801f },518/* ASP2: MC/SC_SRCSEL=PLL1, LCPR=3Fh */519{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP2_CLK_CTRL2, 0x283f },520/* ASP2: 5050=1, MCEN=0, FSD=010, SCPOL_IN/OUT=1, SCDIV=1:16 */521{ CS8409_PIN_VENDOR_WIDGET, CS8409_ASP2_CLK_CTRL3, 0x805c },522/* ASP1/2_BEEP=0 */523{ CS8409_PIN_VENDOR_WIDGET, CS8409_BEEP_CFG, 0x0000 },524/* ASP1/2_EN=1, ASP1_STP=1 */525{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG2, 0x0062 },526/* -PLL2_EN */527{ CS8409_PIN_VENDOR_WIDGET, CS8409_DEV_CFG1, 0x9008 }, /* TX2.A: pre-scale att.=0 dB */528{ CS8409_PIN_VENDOR_WIDGET, CS8409_PRE_SCALE_ATTN2, 0x0000 },529/* ASP1/2_xxx_EN=1, ASP1/2_MCLK_EN=0, DMIC1_SCL_EN=1 */530{ CS8409_PIN_VENDOR_WIDGET, CS8409_PAD_CFG_SLW_RATE_CTRL, 0xfc03 },531{} /* Terminator */532};533534/******************************************************************************535* CS8409 Patch Driver Structs536* Arrays Used for all projects using CS8409537******************************************************************************/538539const struct hda_quirk cs8409_fixup_tbl[] = {540SND_PCI_QUIRK(0x1028, 0x0A11, "Bullseye", CS8409_BULLSEYE),541SND_PCI_QUIRK(0x1028, 0x0A12, "Bullseye", CS8409_BULLSEYE),542SND_PCI_QUIRK(0x1028, 0x0A23, "Bullseye", CS8409_BULLSEYE),543SND_PCI_QUIRK(0x1028, 0x0A24, "Bullseye", CS8409_BULLSEYE),544SND_PCI_QUIRK(0x1028, 0x0A25, "Bullseye", CS8409_BULLSEYE),545SND_PCI_QUIRK(0x1028, 0x0A29, "Bullseye", CS8409_BULLSEYE),546SND_PCI_QUIRK(0x1028, 0x0A2A, "Bullseye", CS8409_BULLSEYE),547SND_PCI_QUIRK(0x1028, 0x0A2B, "Bullseye", CS8409_BULLSEYE),548SND_PCI_QUIRK(0x1028, 0x0A77, "Cyborg", CS8409_CYBORG),549SND_PCI_QUIRK(0x1028, 0x0A78, "Cyborg", CS8409_CYBORG),550SND_PCI_QUIRK(0x1028, 0x0A79, "Cyborg", CS8409_CYBORG),551SND_PCI_QUIRK(0x1028, 0x0A7A, "Cyborg", CS8409_CYBORG),552SND_PCI_QUIRK(0x1028, 0x0A7D, "Cyborg", CS8409_CYBORG),553SND_PCI_QUIRK(0x1028, 0x0A7E, "Cyborg", CS8409_CYBORG),554SND_PCI_QUIRK(0x1028, 0x0A7F, "Cyborg", CS8409_CYBORG),555SND_PCI_QUIRK(0x1028, 0x0A80, "Cyborg", CS8409_CYBORG),556SND_PCI_QUIRK(0x1028, 0x0AB0, "Warlock", CS8409_WARLOCK),557SND_PCI_QUIRK(0x1028, 0x0AB2, "Warlock", CS8409_WARLOCK),558SND_PCI_QUIRK(0x1028, 0x0AB1, "Warlock", CS8409_WARLOCK),559SND_PCI_QUIRK(0x1028, 0x0AB3, "Warlock", CS8409_WARLOCK),560SND_PCI_QUIRK(0x1028, 0x0AB4, "Warlock", CS8409_WARLOCK),561SND_PCI_QUIRK(0x1028, 0x0AB5, "Warlock", CS8409_WARLOCK),562SND_PCI_QUIRK(0x1028, 0x0ACF, "Dolphin", CS8409_DOLPHIN),563SND_PCI_QUIRK(0x1028, 0x0AD0, "Dolphin", CS8409_DOLPHIN),564SND_PCI_QUIRK(0x1028, 0x0AD1, "Dolphin", CS8409_DOLPHIN),565SND_PCI_QUIRK(0x1028, 0x0AD2, "Dolphin", CS8409_DOLPHIN),566SND_PCI_QUIRK(0x1028, 0x0AD3, "Dolphin", CS8409_DOLPHIN),567SND_PCI_QUIRK(0x1028, 0x0AD9, "Warlock", CS8409_WARLOCK),568SND_PCI_QUIRK(0x1028, 0x0ADA, "Warlock", CS8409_WARLOCK),569SND_PCI_QUIRK(0x1028, 0x0ADB, "Warlock", CS8409_WARLOCK),570SND_PCI_QUIRK(0x1028, 0x0ADC, "Warlock", CS8409_WARLOCK),571SND_PCI_QUIRK(0x1028, 0x0ADF, "Cyborg", CS8409_CYBORG),572SND_PCI_QUIRK(0x1028, 0x0AE0, "Cyborg", CS8409_CYBORG),573SND_PCI_QUIRK(0x1028, 0x0AE1, "Cyborg", CS8409_CYBORG),574SND_PCI_QUIRK(0x1028, 0x0AE2, "Cyborg", CS8409_CYBORG),575SND_PCI_QUIRK(0x1028, 0x0AE9, "Cyborg", CS8409_CYBORG),576SND_PCI_QUIRK(0x1028, 0x0AEA, "Cyborg", CS8409_CYBORG),577SND_PCI_QUIRK(0x1028, 0x0AEB, "Cyborg", CS8409_CYBORG),578SND_PCI_QUIRK(0x1028, 0x0AEC, "Cyborg", CS8409_CYBORG),579SND_PCI_QUIRK(0x1028, 0x0AED, "Cyborg", CS8409_CYBORG),580SND_PCI_QUIRK(0x1028, 0x0AEE, "Cyborg", CS8409_CYBORG),581SND_PCI_QUIRK(0x1028, 0x0AEF, "Cyborg", CS8409_CYBORG),582SND_PCI_QUIRK(0x1028, 0x0AF0, "Cyborg", CS8409_CYBORG),583SND_PCI_QUIRK(0x1028, 0x0AF4, "Warlock", CS8409_WARLOCK),584SND_PCI_QUIRK(0x1028, 0x0AF5, "Warlock", CS8409_WARLOCK),585SND_PCI_QUIRK(0x1028, 0x0B92, "Warlock MLK", CS8409_WARLOCK_MLK),586SND_PCI_QUIRK(0x1028, 0x0B93, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),587SND_PCI_QUIRK(0x1028, 0x0B94, "Warlock MLK", CS8409_WARLOCK_MLK),588SND_PCI_QUIRK(0x1028, 0x0B95, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),589SND_PCI_QUIRK(0x1028, 0x0B96, "Warlock MLK", CS8409_WARLOCK_MLK),590SND_PCI_QUIRK(0x1028, 0x0B97, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),591SND_PCI_QUIRK(0x1028, 0x0BA5, "Odin", CS8409_ODIN),592SND_PCI_QUIRK(0x1028, 0x0BA6, "Odin", CS8409_ODIN),593SND_PCI_QUIRK(0x1028, 0x0BA8, "Odin", CS8409_ODIN),594SND_PCI_QUIRK(0x1028, 0x0BAA, "Odin", CS8409_ODIN),595SND_PCI_QUIRK(0x1028, 0x0BAE, "Odin", CS8409_ODIN),596SND_PCI_QUIRK(0x1028, 0x0BB2, "Warlock MLK", CS8409_WARLOCK_MLK),597SND_PCI_QUIRK(0x1028, 0x0BB3, "Warlock MLK", CS8409_WARLOCK_MLK),598SND_PCI_QUIRK(0x1028, 0x0BB4, "Warlock MLK", CS8409_WARLOCK_MLK),599SND_PCI_QUIRK(0x1028, 0x0BB5, "Warlock N3 15 TGL-U Nuvoton EC", CS8409_WARLOCK),600SND_PCI_QUIRK(0x1028, 0x0BB6, "Warlock V3 15 TGL-U Nuvoton EC", CS8409_WARLOCK),601SND_PCI_QUIRK(0x1028, 0x0BB8, "Warlock MLK", CS8409_WARLOCK_MLK),602SND_PCI_QUIRK(0x1028, 0x0BB9, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),603SND_PCI_QUIRK(0x1028, 0x0BBA, "Warlock MLK", CS8409_WARLOCK_MLK),604SND_PCI_QUIRK(0x1028, 0x0BBB, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),605SND_PCI_QUIRK(0x1028, 0x0BBC, "Warlock MLK", CS8409_WARLOCK_MLK),606SND_PCI_QUIRK(0x1028, 0x0BBD, "Warlock MLK Dual Mic", CS8409_WARLOCK_MLK_DUAL_MIC),607SND_PCI_QUIRK(0x1028, 0x0BD4, "Dolphin", CS8409_DOLPHIN),608SND_PCI_QUIRK(0x1028, 0x0BD5, "Dolphin", CS8409_DOLPHIN),609SND_PCI_QUIRK(0x1028, 0x0BD6, "Dolphin", CS8409_DOLPHIN),610SND_PCI_QUIRK(0x1028, 0x0BD7, "Dolphin", CS8409_DOLPHIN),611SND_PCI_QUIRK(0x1028, 0x0BD8, "Dolphin", CS8409_DOLPHIN),612SND_PCI_QUIRK(0x1028, 0x0C43, "Dolphin", CS8409_DOLPHIN),613SND_PCI_QUIRK(0x1028, 0x0C50, "Dolphin", CS8409_DOLPHIN),614SND_PCI_QUIRK(0x1028, 0x0C51, "Dolphin", CS8409_DOLPHIN),615SND_PCI_QUIRK(0x1028, 0x0C52, "Dolphin", CS8409_DOLPHIN),616SND_PCI_QUIRK(0x1028, 0x0C73, "Dolphin", CS8409_DOLPHIN),617SND_PCI_QUIRK(0x1028, 0x0C75, "Dolphin", CS8409_DOLPHIN),618SND_PCI_QUIRK(0x1028, 0x0C7D, "Dolphin", CS8409_DOLPHIN),619SND_PCI_QUIRK(0x1028, 0x0C7F, "Dolphin", CS8409_DOLPHIN),620{} /* terminator */621};622623const struct hda_model_fixup cs8409_models[] = {624{ .id = CS8409_BULLSEYE, .name = "bullseye" },625{ .id = CS8409_WARLOCK, .name = "warlock" },626{ .id = CS8409_WARLOCK_MLK, .name = "warlock mlk" },627{ .id = CS8409_WARLOCK_MLK_DUAL_MIC, .name = "warlock mlk dual mic" },628{ .id = CS8409_CYBORG, .name = "cyborg" },629{ .id = CS8409_DOLPHIN, .name = "dolphin" },630{ .id = CS8409_ODIN, .name = "odin" },631{ .id = CS8409_CDB35L56_FOUR_HD, .name = "CDB35L56-FOUR-HD" },632{}633};634635const struct hda_fixup cs8409_fixups[] = {636[CS8409_BULLSEYE] = {637.type = HDA_FIXUP_PINS,638.v.pins = cs8409_cs42l42_pincfgs,639.chained = true,640.chain_id = CS8409_FIXUPS,641},642[CS8409_WARLOCK] = {643.type = HDA_FIXUP_PINS,644.v.pins = cs8409_cs42l42_pincfgs,645.chained = true,646.chain_id = CS8409_FIXUPS,647},648[CS8409_WARLOCK_MLK] = {649.type = HDA_FIXUP_PINS,650.v.pins = cs8409_cs42l42_pincfgs,651.chained = true,652.chain_id = CS8409_FIXUPS,653},654[CS8409_WARLOCK_MLK_DUAL_MIC] = {655.type = HDA_FIXUP_PINS,656.v.pins = cs8409_cs42l42_pincfgs,657.chained = true,658.chain_id = CS8409_FIXUPS,659},660[CS8409_CYBORG] = {661.type = HDA_FIXUP_PINS,662.v.pins = cs8409_cs42l42_pincfgs,663.chained = true,664.chain_id = CS8409_FIXUPS,665},666[CS8409_FIXUPS] = {667.type = HDA_FIXUP_FUNC,668.v.func = cs8409_cs42l42_fixups,669},670[CS8409_DOLPHIN] = {671.type = HDA_FIXUP_PINS,672.v.pins = dolphin_pincfgs,673.chained = true,674.chain_id = CS8409_DOLPHIN_FIXUPS,675},676[CS8409_DOLPHIN_FIXUPS] = {677.type = HDA_FIXUP_FUNC,678.v.func = dolphin_fixups,679},680[CS8409_ODIN] = {681.type = HDA_FIXUP_PINS,682.v.pins = cs8409_cs42l42_pincfgs_no_dmic,683.chained = true,684.chain_id = CS8409_FIXUPS,685},686[CS8409_CDB35L56_FOUR_HD] = {687.type = HDA_FIXUP_PINS,688.v.pins = cs8409_cdb35l56_four_pincfgs,689.chained = true,690.chain_id = CS8409_CDB35L56_FOUR_HD_FIXUP,691},692[CS8409_CDB35L56_FOUR_HD_FIXUP] = {693.type = HDA_FIXUP_FUNC,694.v.func = cs8409_cdb35l56_four_autodet_fixup,695},696};697698699