SOC_DOUBLE_TLV("DAC1 Playback Volume", RT5640_DAC1_DIG_VOL,
                        RT5640_L_VOL_SFT, RT5640_R_VOL_SFT,
                        175, 0, dac_vol_tlv),
-       /* IN1/IN2 Control */
+       /* IN1/IN2/IN3 Control */
        SOC_SINGLE_TLV("IN1 Boost", RT5640_IN1_IN2,
                RT5640_BST_SFT1, 8, 0, bst_tlv),
        SOC_SINGLE_TLV("IN2 Boost", RT5640_IN3_IN4,
                RT5640_BST_SFT2, 8, 0, bst_tlv),
+       SOC_SINGLE_TLV("IN3 Boost", RT5640_IN1_IN2,
+               RT5640_BST_SFT2, 8, 0, bst_tlv),
+
        /* INL/INR Volume Control */
        SOC_DOUBLE_TLV("IN Capture Volume", RT5640_INL_INR_VOL,
                        RT5640_INL_VOL_SFT, RT5640_INR_VOL_SFT,
                        RT5640_M_HP_L_RM_L_SFT, 1, 1),
        SOC_DAPM_SINGLE("INL Switch", RT5640_REC_L2_MIXER,
                        RT5640_M_IN_L_RM_L_SFT, 1, 1),
+       SOC_DAPM_SINGLE("BST3 Switch", RT5640_REC_L2_MIXER,
+                       RT5640_M_BST2_RM_L_SFT, 1, 1),
        SOC_DAPM_SINGLE("BST2 Switch", RT5640_REC_L2_MIXER,
                        RT5640_M_BST4_RM_L_SFT, 1, 1),
        SOC_DAPM_SINGLE("BST1 Switch", RT5640_REC_L2_MIXER,
                        RT5640_M_HP_R_RM_R_SFT, 1, 1),
        SOC_DAPM_SINGLE("INR Switch", RT5640_REC_R2_MIXER,
                        RT5640_M_IN_R_RM_R_SFT, 1, 1),
+       SOC_DAPM_SINGLE("BST3 Switch", RT5640_REC_R2_MIXER,
+                       RT5640_M_BST2_RM_R_SFT, 1, 1),
        SOC_DAPM_SINGLE("BST2 Switch", RT5640_REC_R2_MIXER,
                        RT5640_M_BST4_RM_R_SFT, 1, 1),
        SOC_DAPM_SINGLE("BST1 Switch", RT5640_REC_R2_MIXER,
        SND_SOC_DAPM_INPUT("IN1N"),
        SND_SOC_DAPM_INPUT("IN2P"),
        SND_SOC_DAPM_INPUT("IN2N"),
+       SND_SOC_DAPM_INPUT("IN3P"),
+       SND_SOC_DAPM_INPUT("IN3N"),
        SND_SOC_DAPM_PGA("DMIC L1", SND_SOC_NOPM, 0, 0, NULL, 0),
        SND_SOC_DAPM_PGA("DMIC R1", SND_SOC_NOPM, 0, 0, NULL, 0),
        SND_SOC_DAPM_PGA("DMIC L2", SND_SOC_NOPM, 0, 0, NULL, 0),
                RT5640_PWR_BST1_BIT, 0, NULL, 0),
        SND_SOC_DAPM_PGA("BST2", RT5640_PWR_ANLG2,
                RT5640_PWR_BST4_BIT, 0, NULL, 0),
+       SND_SOC_DAPM_PGA("BST3", RT5640_PWR_ANLG2,
+               RT5640_PWR_BST2_BIT, 0, NULL, 0),
        /* Input Volume */
        SND_SOC_DAPM_PGA("INL VOL", RT5640_PWR_VOL,
                RT5640_PWR_IN_L_BIT, 0, NULL, 0),
 static const struct snd_soc_dapm_route rt5640_dapm_routes[] = {
        {"IN1P", NULL, "LDO2"},
        {"IN2P", NULL, "LDO2"},
+       {"IN3P", NULL, "LDO2"},
 
        {"DMIC L1", NULL, "DMIC1"},
        {"DMIC R1", NULL, "DMIC1"},
        {"BST1", NULL, "IN1N"},
        {"BST2", NULL, "IN2P"},
        {"BST2", NULL, "IN2N"},
+       {"BST3", NULL, "IN3P"},
+       {"BST3", NULL, "IN3N"},
 
        {"INL VOL", NULL, "IN2P"},
        {"INR VOL", NULL, "IN2N"},
 
        {"RECMIXL", "HPOL Switch", "HPOL"},
        {"RECMIXL", "INL Switch", "INL VOL"},
+       {"RECMIXL", "BST3 Switch", "BST3"},
        {"RECMIXL", "BST2 Switch", "BST2"},
        {"RECMIXL", "BST1 Switch", "BST1"},
        {"RECMIXL", "OUT MIXL Switch", "OUT MIXL"},
 
        {"RECMIXR", "HPOR Switch", "HPOR"},
        {"RECMIXR", "INR Switch", "INR VOL"},
+       {"RECMIXR", "BST3 Switch", "BST3"},
        {"RECMIXR", "BST2 Switch", "BST2"},
        {"RECMIXR", "BST1 Switch", "BST1"},
        {"RECMIXR", "OUT MIXR Switch", "OUT MIXR"},
                regmap_update_bits(rt5640->regmap, RT5640_IN3_IN4,
                                        RT5640_IN_DF2, RT5640_IN_DF2);
 
+       if (rt5640->pdata.in3_diff)
+               regmap_update_bits(rt5640->regmap, RT5640_IN1_IN2,
+                                       RT5640_IN_DF2, RT5640_IN_DF2);
+
        rt5640->hp_mute = 1;
 
        return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5640,