**************************************************************
*Fix a bug registering counter2 in the incorrect location
*Change DENM 1.5 mapping to be able to read the debounce reg.
*NZG
*09/20/2007
*EMAC.Inc
**************************************************************
diff -uprN linux-2.6.20-at92_e1.2/drivers/ioex/ecoreex.c linux-2.6.20-at92_e1.2.1/drivers/ioex/ecoreex.c
--- linux-2.6.20-at92_e1.2/drivers/ioex/ecoreex.c	2007-09-20 09:32:30.000000000 -0400
+++ linux-2.6.20-at92_e1.2.1/drivers/ioex/ecoreex.c	2007-09-20 09:31:19.000000000 -0400
@@ -191,7 +191,7 @@ static inline int CPLD_DENM14_map(unsign
 	gpio_declare();
 	gpi_device_create(&virt_addr[2],"counter0");
 	gpi_device_create(&virt_addr[4],"counter1");
-	gpi_device_create(&virt_addr[5],"counter2");
+	gpi_device_create(&virt_addr[6],"counter2");
 	gpi_device_create(&virt_addr[8],"counter3");
 	gpi_device_create(&virt_addr[10],"counter4");
 	gpi_device_create(&virt_addr[12],"counter5");
@@ -207,6 +207,37 @@ static inline int CPLD_DENM14_map(unsign
 return 0;
 }
 
+static inline int CPLD_DENM15_map(unsigned long phys_addr,u8 *virt_addr,unsigned long size,const char *name){
+	
+	if(request_mem_region(phys_addr,size,name)==NULL){
+		printk("could not obtain physical memory at %lx for EMAC core\n",phys_addr);
+		iounmap(virt_addr);
+		return -1;
+		}
+	
+	printk("%s detected at %lx\n",name,phys_addr);			
+	//add appropriate class devices for this version to the system
+
+#ifdef CONFIG_GPIOCLASS	
+	gpio_declare();
+	gpi_device_create(&virt_addr[2],"counter0");
+	gpi_device_create(&virt_addr[4],"counter1");
+	gpi_device_create(&virt_addr[6],"counter2");
+	gpi_device_create(&virt_addr[8],"counter3");
+	gpi_device_create(&virt_addr[10],"counter4");
+	gpi_device_create(&virt_addr[12],"counter5");
+	gpi_device_create(&virt_addr[14],"ct543210");
+	
+	gpio_device_create(&virt_addr[16],NULL,"oxrs4321");
+	gpio_device_create(&virt_addr[17],NULL,"xxrt321b");
+	gpio_device_create(&virt_addr[3], NULL,"rollover");
+	gpio_device_create(&virt_addr[1],NULL,"debounce");
+	
+#endif	//CONFIG_GPIOCLASS
+
+return 0;
+}
+
 #endif //CONFIG_ECOREEX_DENM
 
 /************************************************************
@@ -257,7 +288,7 @@ static inline void map_core(unsigned lon
 				CPLD_DENM14_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_14);
 			break;
 			case CPLD_DENM15:
-				CPLD_DENM14_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_15);
+				CPLD_DENM15_map(phys_addr,virt_addr,size,CPLD_DENM_NAME_15);
 			break;
 			#endif //CONFIG_ECOREEX_DENM
 			//--------------------------------------------------------
