--- sound/arm/h4000_audio.c-orig	2006-11-18 00:34:30.000000000 +0000
+++ sound/arm/h4000_audio.c	2006-11-30 17:18:04.000000000 +0000
@@ -59,11 +59,16 @@
 }
 
 static inline int snd_h4000_audio_hp_detect(void) {
-//	return 0;
-	return ((GPLR(GPIOD_HEADPHONE_IN_N) & GPIO_bit(GPIOD_HEADPHONE_IN_N)) == 0) ? 1 : 0;
+	int irq, hp_in;
+	irq = asic3_irq_base(asic3) + H4000_HEADPHONE_IN_IRQ;
+	hp_in = ((asic3_get_gpio_status_d(asic3) & GPIOD_HEADPHONE_IN_N) == 0);
+	if (hp_in)
+		set_irq_type(irq, IRQT_RISING);
+	else
+		set_irq_type(irq, IRQT_FALLING);
+	return hp_in;
 }
 
-
 static irqreturn_t snd_h4000_audio_hp_isr(int isr, void *data, struct pt_regs *regs) {
 	snd_uda1380_hp_detected(&uda, snd_h4000_audio_hp_detect());
 	return IRQ_HANDLED;
@@ -71,15 +76,13 @@
 
 static void snd_h4000_audio_hp_detection_on(void) {
 	unsigned long flags;
-
-	set_irq_type(IRQ_GPIO(GPIOD_HEADPHONE_IN_N), IRQT_BOTHEDGE);
-	request_irq(IRQ_GPIO(GPIOD_HEADPHONE_IN_N), snd_h4000_audio_hp_isr,
-		    SA_INTERRUPT | SA_SAMPLE_RANDOM, "earphone jack", NULL);
-
+	int irq;
+	irq = asic3_irq_base(asic3) + H4000_HEADPHONE_IN_IRQ;
+	request_irq(irq, snd_h4000_audio_hp_isr,
+			SA_SAMPLE_RANDOM, "Earphone jack", NULL);
 	local_irq_save(flags);
 	snd_uda1380_hp_detected(&uda, snd_h4000_audio_hp_detect());
 	local_irq_restore(flags);
-
 }
 
 static void snd_h4000_audio_hp_detection_off(void) {



