diff --git a/Documentation/devicetree/bindings/sound/fsa8500.txt b/Documentation/devicetree/bindings/sound/fsa8500.txt
index 427a46f75e40d8a380cb217750e7d3927efe1912..9454c33bca59c1822619dc232d977f4660a3423a 100644
--- a/Documentation/devicetree/bindings/sound/fsa8500.txt
+++ b/Documentation/devicetree/bindings/sound/fsa8500.txt
@@ -8,12 +8,11 @@ Required properties:
 -compatible		: should be "fairchild,fsa8500".
 -reg			: i2c address to be used.
 -gpios			: Interrupt GPIO
--hs_det_vdd-supply	: regulator to power the chip.
--hs_det_micvdd-supply	: regulator to power the mic bias.
 -fsa8500-init-regs	: initial registers settings
 
 Optional properties:
 
+-hs_det_vdd-supply	: regulator to power the chip.
 -fsa8500-always-on-micbias: Keep bias always on.
 -fsa8500-keymap         : headset keys code map.
 			  Default :1-BTN with key code 0xE2 - KEY_MEDIA
@@ -25,8 +24,6 @@ Example:
 		compatible = "fairchild,fsa8500";
 		reg = <0x23>;
 		gpios = <&msmgpio 9 0x0>;
-		hs_det_vdd-supply = <&pma8084_lvs2>;
-		hs_det_micvdd-supply = <&pma8084_l18>;
 		fsa8500-init-regs = <0x0C 0xA1>,
 				    <0x0F 0xF9>;
 				/* SND_JACK_BTN_0 - KEY_MEDIA */
diff --git a/sound/soc/codecs/fsa8500.c b/sound/soc/codecs/fsa8500.c
index 2853d8c7925fb17e73caa2d50a40537e539803e0..d4649203644a0878f04ecd21bb0c911bab7eb95e 100644
--- a/sound/soc/codecs/fsa8500.c
+++ b/sound/soc/codecs/fsa8500.c
@@ -56,7 +56,6 @@
 				SND_JACK_BTN_4 | SND_JACK_BTN_5 | \
 				SND_JACK_BTN_6 | SND_JACK_BTN_7)
 
-#define VDD_UA_ON_LOAD	10000
 #define	SND_JACK_BTN_SHIFT	20
 
 static struct snd_soc_jack hs_jack;
@@ -66,7 +65,6 @@ static struct i2c_client *fsa8500_client;
 
 struct fsa8500_data {
 	struct regulator *vdd;
-	struct regulator *micvdd;
 	int gpio_irq;
 	int gpio;
 	struct snd_soc_jack *hs_jack;
@@ -598,20 +596,12 @@ int fsa8500_hs_detect(struct snd_soc_codec *codec)
 
 	mutex_lock(&fsa8500->lock);
 
-	if (!fsa8500->inserted) {
-		ret = regulator_set_optimum_mode(fsa8500->vdd,
-							VDD_UA_ON_LOAD);
-		if (ret < 0)
-			pr_err("%s: failed to set optimum mode\n", __func__);
-		}
 
 	/* if something is plugged in, the irq has been triggered,
 	   the status regs were readed and cleared.
 	   Just report stored value */
 
 	ret = fsa8500_report_hs(fsa8500);
-	if (!fsa8500->inserted)
-		regulator_set_optimum_mode(fsa8500->vdd, 0);
 
 	mutex_unlock(&fsa8500->lock);
 
@@ -816,31 +806,14 @@ static int fsa8500_probe(struct i2c_client *client,
 
 	/* enable regulators */
 	fsa8500->vdd = regulator_get(&client->dev, "hs_det_vdd");
-	if (IS_ERR(fsa8500->vdd)) {
-		pr_err("%s: Error getting vdd regulator.\n", __func__);
-		err = PTR_ERR(fsa8500->vdd);
-		goto reg_get_vdd;
-	}
-
-	regulator_set_voltage(fsa8500->vdd, 1800000, 1800000);
-	err = regulator_enable(fsa8500->vdd);
-	if (err < 0) {
-		pr_err("%s: Error enabling vdd regulator.\n", __func__);
-		goto reg_enable_vdd_fail;
-	}
-
-	fsa8500->micvdd = regulator_get(&client->dev, "hs_det_micvdd");
-	if (IS_ERR(fsa8500->micvdd)) {
-		pr_err("%s: Error getting micvdd regulator.\n", __func__);
-		err = PTR_ERR(fsa8500->micvdd);
-		goto reg_get_micvdd;
-	}
-
-	regulator_set_voltage(fsa8500->micvdd, 2850000, 2850000);
-	err = regulator_enable(fsa8500->micvdd);
-	if (err < 0) {
-		pr_err("%s: Error enabling micvdd regulator.\n", __func__);
-		goto reg_enable_micvdd_fail;
+	if (IS_ERR(fsa8500->vdd))
+		pr_warn("%s: Can't get vdd regulator.\n", __func__);
+	else {
+		err = regulator_enable(fsa8500->vdd);
+		if (err < 0) {
+			pr_err("%s: Error enabling vdd regulator.\n", __func__);
+			goto reg_enable_vdd_fail;
+		}
 	}
 
 	wake_lock_init(&fsa8500->wake_lock, WAKE_LOCK_SUSPEND, "hs_det");
@@ -879,13 +852,11 @@ irq_fail:
 	wake_lock_destroy(&fsa8500->wake_lock);
 	destroy_workqueue(fsa8500->wq);
 wq_fail:
-reg_enable_micvdd_fail:
-	regulator_put(fsa8500->micvdd);
-reg_get_micvdd:
-	regulator_disable(fsa8500->vdd);
+	if (!IS_ERR_OR_NULL(fsa8500->vdd))
+		regulator_disable(fsa8500->vdd);
 reg_enable_vdd_fail:
-	regulator_put(fsa8500->vdd);
-reg_get_vdd:
+	if (!IS_ERR_OR_NULL(fsa8500->vdd))
+		regulator_put(fsa8500->vdd);
 	gpio_free(fsa8500->gpio);
 gpio_init_fail:
 	kfree(fsa8500);
@@ -896,11 +867,10 @@ gpio_init_fail:
 static int fsa8500_remove(struct i2c_client *client)
 {
 	struct fsa8500_data *fsa8500 = i2c_get_clientdata(client);
-	regulator_set_optimum_mode(fsa8500->vdd, 0);
-	regulator_disable(fsa8500->vdd);
-	regulator_put(fsa8500->vdd);
-	regulator_disable(fsa8500->micvdd);
-	regulator_put(fsa8500->micvdd);
+	if (!IS_ERR_OR_NULL(fsa8500->vdd)) {
+		regulator_disable(fsa8500->vdd);
+		regulator_put(fsa8500->vdd);
+	}
 	gpio_free(fsa8500->gpio);
 	wake_lock_destroy(&fsa8500->wake_lock);
 	destroy_workqueue(fsa8500->wq);