diff -urN kernel26/arch/arm/common/ipaq/h4000_lcd.c kernel26_h4000/arch/arm/common/ipaq/h4000_lcd.c
--- kernel26/arch/arm/common/ipaq/h4000_lcd.c	1969-12-31 17:00:00.000000000 -0700
+++ kernel26_h4000/arch/arm/common/ipaq/h4000_lcd.c	2004-04-01 18:35:23.000000000 -0700
@@ -0,0 +1,198 @@
+/*
+ * Hardware definitions for HP iPAQ Handheld Computers
+ *
+ * Copyright 2000-2003 Hewlett-Packard Company.
+ *
+ * Use consistent with the GNU GPL is permitted,
+ * provided that this copyright notice is
+ * preserved in its entirety in all copies and derived works.
+ *
+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
+ * FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ * Author: Jamey Hicks.
+ *
+ * History:
+ *
+ * 2004-03-01	Eddi De Pieri      Adapted for h4000 using h3900_lcd.c and 
+ *                                 Shawn's functions
+ * 2004-??-??	Shawn Anderson     Lcd hacking on h4000
+ * 2003-05-14	Joshua Wise        Adapted for the HP iPAQ H1900
+ * 2002-08-23   Jamey Hicks        Adapted for use with PXA250-based iPAQs
+ * 2001-10-??   Andrew Christian   Added support for iPAQ H3800
+ *                                 and abstracted EGPIO interface.
+ *
+ */
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/tty.h>
+#include <linux/sched.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/lcd.h>
+#include <linux/backlight.h>
+#include <linux/fb.h>
+#include <../drivers/video/pxafb.h>
+
+#include <asm/hardware.h>
+#include <asm/setup.h>
+
+#include <asm/mach/arch.h>
+#include <asm/arch/h3900_asic.h>
+#include <asm/arch/ipaq.h>
+
+#include "asic2_base.h"
+#include "asic3_base.h"
+
+extern struct platform_device h3900_asic2, h3900_asic3;
+
+/*
+  On screen enable, we get 
+  
+     h3800_lcd_power_on(1)
+     LCD controller starts
+     h3800_lcd_enable(1)
+
+  On screen disable, we get
+  
+     h3800_lcd_enable(0)
+     LCD controller stops
+     h3800_lcd_power_on(0)
+*/
+
+static int h4000_lcd_set_power( struct lcd_device *lm, int setp )
+{
+        printk("%s: \n", __FUNCTION__);
+	return 0;
+}
+
+static int h4000_lcd_get_power( struct lcd_device *lm )
+{
+        printk("%s: \n", __FUNCTION__);
+	return 0;
+}
+
+static int h4000_lcd_set_enable( struct lcd_device *lm, int setp )
+{
+        printk("%s: \n", __FUNCTION__);
+	return -EINVAL;	
+}
+
+static int h4000_lcd_get_enable( struct lcd_device *lm )
+{
+        printk("%s: \n", __FUNCTION__);
+	return -EINVAL;		
+}
+
+static int h4000_backlight_set_power (struct backlight_device *bl, int on)
+{
+        printk("%s: backlight o%s\n", __FUNCTION__,
+                                                on ? "n" : "ff",GAFR0_U);
+	if (on) {
+            // also CKEN[0] = 1 turns on PWM clock, mabey do that here too.
+	    GAFR0_U |= 0x2;
+    	    printk("%s: GAFR0_U |= 0x2, GAFR0_U=0x%x\n", __FUNCTION__, GAFR0_U);
+            printk("%s: CKEN=0x%x\n", __FUNCTION__, CKEN);
+	}
+        else
+	    GAFR0_U &= ~(0x2);
+
+        return 0;
+}
+
+static int h4000_backlight_get_power (struct backlight_device *bl)
+{
+	printk("%s: \n", __FUNCTION__);
+	if (GAFR0_U & 0x2)
+    	    return 1;
+	else
+    	    return 0;
+}
+
+/*
+ * LCCR0: 0x003008f9 -- ENB=0x1,  CMS=0x0, SDS=0x0, LDM=0x1,
+ *                      SFM=0x1,  IUM=0x1, EFM=0x1, PAS=0x1,
+ *                      res=0x0,  DPD=0x0, DIS=0x0, QDM=0x1,
+ *                      PDD=0x0,  BM=0x1,  OUM=0x1, res=0x0
+ * LCCR1: 0x13070cef -- BLW=0x13, ELW=0x7, HSW=0x3, PPL=0xef
+ * LCCR2: 0x0708013f -- BFW=0x7,  EFW=0x8, VSW=0x0, LPP=0x13f
+ * LCCR3: 0x04700008 -- res=0x0,  DPC=0x0, BPP=0x4, OEP=0x0, PCP=0x1
+ *                      HSP=0x1,  VSP=0x1, API=0x0, ACD=0x0, PCD=0x8
+ */
+
+static struct pxafb_mach_info h4000_fb_info = {
+        .pixclock     = 0,
+        .bpp          = 16,         // BPP (0x4 == 16bits)
+        .xres         = 240,        // PPL + 1
+        .yres         = 320,        // LPP + 1
+        .hsync_len    = 4,          // HSW + 1
+        .vsync_len    = 1,          // VSW + 1
+        .left_margin  = 20,         // BLW + 1
+	.upper_margin = 8,          // BFW + 1
+        .right_margin = 8,          // ELW + 1
+        .lower_margin = 9,          // EFW + 1
+	.sync         = 0,
+        .lccr0 = (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM |
+                  LCCR0_PAS | LCCR0_QDM | LCCR0_BM | LCCR0_OUM),
+        .lccr3 = (LCCR3_HorSnchL | LCCR3_VrtSnchL | LCCR3_16BPP |
+		  LCCR3_PCP | /*PCD */ 0x8)
+};
+
+static void *h4000_get_mach_info(struct lcd_device *lm)
+{
+	return (void *)&h4000_fb_info;
+}
+
+static struct lcd_device h4000_lcd_device = {
+	.name          = "pxafb",
+	.get_mach_info = h4000_get_mach_info,
+	.set_power     = h4000_lcd_set_power,
+	.get_power     = h4000_lcd_get_power,
+	.set_enable    = h4000_lcd_set_enable,
+	.get_enable    = h4000_lcd_get_enable,
+};
+
+static struct backlight_device h4000_backlight_device = {
+	.name          = "pxafb",
+	.set_power     = h4000_backlight_set_power,
+	.get_power     = h4000_backlight_get_power,
+};
+
+static int
+h4000_lcd_init (void)
+{
+	int rc = 0;
+
+        printk("%s: Initializing lcd...\n", __FUNCTION__);
+
+// next function doesn't work... doesn't identify my h4000 as h4000 :( ~ eddi
+//	if (! machine_is_h4000 ())
+//		return -ENODEV;
+
+        printk("%s: Identified device as H4xxx...\n", __FUNCTION__);
+
+        printk("%s: Registering lcd device...\n", __FUNCTION__);
+	rc = lcd_device_register(&h4000_lcd_device);
+	if (rc)
+		return rc;
+        printk("%s: Registering backlight device...\n", __FUNCTION__);
+	rc = backlight_device_register(&h4000_backlight_device);
+
+	return rc;
+}
+
+static void
+h4000_lcd_exit (void)
+{
+	lcd_device_unregister (&h4000_lcd_device);
+	backlight_device_unregister (&h4000_backlight_device);
+}
+
+module_init (h4000_lcd_init);
+module_exit (h4000_lcd_exit);
+
+MODULE_AUTHOR(" ");
+MODULE_DESCRIPTION("Framebuffer driver for iPAQ H4000");
+MODULE_LICENSE("GPL");
diff -urN kernel26/arch/arm/common/ipaq/Kconfig kernel26_h4000/arch/arm/common/ipaq/Kconfig
--- kernel26/arch/arm/common/ipaq/Kconfig	2004-03-29 22:29:43.000000000 -0700
+++ kernel26_h4000/arch/arm/common/ipaq/Kconfig	2004-04-01 18:21:09.000000000 -0700
@@ -46,6 +46,10 @@
 	tristate "HP iPAQ h3900 LCD"
 	depends on IPAQ_HANDHELD && IPAQ_ASIC2 && IPAQ_ASIC3 && LCD_DEVICE && FB_PXA
 
+config IPAQ_H4000_LCD
+        tristate "HP iPAQ h4000 LCD"
+        depends on IPAQ_HANDHELD && IPAQ_ASIC3 && LCD_DEVICE && FB_PXA
+
 config IPAQ_SAMCOP
 	tristate "HP iPAQ SAMCOP drivers"
 	depends on IPAQ_HANDHELD
diff -urN kernel26/arch/arm/common/ipaq/Makefile kernel26_h4000/arch/arm/common/ipaq/Makefile
--- kernel26/arch/arm/common/ipaq/Makefile	2004-03-29 22:29:43.000000000 -0700
+++ kernel26_h4000/arch/arm/common/ipaq/Makefile	2004-04-01 18:19:47.000000000 -0700
@@ -28,5 +28,6 @@
 obj-$(CONFIG_IPAQ_SHAMCOP_NAND) += shamcop_nand.o
 
 obj-$(CONFIG_IPAQ_H3900_LCD) += h3900_lcd.o
+obj-$(CONFIG_IPAQ_H4000_LCD) += h4000_lcd.o
 obj-$(CONFIG_IPAQ_H5400_LCD) += h5400_lcd.o
 obj-$(CONFIG_IPAQ_H5400_WIFI) += h5400_wifi.o pcipool.o
diff -urN kernel26/arch/arm/mach-pxa/h4000.c kernel26_h4000/arch/arm/mach-pxa/h4000.c
--- kernel26/arch/arm/mach-pxa/h4000.c	2004-03-27 20:52:05.000000000 -0700
+++ kernel26_h4000/arch/arm/mach-pxa/h4000.c	2004-04-01 18:42:19.657979128 -0700
@@ -1,49 +1,39 @@
+/*
+ * Hardware definitions for HP iPAQ Handheld Computers
+ *
+ * Copyright 2000-2003 Hewlett-Packard Company.
+ *
+ * Use consistent with the GNU GPL is permitted,
+ * provided that this copyright notice is
+ * preserved in its entirety in all copies and derived works.
+ *
+ * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
+ * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS
+ * FITNESS FOR ANY PARTICULAR PURPOSE.
+ *
+ * History:
+ * 2004-??-??  Shawn Anderson    Derived the from aximx3.c aximx5.c e7xx.c 
+ *                               h1900.c h2200.c h3900.c h5400.c and friends.
+ * 2004-04-01  Eddi De Pieri     Move lcd stuff so it can be used as a module.
+ */
+
 #include <linux/lcd.h>
 #include <linux/backlight.h>
 #include <linux/fb.h>  // needed by pxafb.h
 #include "../../../drivers/video/pxafb.h" /* pxafb_mach_info */
+#include <asm/arch/udc.h>
 
 #include <asm/arch/ipaq.h> // struct ipaq_model_ops
 #include <asm/mach/map.h>  // struct map_desc
 #include "generic.h" // pxa_map_io()
 #include <asm/mach/arch.h>
+#include <asm/hardware/ipaq-asic3.h>
 
+#include <asm/arch/h4000-gpio.h>
+/*#include <asm/arch/h4000-init.h> */
 
 
-static int h4000_lcd_set_power(struct lcd_device *lm, int setp)
-{
-    printk("%s: \n", __FUNCTION__);
-    return 0;
-}
-
-static int h4000_lcd_get_power(struct lcd_device *lm)
-{
-    printk("%s: \n", __FUNCTION__);
-    return 0;
-}
-
-static int h4000_lcd_set_enable(struct lcd_device *lm, int setp)
-{   
-    printk("%s: \n", __FUNCTION__);
-    return -EINVAL;
-}
-
-static int h4000_lcd_get_enable(struct lcd_device *lm)
-{
-    printk("%s: \n", __FUNCTION__);
-    return -EINVAL;
-}
-static int h4000_backlight_set_power(struct backlight_device *bl, int on)
-{   
-    printk("%s: on=%d\n", __FUNCTION__,on);
-    return 0;
-}   
-
-static int h4000_backlight_get_power(struct backlight_device *bl)
-{
-    printk("%s: \n", __FUNCTION__);
-    return 0;
-}
+#define IPAQ_ASIC3_VIRT                    H3900_ASIC3_VIRT
 
 static void h4000_control_egpio(enum ipaq_egpio_type x, int setp)
 {
@@ -62,86 +52,80 @@
     return -EINVAL;
 }
 
-//static irqreturn_t h4000_charge(int irq, void *dev_id, struct pt_regs *regs)
-//{
-//    printk("%s: \n", __FUNCTION__);
-//    return 0;
-//};  
-
-
-
-
-#ifdef CONFIG_LCD_DEVICE
-/*
- * LCCR0: 0x003008f9 -- ENB=0x1,  CMS=0x0, SDS=0x0, LDM=0x1, 
- *                      SFM=0x1,  IUM=0x1, EFM=0x1, PAS=0x1, 
- *                      res=0x0,  DPD=0x0, DIS=0x0, QDM=0x1,
- *                      PDD=0x0,  BM=0x1,  OUM=0x1, res=0x0
- * LCCR1: 0x13070cef -- BLW=0x13, ELW=0x7, HSW=0x3, PPL=0xef
- * LCCR2: 0x0708013f -- BFW=0x7,  EFW=0x8, VSW=0x0, LPP=0x13f
- * LCCR3: 0x04700008 -- res=0x0,  DPC=0x0, BPP=0x4, OEP=0x0, PCP=0x1
- *                      HSP=0x1,  VSP=0x1, API=0x0, ACD=0x0, PCD=0x8
- */
-
-static struct pxafb_mach_info h4000_fb_info __initdata = {
-    .pixclock     = 0,
-    .bpp          = 16,         // BPP (0x4 == 16bits)
-    .xres         = 240,        // PPL + 1
-    .yres         = 320,        // LPP + 1
-    .hsync_len    = 4,          // HSW + 1
-    .vsync_len    = 1,          // VSW + 1
-    .left_margin  = 20,         // BLW + 1
-    .upper_margin = 8,          // BFW + 1
-    .right_margin = 8,          // ELW + 1
-    .lower_margin = 9,          // EFW + 1
-    .sync         = 0,
-    .lccr0 = (LCCR0_LDM | LCCR0_SFM | LCCR0_IUM | LCCR0_EFM |
-              LCCR0_PAS | LCCR0_QDM | LCCR0_BM | LCCR0_OUM),
-    .lccr3 = (LCCR3_HorSnchL | LCCR3_VrtSnchL | LCCR3_16BPP |
-              LCCR3_PCP | /*PCD */ 0x8)
-};
 
-static void *h4000_get_mach_info(struct lcd_device *lm)
+static void h4000_udc_command (int cmd)
 {
-    return (void *)&h4000_fb_info;
+        // I dont think this works... GPIO[10] probably isnt the usb pullup
+        switch (cmd)
+        {
+        case PXA2XX_UDC_CMD_DISCONNECT:
+            //GPSR0 |= 0x400;
+            printk("%s: make usb disappear:a GPLR0 0x%x\n",__FUNCTION__,GPLR0);
+            break;
+        case PXA2XX_UDC_CMD_CONNECT:
+            //GPCR0 |= 0x400;
+            printk("%s: let usb appear:a GPLR0 0x%x\n",__FUNCTION__,GPLR0);
+            break;
+        default:
+            printk("_udc_control: unknown command!\n");
+            break;
+        }
+}
+
+static int h4000_udc_is_connected (void)
+{
+    /* do we see host?  FIXME: return a meaningful value here...*/
+      printk("%s: is usb connected: GPLR0 0x%x\n",__FUNCTION__,GPLR0);
+      return 1;
 }
 
-struct lcd_device h4000_lcd_device = {
-    .name = "pxafb",
-    .get_mach_info = h4000_get_mach_info,
-    .set_power = h4000_lcd_set_power,
-    .get_power = h4000_lcd_get_power,
-    .set_enable = h4000_lcd_set_enable,
-    .get_enable = h4000_lcd_get_enable
-        /* @@ more here @@ */
-};
-
-static struct backlight_device h4000_backlight_device = {
-    .name = "pxafb",
-    .set_power = h4000_backlight_set_power,
-    .get_power = h4000_backlight_get_power,
-};
-#endif
-
 static struct ipaq_model_ops h4000_model_ops __initdata = {
     .generic_name = "4000",
     .control = h4000_control_egpio,
     .read = h4000_read_egpio,
     .irq_number = h4000_egpio_irq_number,
-    //.set_led = h4000_set_led,
     .set_led = ipaq_set_led,
-#ifndef CONFIG_LCD_DEVICE
-    .backlight_power = h4000_backlight_set_power
-#endif                          /* CONFIG_LCD_DEVICE */
 };
 
-//static struct irqaction h4000_charge_irq = {
-// .name    = "h4000_charge",
-//  .handler = h4000_charge,
-//  .flags   = SA_INTERRUPT
-//};
+static struct pxa2xx_udc_mach_info h4000_udc_mach_info = {
+        .udc_is_connected = h4000_udc_is_connected,
+        .udc_command      = h4000_udc_command,
+};
 
+void dump_asic3_gpio(int gpiobase)
+{
+        unsigned int* ptr;
+
+        ptr = IPAQ_ASIC3_VIRT + gpiobase;
+        printk("---------- BEGIN ASIC3 GPIO%d DUMP\n", gpiobase/0x100);
+        printk("MASK: %04x\n", *(ptr));
+        printk("DIR : %04x\n", *(ptr+1));
+        printk("OUT : %04x\n", *(ptr+2));
+        printk("TTYP: %04x\n", *(ptr+3));
+        printk("ETRG: %04x\n", *(ptr+4));
+        printk("LTRG: %04x\n", *(ptr+5));
+        printk("SMSK: %04x\n", *(ptr+6));
+        printk("SOUT: %04x\n", *(ptr+7));
+        printk("BOUT: %04x\n", *(ptr+8));
+        printk("ISTT: %04x\n", *(ptr+9));
+        printk("AFR : %04x\n", *(ptr+10));
+        printk("SCNF: %04x\n", *(ptr+11));
+        printk("STAT: %04x\n", *(ptr+12));
+        printk("---------- END ASIC3 GPIO%d DUMP\n", gpiobase/0x100);
+}
+
+/*
+CS3#
+   0xA7000000, 0x0C000000, 1 ;HTC Asic3 chip select
+CS4#
+   0xBD900000, 0x10000000, 1 ;SD I/O controller
+CS5#
+   0xBDE00000, 0x14000000, 1 ;DBG LED REGISTER
+   0xBDF00000, 0x15000000, 1 ;DBG LAN REGISTER
+   0xBE000000, 0x16000000, 1 ;DBG PPSH REGISTER
+*/
 static struct map_desc h4000_io_desc[] __initdata = {
+    { 0xf3800000, PXA_CS3_PHYS,  0x02000000, MT_DEVICE},
 };
 
 static void __init h4000_init_irq(void)
@@ -153,19 +137,26 @@
 {
     pxa_map_io();
     iotable_init(h4000_io_desc, ARRAY_SIZE(h4000_io_desc));
+    
+    /* Wake up enable. */
+    PWER = PWER_GPIO0 | PWER_RTC;
+    /* Wake up on falling edge. */
+    PFER = PWER_GPIO0 | PWER_RTC;
+    /* Wake up on rising edge. */
+    PRER = 0;
+    /* 3.6864 MHz oscillator power-down enable */
+    PCFR = PCFR_OPDE;
+    
     ipaq_model_ops = h4000_model_ops;
 }
 
 static void __init h4000_init(void)
 {
-#ifdef CONFIG_LCD_DEVICE
-    if (!lcd_device_register(&h4000_lcd_device))
-        backlight_device_register(&h4000_backlight_device);
-#endif
+    pxa_set_udc_info(&h4000_udc_mach_info);
 }
 
 MACHINE_START(H4000, "HP iPAQ h4000")
-MAINTAINER(" ")
+MAINTAINER("your name here")
 BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000))
 BOOT_PARAMS(0xa0000100)
 MAPIO(h4000_map_io)
diff -urN kernel26/include/asm-arm/arch-pxa/h4000-gpio.h kernel26_h4000/include/asm-arm/arch-pxa/h4000-gpio.h
--- kernel26/include/asm-arm/arch-pxa/h4000-gpio.h	1969-12-31 17:00:00.000000000 -0700
+++ kernel26_h4000/include/asm-arm/arch-pxa/h4000-gpio.h	2004-04-01 18:33:59.000000000 -0700
@@ -0,0 +1,80 @@
+#ifndef _H4000_GPIO_H_
+#define _H4000_GPIO_H_
+
+#define GET_H4000_GPIO(gpio) \
+        (GPLR(GPIO_NR_H4000_ ## gpio) & GPIO_bit(GPIO_NR_H4000_ ## gpio))
+
+#define SET_H4000_GPIO(gpio, setp) \
+do { \
+if (setp) \
+        GPSR(GPIO_NR_H4000_ ## gpio) = GPIO_bit(GPIO_NR_H4000_ ## gpio); \
+else \
+        GPCR(GPIO_NR_H4000_ ## gpio) = GPIO_bit(GPIO_NR_H4000_ ## gpio); \
+} while (0)
+
+#define SET_H4000_GPIO_N(gpio, setp) \
+do { \
+if (setp) \
+        GPCR(GPIO_NR_H4000_ ## gpio) = GPIO_bit(GPIO_NR_H4000_ ## gpio); \
+else \
+        GPSR(GPIO_NR_H4000_ ## gpio) = GPIO_bit(GPIO_NR_H4000_ ## gpio); \
+} while (0)
+
+
+/* FIXME: Active-low signals are denoted by suffix _N  */
+/* AF == Alternate Function, FE == falling edge, RE == Rising edge */
+
+#define GPIO_NR_H4000_POWER_BUTTON_N (0)                  /* ; RE FE; Input */
+#define GPIO_NR_H4000_RESET_BUTTON_N (1)                    /* AF 1 ; Input */
+#define GPIO_NR_H4000_SD_DETECT_N (2)     /* SD Card insert ; RE FE ; Input */
+#define GPIO_NR_H4000_CHARGING_N (3)         /* is it charging ; FE ; Input */
+#define GPIO_NR_H4000_AC_IN_N (4)       /* Power plugged in ; RE FE ; Input */
+#define GPIO_NR_H4000_BATTERY_DOOR_N (5)                           /* Input */
+//#define GPIO_NR_H4000_ (6)                                       /* Input */
+//#define GPIO_NR_H4000_ (7)                                 /*; FE ; Input */
+//#define GPIO_NR_H4000_ (8)                                /* ; FE ; Input */
+//#define GPIO_NR_H4000_ (9)    /* Button/keyboard h4350 only? ; RE ; Input */
+#define GPIO_NR_H4000_USB_DETECT_N (10) /* usb is connected ; RE FE ; Input */
+//#define GPIO_NR_H4000_ (11)              /* Wireless 802.11b ; FE ; Input */
+//#define GPIO_NR_H4000_ (12)                               /* AF 1 ; Output*/
+#define GPIO_NR_H4000_SERIAL_DETECT (13) /*serial connected ; RE FE ; Input */
+//#define GPIO_NR_H4000_ (14)                                    /* ; Output*/
+//#define GPIO_NR_H4000_ (15)                                    /* ; Output*/
+#define GPIO_NR_H4000_LCD_PWM (16)                          /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (17)                                    /* ; Output*/
+//#define GPIO_NR_H4000_ (18)                               /* AF 1 ; Input */
+#define GPIO_NR_H4000_UP_BUTTON_N (19)                /* h4150 Only ; Input */
+#define GPIO_NR_H4000_LEFT_BUTTON_N (20)              /* h4150 Only ; Input */
+#define GPIO_NR_H4000_ACTION_BUTTON_N (21)            /* h4150 Only ; Input */
+#define GPIO_NR_H4000_DOWN_BUTTON_N (22)              /* h4150 Only ; Input */
+/* 23 - 26 SSP Alternate Function GPIOs see pxa-regs.h */
+#define GPIO_NR_H4000_PEN_IRQ_N (27)                          /* FE ; Input */
+/* 28 - 32 I2S ??? */
+//#define GPIO_NR_H4000_ (33)                               /* AF 2 ; Output*/
+/* 34 - 41 FFUART ?? */
+/* 42 - 45 are Alternate function 3 when bluetooth is on */
+#define GPIO_NR_H4000_IRDA_RXD (46)       /* IrDA beam receive AF 2 ; Input */
+#define GPIO_NR_H4000_IRDA_TXD (47)      /* IrDA beam transmit AF 1 ; Output*/
+//#define GPIO_NR_H4000_ (48)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (49)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (50)                                    /* ; Output*/
+//#define GPIO_NR_H4000_ (51)                                    /* ; Output*/
+//#define GPIO_NR_H4000_ (52)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (53)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (54)                                    /* ; Output*/
+//#define GPIO_NR_H4000_ (55)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (56)                               /* AF 1 ; Input */
+//#define GPIO_NR_H4000_ (57)                               /* AF 1 ; Input */
+/* 58 to 73 Alternate functions */
+//#define GPIO_NR_H4000_ (74)                                    /* ; Output*/
+//#define GPIO_NR_H4000_ (75)                                    /* ; Output*/
+//#define GPIO_NR_H4000_ (76)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (77)                               /* AF 2 ; Output*/
+#define GPIO_NR_H4000_RIGHT_BUTTON_N (78)             /* h4150 Only ; Input*/
+//#define GPIO_NR_H4000_ (79)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (80)                               /* AF 2 ; Output*/
+//#define GPIO_NR_H4000_ (81)                                      /* Input */
+//#define GPIO_NR_H4000_ (82)                                      /* Input */
+//#define GPIO_NR_H4000_ (83)                                      /* Input */
+
+#endif /* _H4000_GPIO_H_ */

