diff -Naur linux-2.6.25.at91/arch/arm/configs/som9260m_defconfig linux-2.6/arch/arm/configs/som9260m_defconfig
--- linux-2.6.25.at91/arch/arm/configs/som9260m_defconfig	2009-02-12 12:26:57.000000000 -0600
+++ linux-2.6/arch/arm/configs/som9260m_defconfig	2008-09-24 11:10:11.000000000 -0500
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.25
-# Wed Aug  6 11:23:48 2008
+# Thu Sep 18 12:58:43 2008
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -35,7 +35,7 @@
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
-# CONFIG_SWAP is not set
+CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 CONFIG_SYSVIPC_SYSCTL=y
 # CONFIG_POSIX_MQUEUE is not set
@@ -62,7 +62,6 @@
 CONFIG_UID16=y
 CONFIG_SYSCTL_SYSCALL=y
 CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
 CONFIG_HOTPLUG=y
 CONFIG_PRINTK=y
@@ -192,7 +191,9 @@
 # CONFIG_MACH_QIL_A9260 is not set
 CONFIG_MACH_SOM9260M=y
 # CONFIG_ARMSTRONG_HWMS is not set
+# CONFIG_DATA_FUSION is not set
 CONFIG_SOM_150ES=y
+CONFIG_ECOREEX_SOM9260M=y
 
 #
 # SOM9260 Memory Options
@@ -212,6 +213,7 @@
 CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
 CONFIG_AT91_SLOW_CLOCK=y
 CONFIG_AT91_TIMER_HZ=100
+CONFIG_RTSCLS=y
 # CONFIG_AT91_EARLY_DBGU is not set
 # CONFIG_AT91_EARLY_USART0 is not set
 # CONFIG_AT91_EARLY_USART1 is not set
@@ -283,7 +285,7 @@
 #
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw"
+CONFIG_CMDLINE=""
 # CONFIG_XIP_KERNEL is not set
 # CONFIG_KEXEC is not set
 
@@ -409,8 +411,6 @@
 CONFIG_STANDALONE=y
 CONFIG_PREVENT_FIRMWARE_BUILD=y
 # CONFIG_FW_LOADER is not set
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
 # CONFIG_SYS_HYPERVISOR is not set
 # CONFIG_CONNECTOR is not set
 CONFIG_MTD=y
@@ -418,7 +418,7 @@
 CONFIG_MTD_CONCAT=y
 CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
 # CONFIG_MTD_AFS_PARTS is not set
 
 #
@@ -598,7 +598,6 @@
 CONFIG_MII=y
 CONFIG_MACB=y
 CONFIG_MACB_TX_SRAM=y
-CONFIG_MACB_FAKE_IRQ=y
 # CONFIG_AX88796 is not set
 # CONFIG_SMC91X is not set
 # CONFIG_DM9000 is not set
@@ -701,7 +700,6 @@
 # SPI support
 #
 CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
 CONFIG_SPI_MASTER=y
 
 #
@@ -725,8 +723,8 @@
 #
 # Watchdog Device Drivers
 #
-# CONFIG_SOFT_WATCHDOG is not set
-CONFIG_AT91SAM9_WATCHDOG=y
+CONFIG_SOFT_WATCHDOG=m
+# CONFIG_AT91SAM9_WATCHDOG is not set
 
 #
 # USB-based Watchdog Cards
@@ -781,7 +779,7 @@
 CONFIG_SND_MIXER_OSS=y
 CONFIG_SND_PCM_OSS=y
 CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_DYNAMIC_MINORS=y
 # CONFIG_SND_SUPPORT_OLD_API is not set
 # CONFIG_SND_VERBOSE_PROCFS is not set
 # CONFIG_SND_VERBOSE_PRINTK is not set
@@ -921,7 +919,6 @@
 # CONFIG_USB_IOWARRIOR is not set
 # CONFIG_USB_TEST is not set
 CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
 # CONFIG_USB_GADGET_DEBUG_FILES is not set
 CONFIG_USB_GADGET_SELECTED=y
 # CONFIG_USB_GADGET_AMD5536UDC is not set
@@ -939,7 +936,8 @@
 # CONFIG_USB_GADGET_DUMMY_HCD is not set
 # CONFIG_USB_GADGET_DUALSPEED is not set
 CONFIG_USB_ZERO=m
-# CONFIG_USB_ETH is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
 CONFIG_USB_GADGETFS=m
 CONFIG_USB_FILE_STORAGE=m
 # CONFIG_USB_FILE_STORAGE_TEST is not set
@@ -1137,7 +1135,7 @@
 # CONFIG_NLS_ISO8859_8 is not set
 # CONFIG_NLS_CODEPAGE_1250 is not set
 # CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ASCII=y
 CONFIG_NLS_ISO8859_1=y
 # CONFIG_NLS_ISO8859_2 is not set
 # CONFIG_NLS_ISO8859_3 is not set
@@ -1151,7 +1149,7 @@
 # CONFIG_NLS_ISO8859_15 is not set
 # CONFIG_NLS_KOI8_R is not set
 # CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
+CONFIG_NLS_UTF8=y
 # CONFIG_DLM is not set
 
 #
@@ -1164,39 +1162,11 @@
 # CONFIG_UNUSED_SYMBOLS is not set
 # CONFIG_DEBUG_FS is not set
 # CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_TIMER_STATS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_KERNEL is not set
 # CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
 CONFIG_FRAME_POINTER=y
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
 # CONFIG_SAMPLES is not set
 # CONFIG_DEBUG_USER is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_LL is not set
 
 #
 # Security options
diff -Naur linux-2.6.25.at91/arch/arm/mach-at91/at91sam9260.c linux-2.6/arch/arm/mach-at91/at91sam9260.c
--- linux-2.6.25.at91/arch/arm/mach-at91/at91sam9260.c	2009-02-12 12:26:57.000000000 -0600
+++ linux-2.6/arch/arm/mach-at91/at91sam9260.c	2008-11-10 18:02:09.000000000 -0600
@@ -266,7 +266,11 @@
 
 static void at91sam9260_reset(void)
 {
-	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
+	/* TODO: EXTRST flag is needed to prevent delay on 9260 with the 2.6.25 kernel
+	 * This should not be required.
+	 */
+	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST | AT91_RSTC_EXTRST);
+//	at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
 }
 
 static void at91sam9260_poweroff(void)
diff -Naur linux-2.6.25.at91/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6/arch/arm/mach-at91/at91sam9260_devices.c
--- linux-2.6.25.at91/arch/arm/mach-at91/at91sam9260_devices.c	2009-02-12 12:26:57.000000000 -0600
+++ linux-2.6/arch/arm/mach-at91/at91sam9260_devices.c	2008-12-30 10:38:39.000000000 -0600
@@ -375,21 +375,32 @@
 
 #if defined(CONFIG_I2C_GPIO) || defined(CONFIG_I2C_GPIO_MODULE)
 
-static struct i2c_gpio_platform_data pdata = {
 #ifdef CONFIG_DATA_FUSION
-	.sda_pin		= AT91_PIN_PC12,
-	.sda_is_open_drain	= 0,
-#else
-	.sda_pin		= AT91_PIN_PA23,
-	.sda_is_open_drain	= 1,
-#endif
-#ifdef CONFIG_DATA_FUSION
-	.scl_pin		= AT91_PIN_PC15,
-	.scl_is_open_drain	= 0,
+#define SDA_PIN AT91_PIN_PC12
+#define SCL_PIN AT91_PIN_PC15
+#define SDA_OPEN_DRAIN (0)
+#define SCL_OPEN_DRAIN (0)
+
+#elif defined(CONFIG_MACH_SOM9260M)
+#define SDA_PIN AT91_PIN_PB0
+#define SCL_PIN AT91_PIN_PB20
+#define SDA_OPEN_DRAIN (1)
+#define SCL_OPEN_DRAIN (1)
+
 #else
-	.scl_pin		= AT91_PIN_PA24,
-	.scl_is_open_drain	= 1,
+#define SDA_PIN AT91_PIN_PA23
+#define SCL_PIN AT91_PIN_PA24
+#define SDA_OPEN_DRAIN (1)
+#define SCL_OPEN_DRAIN (1)
+
 #endif
+
+static struct i2c_gpio_platform_data pdata = {
+
+	.sda_pin		= SDA_PIN,
+	.sda_is_open_drain	= SDA_OPEN_DRAIN,
+	.scl_pin		= SCL_PIN,
+	.scl_is_open_drain	= SCL_OPEN_DRAIN,
 	.udelay			= 2,		/* ~100 kHz */
 };
 
@@ -401,19 +412,11 @@
 
 void __init at91_add_device_i2c(struct i2c_board_info *devices, int nr_devices)
 {
-#ifdef CONFIG_DATA_FUSION
-	at91_set_GPIO_periph(AT91_PIN_PC12, 1);		/* TWD (SDA) */
-	at91_set_multi_drive(AT91_PIN_PC12, 0);
-
-	at91_set_GPIO_periph(AT91_PIN_PC15, 1);		/* TWCK (SCL) */
-	at91_set_multi_drive(AT91_PIN_PC15, 0);
-#else
-	at91_set_GPIO_periph(AT91_PIN_PA23, 1);		/* TWD (SDA) */
-	at91_set_multi_drive(AT91_PIN_PA23, 1);
+	at91_set_GPIO_periph(SDA_PIN, 1);		/* TWD (SDA) */
+	at91_set_multi_drive(SDA_PIN, SDA_OPEN_DRAIN);
 
-	at91_set_GPIO_periph(AT91_PIN_PA24, 1);		/* TWCK (SCL) */
-	at91_set_multi_drive(AT91_PIN_PA24, 1);
-#endif
+	at91_set_GPIO_periph(SCL_PIN, 1);		/* TWCK (SCL) */
+	at91_set_multi_drive(SCL_PIN, SCL_OPEN_DRAIN);
 
 	i2c_register_board_info(0, devices, nr_devices);
 	platform_device_register(&at91sam9260_twi_device);
@@ -489,7 +492,11 @@
 	.num_resources	= ARRAY_SIZE(spi0_resources),
 };
 
+#ifdef CONFIG_SOM_150ES_REV2
+static const unsigned spi0_standard_cs[3] = { AT91_PIN_PA3, AT91_PIN_PA4, AT91_PIN_PA5 };
+#else
 static const unsigned spi0_standard_cs[4] = { AT91_PIN_PA3, AT91_PIN_PC11, AT91_PIN_PC16, AT91_PIN_PC17 };
+#endif
 
 static struct resource spi1_resources[] = {
 	[0] = {
@@ -526,6 +533,7 @@
 
 	/* Choose SPI chip-selects */
 	for (i = 0; i < nr_devices; i++) {
+		printk(KERN_ERR "registering device %s\n", devices[i].modalias);
 		if (devices[i].controller_data)
 			cs_pin = (unsigned long) devices[i].controller_data;
 		else if (devices[i].bus_num == 0)
diff -Naur linux-2.6.25.at91/arch/arm/mach-at91/board-som9260m.c linux-2.6/arch/arm/mach-at91/board-som9260m.c
--- linux-2.6.25.at91/arch/arm/mach-at91/board-som9260m.c	2009-02-12 12:26:57.000000000 -0600
+++ linux-2.6/arch/arm/mach-at91/board-som9260m.c	2009-01-27 13:12:55.000000000 -0600
@@ -30,12 +30,15 @@
 #include <linux/clk.h>
 #include <linux/ioex/ecoreex.h>
 #include <linux/mtd/physmap.h>
+#include <linux/mtd/plat-ram.h>
 #include <linux/interrupt.h>
 #ifdef CONFIG_SPICLASS
 #include <linux/class/spi.h>
 #include <linux/class/spi_interface.h>
 #endif /* CONFIG_SPICLASS */
 
+#include <linux/class/lsi2esc/mcp3208-gpio.h>
+
 #include <asm/hardware.h>
 #include <asm/setup.h>
 #include <asm/mach-types.h>
@@ -50,6 +53,7 @@
 #include <asm/arch/at91sam9260.h>
 #include <asm/arch/at91_shdwc.h>
 #include <asm/arch/at91sam9_smc.h>
+#include <asm/arch/at91_tc.h>
 
 #include "generic.h"
 #include "atod-som9260m.h"
@@ -74,14 +78,10 @@
 	/* USART2 on ttyS2. (Rx, Tx, RTS, CTS) */
 	at91_register_uart(AT91SAM9260_ID_US2, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
 
-	/* USART3 on ttyS3. (Rx, Tx, RTS, CTS) */
-//#ifdef CONFIG_MACH_SOM9260M_64
+	/* USART3 on ttyS3. (Rx, Tx) */
 	/* CTS3 and RTS3 are used for NOR addressing and PLD CS */
-	at91_register_uart(AT91SAM9260_ID_US3, 3, 0);
-//#else
 	/* CTS3 is shared with A25 -- needed for 64 MB flash */
-//	at91_register_uart(AT91SAM9260_ID_US3, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);
-//#endif
+	at91_register_uart(AT91SAM9260_ID_US3, 3, 0);
 
 	/* USART5 on ttyS4. (Rx & Tx only) */
 	at91_register_uart(AT91SAM9260_ID_US5, 4, 0);
@@ -149,7 +149,7 @@
  * mcp3208 atod interface over EMAC SPI class
  */
 
-#if defined(CONFIG_ARMSTRONG_HWMS) //|| defined(CONFIG_SOM_150ES)
+#ifdef CONFIG_LSI2ESC_MCP3208
 static struct spi_s mcp3208_spi = 
 {
 	.name = "mcp3208",
@@ -196,18 +196,28 @@
 #if defined(CONFIG_SND_CS4271) || defined(CONFIG_SND_CS4271_MODULE)
 	{	/* CS4271 codec */
 		.modalias	= "cs4271",
+#ifdef CONFIG_SOM_150ES_REV2
+		.chip_select	= 2,
+		.bus_num	= 0,
+#else
 		.chip_select	= 0,
-		.max_speed_hz	= 6 * 1000 * 1000,
 		.bus_num	= 1,
+#endif
+		.max_speed_hz	= 6 * 1000 * 1000,
 		.platform_data	= &cs4271_data,
 	},
 #endif
-#if defined(CONFIG_ARMSTRONG_HWMS) //|| defined(CONFIG_SOM_150ES)
+#ifdef CONFIG_LSI2ESC_MCP3208
 	{ /* mcp3208 ADC */
 		.modalias = "lsi2esc", /* use the SPI class interface */
+#ifdef CONFIG_SOM_150ES_REV2
+		.chip_select = 0,
+		.bus_num = 0,
+#else
 		.chip_select = 0,
-		.max_speed_hz = 1e6,
 		.bus_num = 1,
+#endif
+		.max_speed_hz = 1e6,
 		.platform_data = &mcp3208_spi,
 	},
 #endif
@@ -224,7 +234,7 @@
  * MACB Ethernet device
  */
 static struct __initdata at91_eth_data ek_macb_data = {
-	.phy_irq_pin	= AT91_PIN_PA7,
+	.phy_irq_pin	= AT91_PIN_PA30,
 	.is_rmii	= 0,
 };
 
@@ -354,11 +364,41 @@
 };
 #endif
 
+#ifdef CONFIG_EVENT_MEDICAL
+static struct platdata_mtd_ram som_ram_data = {
+	.mapname		= "Dual Port RAM",
+	.bankwidth		= 1,
+};
+
+static struct resource som_ram_resources[] = {
+	{
+		.start	= 0x50000000,
+		.end	= 0x500007ff,
+		.flags	= IORESOURCE_MEM,
+	},
+};
+
+
+static struct platform_device som_ram = {
+	.name		= "mtd-ram",
+	.id		= 1,
+	.dev		= {
+		.platform_data = &som_ram_data,
+	},
+	.resource	= som_ram_resources,
+	.num_resources	= ARRAY_SIZE(som_ram_resources),
+};
+#endif
+
 /*
  * MCI (SD/MMC)
  */
 static struct at91_mmc_data __initdata ek_mmc_data = {
+#ifdef CONFIG_SOM_150ES_REV2 
+	.slot_b		= 0,
+#else
 	.slot_b		= 1,
+#endif
 	.wire4		= 1,
 	.det_pin	= AT91_PIN_PB21,
 	//	.wp_pin		= ... not connected
@@ -381,7 +421,7 @@
 
 static struct ecoreex_data som9260m_ecoreex_data = {
 	.key_offset	= CPLDKEY,
-	.irq = AT91SAM9260_ID_IRQ1,
+//	.irq = AT91SAM9260_ID_IRQ1,
 };
 
 static struct resource som9260m_ecoreex_resource = {
@@ -428,7 +468,6 @@
 			AT91_SMC_DBW_8|
 			AT91_SMC_TDF_(0X0f)
 		      );
-
 	//at91_sys_write(AT91C_PIOC_PDR,0x100);
 	//at91_sys_write(AT91C_PIOC_OER,0x100);
 
@@ -437,19 +476,14 @@
 
 /**
  * creates the 200k clock in using timer1 outputB
- * TODO: move regdefs to a more appropriate general header
  * NOTES: hard coded clock values could be more flexibly done through the clock registery, 
  * but it would require some 
  * fixed point math, which will be put off for a full PWM implementation
  * at which point it's methods will replace this code block.
  */
-#include <asm/arch/at91_tc.h>
-#define AT91SAM9260_TC1_CCR	(AT91SAM9260_BASE_TC1 + AT91_TC_CCR)
-#define AT91SAM9260_TC1_CMR	(AT91SAM9260_BASE_TC1 + AT91_TC_CMR)
-#define AT91SAM9260_TC1_RB	(AT91SAM9260_BASE_TC1 + AT91_TC_RB)
-#define AT91SAM9260_TC1_RC	(AT91SAM9260_BASE_TC1 + AT91_TC_RC)
 
 #define MCLK (25000000)
+#define RC_VAL 20
 
 #define at91_tc_read(reg)		__raw_readl(reg)
 #define at91_tc_write(reg, val)	__raw_writel((val), reg)
@@ -457,29 +491,49 @@
 static inline void set200kclock(void)
 {
 	struct clk *tc1_clk = clk_get(NULL, "tc1_clk");
-	unsigned long tc1 = (unsigned long)ioremap(AT91SAM9260_BASE_TC1,SZ_16K);
+	unsigned long tc1 = (unsigned long)ioremap(AT91SAM9260_BASE_TC1, SZ_16K);
+
+	clk_enable(tc1_clk); /* enable tc1 clock in the pmc */
 
-	clk_enable(tc1_clk);//enable tc1 clock in the pmc
+	/* tc1 setup for waveform on TCIOB1 */
 
-	//tc1 setup for waveform on TCIOB1
+#ifdef CONFIG_SOM_9260_1K_TC
+	/* Set to 800 Hz rather than 200 KHz */
 	at91_tc_write((tc1 + AT91_TC_CMR),
-			AT91_TC_TIMER_CLOCK1|
-			AT91_TC_WAVE|
-			AT91_TC_EEVT_XC0|
-			AT91_TC_WAVESEL_UP_AUTO|
+			AT91_TC_TIMER_CLOCK5 | /* slow clock */
+			AT91_TC_WAVE |
+			AT91_TC_EEVT_XC0 |
+			AT91_TC_WAVESEL_UP_AUTO |
 			AT91_TC_BCPB_TOGGLE
 		     );
-	//set the frequency
-	at91_tc_write((tc1 + AT91_TC_RC),(MCLK/200000));
+	/* set the frequency */
+	at91_tc_write((tc1 + AT91_TC_RC), RC_VAL);
 
-	//set RB to < RC for toggle (50% duty)
+	/* set RB to < RC for toggle (50% duty) */
+	at91_tc_write((tc1 + AT91_TC_RB), RC_VAL / 2);
+	
+#else
+	/* set to 200 KHz */
+	at91_tc_write((tc1 + AT91_TC_CMR),
+			AT91_TC_TIMER_CLOCK1 |
+			AT91_TC_WAVE |
+			AT91_TC_EEVT_XC0 |
+			AT91_TC_WAVESEL_UP_AUTO |
+			AT91_TC_BCPB_TOGGLE
+		     );
+	/* set the frequency */
+	 at91_tc_write((tc1 + AT91_TC_RC),(MCLK/200000));
+
+		/* set RB to < RC for toggle (50% duty) */
 	at91_tc_write((tc1 + AT91_TC_RB),((MCLK/200000)/2));
 
-	//reset and start the timer
-	at91_tc_write((tc1 + AT91_TC_CCR),AT91_TC_CLKEN|AT91_TC_SWTRG);
+#endif /* CONFIG_SOM_9260_1K_TC */
+	
+	/* reset and start the timer */
+	at91_tc_write((tc1 + AT91_TC_CCR), AT91_TC_CLKEN | AT91_TC_SWTRG);
 
-	//enable timer functionality on PC7, TIOB1 
-	at91_set_A_periph(AT91_PIN_PC7, 1);		
+	/* enable timer functionality on PC7, TIOB1 */
+	at91_set_A_periph(AT91_PIN_PC7, 1);
 
 }
 
@@ -487,13 +541,27 @@
 {
 	cs4_setup();
 	set200kclock();
-	at91_set_A_periph(AT91_PIN_PC15, 1);//enable IRQ1 on PC15	
+	at91_set_A_periph(AT91_PIN_PC15, 1); /* enable IRQ1 on PC15 */
 	platform_device_register(&som9260m_ecoreex_device);
 }
 #else
 #define at91_add_device_ecoreex4()
 #endif /* CONFIG_ECOREEX_SOM9260M */
 
+#ifdef CONFIG_EVENT_MEDICAL
+static inline void event_medical_board_init(void)
+{
+	at91_sys_write(AT91_SMC_SETUP(4),0x0e0e0e0e);
+	at91_sys_write(AT91_SMC_PULSE(4),0x0e0e0e0e);
+	at91_sys_write(AT91_SMC_CYCLE(4),0x002f002f);
+	at91_sys_write(AT91_SMC_MODE(4) ,0x00000003);
+	at91_set_A_periph(AT91_PIN_PC8, 1);
+
+	platform_device_register(&som_ram);
+}
+#else
+#define event_medical_board_init()
+#endif
 
 /************************************************************/
 #ifdef CONFIG_RTSCLS
@@ -596,6 +664,8 @@
 	som9260m_led_init();
 	som9260m_led_class_create("indexed_led");
 
+	mcp3208_gpio_class_create(&mcp3208_spi, "mcp3208-gpio");
+
 	som9260m_rtscls();
 
 	som9260m_physw();
@@ -653,6 +723,7 @@
 
 	/* Data fusion board support */
 	data_fusion_board_init();
+	event_medical_board_init();
 
 #ifdef  CONFIG_MACH_SOM9260M_NAND
 	/* NAND */
diff -Naur linux-2.6.25.at91/arch/arm/mach-at91/Kconfig linux-2.6/arch/arm/mach-at91/Kconfig
--- linux-2.6.25.at91/arch/arm/mach-at91/Kconfig	2009-02-12 12:26:57.000000000 -0600
+++ linux-2.6/arch/arm/mach-at91/Kconfig	2008-11-24 17:02:04.000000000 -0600
@@ -209,6 +209,31 @@
 	help
 	  Select this if you are using EMAC's SoM-9260M module.
 
+config SOM_150ES
+	bool "EMAC SOM-150ES Carrier Support"
+	depends on MACH_SOM9260M
+	help
+	  Support for the EMAC.Inc SOM-150ES carrier board and 
+	  peripherals.
+
+choice
+	prompt "SOM-150ES Carrier Version"
+	depends on SOM_150ES
+
+config SOM_150ES_REV2
+	bool "Revision 2 and above"
+
+config SOM_150ES_REV1
+	bool "SOM-150ES Revision 1 and 0"
+
+endchoice
+
+config DENM_CARRIER
+	bool "EMAC DENM Carrier Support"
+	depends on MACH_SOM9260M
+	help
+	  Support for the EMAC.Inc DENM custom carrier board.
+
 config ARMSTRONG_HWMS
 	bool "EMAC Armstrong HWMS Carrier Support"
 	depends on MACH_SOM9260M
@@ -220,25 +245,31 @@
 config DATA_FUSION
 	bool "Data Fusion Carrier Support"
 	depends on MACH_SOM9260M
-
 	help
 	  Support for the Data Fusion carrier board. Utilizes all
 	  six serial ports, GPIO based I2C, and many GPIO lines.
 
-config SOM_150ES
-	bool "EMAC SOM-150 Carrier Support"
+config EVENT_MEDICAL
+	bool "eVent Medical Carrier Support"
 	depends on MACH_SOM9260M
+
 	help
-	  Support for the EMAC.Inc SOM-150ES carrier board and 
-	  peripherals.	 
+	  Support for the eVent Medical Carrier.
 
 config ECOREEX_SOM9260M
 	bool "EMAC Core Extensions for the SoM-9260M"
-	depends on MACH_SOM9260M && !DATA_FUSION
+	depends on MACH_SOM9260M && !DATA_FUSION && !EVENT_MEDICAL
 	help
 	  Select this to enable support for a PLD on on CS4 on the
 	  SoM-9260M module.
 
+config SOM_9260_1K_TC
+	bool "Set the normal 200 KHz clock to 1 KHz"
+	depends on MACH_SOM9260M
+	help
+	  Select this for the Integrys DENM board to set the normal
+	  200 KHz clock output on the SoM-9260 to about 800 Hz.
+
 if MACH_SOM9260M
 menu "SOM9260 Memory Options"
 
diff -Naur linux-2.6.25.at91/arch/arm/mach-at91/led-som9260m.c linux-2.6/arch/arm/mach-at91/led-som9260m.c
--- linux-2.6.25.at91/arch/arm/mach-at91/led-som9260m.c	2009-02-12 12:26:57.000000000 -0600
+++ linux-2.6/arch/arm/mach-at91/led-som9260m.c	2008-11-24 16:43:16.000000000 -0600
@@ -12,11 +12,28 @@
 #include <asm/arch/at91sam9260.h>
 #include <asm/arch/gpio.h>
 
-#define LED_CNT 2
-
 /* Global Variables Used in the Driver. */
-static int led_array[LED_CNT] = { AT91_PIN_PA9, AT91_PIN_PA10 };
+
+#ifdef CONFIG_DENM_CARRIER
+
+#define LED_CNT 3 /* PA9 or PB20 might be LED depending on SOM rev */
+static int led_array[LED_CNT] = { AT91_PIN_PA9, AT91_PIN_PA10, AT91_PIN_PB20 };
+static char led_value[LED_CNT] = { 0, 0, 0 };
+
+#else 
+#if defined(CONFIG_SOM_150ES_REV2) /* can't use PA9 -- MMC */
+#define LED_CNT 1
+static int led_array[LED_CNT] = { AT91_PIN_PB20 };
+static char led_value[LED_CNT] = { 0 };
+
+#else
+
+/* Could be PB20 or PA9 depending on SOM rev */
+#define LED_CNT 2
+static int led_array[LED_CNT] = { AT91_PIN_PB20, AT91_PIN_PA9 };
 static char led_value[LED_CNT] = { 0, 0 };
+#endif /* CONFIG_SOM_150ES_REV2 */
+#endif
 
 int som9260m_led_init(void)
 {
@@ -46,7 +63,7 @@
 
 static int led_index_write(struct gpio_s *gpio, gpio_data index)
 {
-	if (index > LED_CNT)
+	if (index >= LED_CNT)
 		return -1;
 	if (index < 0)
 		return -1;
diff -Naur linux-2.6.25.at91/arch/arm/mach-at91/pm.c linux-2.6/arch/arm/mach-at91/pm.c
--- linux-2.6.25.at91/arch/arm/mach-at91/pm.c	2009-02-12 12:26:57.000000000 -0600
+++ linux-2.6/arch/arm/mach-at91/pm.c	2008-11-10 18:02:09.000000000 -0600
@@ -26,6 +26,7 @@
 #include <asm/mach-types.h>
 
 #include <asm/arch/at91_pmc.h>
+#include <asm/arch/at91_tc.h>
 #include <asm/arch/gpio.h>
 #include <asm/arch/cpu.h>
 
@@ -258,9 +259,14 @@
 extern u32 at91_slow_clock_sz;
 #endif
 
-
 static int at91_pm_enter(suspend_state_t state)
 {
+#ifdef CONFIG_SOM_9260_1K_TC
+#define RC_VAL 20	
+#define at91_tc_write(reg, val)        __raw_writel((val), reg)
+	unsigned long tc1 = (unsigned long)ioremap(AT91SAM9260_BASE_TC1, SZ_16K);
+#endif
+
 	at91_gpio_suspend();
 	at91_irq_suspend();
 
@@ -295,7 +301,21 @@
 				/* copy slow_clock handler to SRAM, and call it */
 				memcpy(slow_clock, at91_slow_clock, at91_slow_clock_sz);
 #endif
+#ifdef CONFIG_SOM_9260_1K_TC
+				/* Hack to work around the fact that the 9260 switches the clock source
+				 * for TC from slow clock to master clock when the master clock source
+				 * is switched to slow clock, causing frequency changes */
+				at91_tc_write((tc1 + AT91_TC_RC), RC_VAL / 2);
+				at91_tc_write((tc1 + AT91_TC_RB), RC_VAL / 4);
+				at91_tc_write((tc1 + AT91_TC_CCR), AT91_TC_CLKEN | AT91_TC_SWTRG);
+#endif
 				slow_clock();
+#ifdef CONFIG_SOM_9260_1K_TC
+				at91_tc_write((tc1 + AT91_TC_RC), RC_VAL);
+				at91_tc_write((tc1 + AT91_TC_RB), RC_VAL / 2);
+				at91_tc_write((tc1 + AT91_TC_CCR), AT91_TC_CLKEN | AT91_TC_SWTRG);
+#endif
+
 				break;
 			} else {
 				pr_info("AT91: PM - no slow clock mode enabled ...\n");

