diff -urN kernel26/arch/arm/mach-pxa/h4000/h4000.c kernel26_h4000/arch/arm/mach-pxa/h4000/h4000.c
--- kernel26/arch/arm/mach-pxa/h4000/h4000.c	2005-01-07 20:54:27.000000000 -0700
+++ kernel26_h4000/arch/arm/mach-pxa/h4000/h4000.c	2005-02-01 19:29:32.000000000 -0700
@@ -71,11 +71,19 @@
 static irqreturn_t h4000_rs232(int irq, void *dev_id, struct pt_regs *regs)
 {
         if (GET_H4000_GPIO(SERIAL_DETECT)) {
-                GAFR1_L |= 0x000a9450;
+                pxa_gpio_mode(GPIO34_FFRXD_MD);
+                pxa_gpio_mode(GPIO35_FFCTS_MD);
+                pxa_gpio_mode(GPIO36_FFDCD_MD);
+                pxa_gpio_mode(GPIO37_FFDSR_MD);
+                pxa_gpio_mode(GPIO38_FFRI_MD);
+                pxa_gpio_mode(GPIO39_FFTXD_MD);
+                pxa_gpio_mode(GPIO40_FFDTR_MD);
+                pxa_gpio_mode(GPIO41_FFRTS_MD);
+
                 IPAQ_ASIC3_GPIO_A_OUT(H4000_ASIC3_VIRT) |= GPIOA_RS232_ON;
         } else {
                 IPAQ_ASIC3_GPIO_A_OUT(H4000_ASIC3_VIRT) &= ~GPIOA_RS232_ON;
-                GAFR1_L &= ~0x000a9450;
+                //GAFR1_L &= ~0x000a9550;
         }
         return IRQ_HANDLED;
 }
@@ -219,6 +227,7 @@
 static void __init h4000_init(void)
 {
         pxa_set_udc_info(&h4000_udc_info);
+        h4000_rs232(0,0,0);
         platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
