Index: linux-2.6.17/sound/soc/codecs/wm8731.c
===================================================================
--- linux-2.6.17.orig/sound/soc/codecs/wm8731.c	2006-07-04 14:06:21.000000000 +0100
+++ linux-2.6.17/sound/soc/codecs/wm8731.c	2006-07-04 17:58:34.000000000 +0100
@@ -219,7 +219,7 @@
 SOC_DOUBLE_R("Line Capture Switch", WM8731_LINVOL, WM8731_RINVOL, 7, 1, 1),
 
 SOC_SINGLE("Mic Boost (+20dB)", WM8731_APANA, 0, 1, 0),
-SOC_SINGLE("Capture Mic Switch", WM8731_APANA, 1, 1, 0),
+SOC_SINGLE("Capture Mic Switch", WM8731_APANA, 1, 1, 1),
 
 SOC_SINGLE("Sidetone Playback Volume", WM8731_APANA, 6, 3, 1),
 
@@ -262,7 +262,7 @@
 SND_SOC_DAPM_OUTPUT("LOUT"),
 SND_SOC_DAPM_OUTPUT("LHPOUT"),
 SND_SOC_DAPM_OUTPUT("ROUT"),
-SND_SOC_DAPM_OUTPUT("LRHPOUT"),
+SND_SOC_DAPM_OUTPUT("RHPOUT"),
 SND_SOC_DAPM_ADC("ADC", "HiFi Capture", WM8731_PWR, 2, 1, NULL, 0),
 SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &wm8731_input_mux_controls),
 SND_SOC_DAPM_PGA("Line Input", WM8731_PWR, 0, 1, NULL, 0),
Index: linux-2.6.17/sound/soc/pxa/corgi.c
===================================================================
--- linux-2.6.17.orig/sound/soc/pxa/corgi.c	2006-07-04 17:41:17.000000000 +0100
+++ linux-2.6.17/sound/soc/pxa/corgi.c	2006-07-04 18:01:43.000000000 +0100
@@ -64,15 +64,26 @@
 	switch(corgi_jack_func) {
 	case CORGI_HP:
 		hp = 1;
+	        /* set = unmute headphone */
+		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
+		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
 		break;
 	case CORGI_MIC:
 		mic = 1;
+	        /* reset = mute headphone */
+		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
+		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
 		break;
 	case CORGI_LINE:
 		line = 1;
+		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
+		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
 		break;
 	case CORGI_HEADSET:
 		hs = 1;
+                mic = 1;
+		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
+		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
 		break;
 	}
 
@@ -133,19 +144,6 @@
 	return 0;
 }
 
-/* corgi dapm event handlers */
-static int corgi_hp_event(struct snd_soc_dapm_widget* w, int power)
-{
-	if (power){
-		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-	} else {
-		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-	}
-	return 0;
-}
-
 static int corgi_amp_event(struct snd_soc_dapm_widget* w, int power)
 {
 	if (power)
@@ -166,28 +164,13 @@
 	return 0;
 }
 
-static int corgi_hs_event(struct snd_soc_dapm_widget* w, int power)
-{
-	if (power){
-		/* RP - I may have the L/R reset/set around the wrong way */
-		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
-	} else {
-		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_L);
-		set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MUTE_R);
-		reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_MIC_BIAS);
-	}
-	return 0;
-}
-
 /* corgi machine dapm widgets */
 static const struct snd_soc_dapm_widget wm8731_dapm_widgets[] = {
-SND_SOC_DAPM_HP("Headphone Jack", corgi_hp_event),
+SND_SOC_DAPM_HP("Headphone Jack", NULL),
 SND_SOC_DAPM_MIC("Mic Jack", corgi_mic_event),
 SND_SOC_DAPM_SPK("Ext Spk", corgi_amp_event),
 SND_SOC_DAPM_LINE("Line Jack", NULL),
-SND_SOC_DAPM_HP("Headset Jack", corgi_hs_event),
+SND_SOC_DAPM_HP("Headset Jack", NULL),
 };
 
 /* Corgi machine interconnections to the codec pins */
@@ -195,7 +178,6 @@
 
 	/* headset Jack  - in = micin, out = LHPOUT*/
 	{"Headset Jack", NULL, "LHPOUT"},
-	{"Headset Jack", NULL, "MICIN"},
 
 	/* headphone connected to LHPOUT1, RHPOUT1 */
 	{"Headphone Jack", NULL, "LHPOUT"},
@@ -205,12 +187,11 @@
 	{"Ext Spk", NULL, "ROUT"},
 	{"Ext Spk", NULL, "LOUT"},
 
-	/* mic is connected to Mic Jack, capture left ADC only */
+	/* mic is connected to MICIN (via right channel of headphone jack) */
 	{"MICIN", NULL, "Mic Jack"},
 
-	/* we suspect line is connected to LLINEIN & RLINEIN - no bias */
-	{"LLINEIN", NULL, "Line Jack"},
-	{"RLINEIN", NULL, "Line Jack"},
+	/* Same as the above but no mic bias for line signals */
+	{"MICIN", NULL, "Line Jack"},
 
 	{NULL, NULL, NULL},
 };
@@ -234,6 +215,7 @@
 {
 	int i, err;
 
+	snd_soc_dapm_set_endpoint(codec, "LLINEIN", 0);
 	snd_soc_dapm_set_endpoint(codec, "RLINEIN", 0);
 
 	/* Add corgi specific controls */
Index: linux-2.6.17/sound/soc/pxa/spitz.c
===================================================================
--- linux-2.6.17.orig/sound/soc/pxa/spitz.c	2006-07-04 14:06:21.000000000 +0100
+++ linux-2.6.17/sound/soc/pxa/spitz.c	2006-07-04 17:44:47.000000000 +0100
@@ -68,7 +68,7 @@
 	switch(spitz_jack_func) {
 	case SPITZ_HP:
 		/* enable and unmute hp jack, disable mic bias */
-		snd_soc_dapm_set_endpoint(codec, "Headset Headphone Jack", 0);
+		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1);
@@ -78,7 +78,7 @@
 	case SPITZ_MIC:
 		/* enable mic jack and bias, mute hp */
 		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-		snd_soc_dapm_set_endpoint(codec, "Headset Headphone Jack", 0);
+		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
 		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
@@ -87,7 +87,7 @@
 	case SPITZ_LINE:
 		/* enable line jack, disable mic bias and mute hp */
 		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-		snd_soc_dapm_set_endpoint(codec, "Headset Headphone Jack", 0);
+		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Line Jack", 1);
 		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
@@ -98,7 +98,7 @@
 		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
 		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-		snd_soc_dapm_set_endpoint(codec, "Headset Headphone Jack", 1);
+		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 1);
 		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
 		set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
 		break;
@@ -106,7 +106,7 @@
 
 		/* jack removed, everything off */
 		snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-		snd_soc_dapm_set_endpoint(codec, "Headset Headphone Jack", 0);
+		snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
 		snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
 		reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
@@ -184,7 +184,7 @@
 	SND_SOC_DAPM_LINE("Line Jack", NULL),
 
 	/* headset is a mic and mono headphone */
-	SND_SOC_DAPM_HP("Headset Headphone Jack", NULL),
+	SND_SOC_DAPM_HP("Headset Jack", NULL),
 };
 
 /* Spitz machine audio interconnections */
@@ -195,7 +195,7 @@
 	{"Headphone Jack", NULL, "ROUT1"},
 
 	/* headset connected to ROUT1 and LINPUT1 with bias (def below) */
-	{"Headset Headphone Jack", NULL, "ROUT1"},
+	{"Headset Jack", NULL, "ROUT1"},
 
 	/* ext speaker connected to LOUT2, ROUT2  */
 	{"Ext Spk", NULL , "ROUT2"},
@@ -325,10 +325,8 @@
 	pxa_gpio_mode(SPITZ_GPIO_AK_INT | GPIO_IN);
 
 	spitz_snd_device = platform_device_alloc("soc-audio", -1);
-	if (!spitz_snd_device) {
-		free_irq(SPITZ_IRQ_GPIO_AK_INT, spitz_snd_device);
+	if (!spitz_snd_device)
 		return -ENOMEM;
-	}
 
 	platform_set_drvdata(spitz_snd_device, &spitz_snd_devdata);
 	spitz_snd_devdata.dev = &spitz_snd_device->dev;
