diff --git a/sound/soc/codecs/wm5100.c b/sound/soc/codecs/wm5100.c
index 02c011d7512e307ecd4218e0470b8fa2339d077a..5d88c99aaea6e04ea0eaf2980227cff87be96f11 100644
--- a/sound/soc/codecs/wm5100.c
+++ b/sound/soc/codecs/wm5100.c
@@ -2132,6 +2132,9 @@ static void wm5100_set_detect_mode(struct snd_soc_codec *codec, int the_mode)
 			    WM5100_ACCDET_SRC,
 			    (mode->bias << WM5100_ACCDET_BIAS_SRC_SHIFT) |
 			    mode->micd_src << WM5100_ACCDET_SRC_SHIFT);
+	snd_soc_update_bits(codec, WM5100_MISC_CONTROL,
+			    WM5100_HPCOM_SRC,
+			    mode->micd_src << WM5100_HPCOM_SRC_SHIFT);
 
 	wm5100->jack_mode = the_mode;
 
diff --git a/sound/soc/codecs/wm5100.h b/sound/soc/codecs/wm5100.h
index fa32b12463732f414ad5611a52cbc2cd6e7541ea..970759636bdc508b10603aa7fd8da6765043ad7c 100644
--- a/sound/soc/codecs/wm5100.h
+++ b/sound/soc/codecs/wm5100.h
@@ -96,6 +96,7 @@ int wm5100_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack);
 #define WM5100_MIC_DETECT_1                     0x290
 #define WM5100_MIC_DETECT_2                     0x291
 #define WM5100_MIC_DETECT_3                     0x292
+#define WM5100_MISC_CONTROL                     0x2BB
 #define WM5100_INPUT_ENABLES                    0x301
 #define WM5100_INPUT_ENABLES_STATUS             0x302
 #define WM5100_IN1L_CONTROL                     0x310
@@ -1388,6 +1389,12 @@ int wm5100_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack);
 #define WM5100_ACCDET_STS_SHIFT                      0  /* ACCDET_STS */
 #define WM5100_ACCDET_STS_WIDTH                      1  /* ACCDET_STS */
 
+/*
+ * R699 (0x2BB) - Misc Control
+ */
+#define WM5100_HPCOM_SRC                         0x200  /* HPCOM_SRC */
+#define WM5100_HPCOM_SRC_SHIFT                       9  /* HPCOM_SRC */
+
 /*
  * R769 (0x301) - Input Enables
  */