diff -urN linux-2.6.19-clean/arch/arm/mach-omap1/board-ams-delta.c linux-2.6.19/arch/arm/mach-omap1/board-ams-delta.c
--- linux-2.6.19-clean/arch/arm/mach-omap1/board-ams-delta.c	2007-01-23 22:18:37.000000000 +0000
+++ linux-2.6.19/arch/arm/mach-omap1/board-ams-delta.c	2007-02-02 23:02:09.000000000 +0000
@@ -16,8 +16,12 @@
 #include <linux/init.h>
 #include <linux/input.h>
 #include <linux/platform_device.h>
+#include <linux/serial.h>
+#include <linux/serial_core.h>
+#include <linux/irq.h>
 
 #include <asm/hardware.h>
+#include <asm/serial.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 #include <asm/mach/map.h>
@@ -137,6 +141,8 @@
 	omap1_init_common_hw();
 	omap_init_irq();
 	omap_gpio_init();
+	/* Set IRQ triggering for modem. */
+	set_irq_type(OMAP_GPIO_IRQ(2), IRQ_TYPE_EDGE_RISING);
 }
 
 static struct map_desc ams_delta_io_desc[] __initdata = {
@@ -225,6 +231,17 @@
 	&ams_delta_led_device,
 };
 
+static struct uart_port ams_delta_modem_port = {
+	.membase	= (void *) AMS_DELTA_MODEM_VIRT,
+	.mapbase	= AMS_DELTA_MODEM_PHYS,
+	.irq		= OMAP_GPIO_IRQ(2),
+	.flags		= UPF_BOOT_AUTOCONF,
+	.iotype		= UPIO_MEM,
+	.regshift	= 1,
+	.uartclk	= BASE_BAUD * 16,
+	.line		= 1
+};
+
 static void __init ams_delta_init(void)
 {
 	printk("ams_delta_init\n\r");
@@ -235,10 +252,13 @@
 	omap_serial_init();
 
 	/* Clear latch2 (NAND, LCD, modem enable) */
-	ams_delta_latch2_write(~0, 0);
+	ams_delta_latch2_write(~0, AMS_DELTA_LATCH2_MODEM_NRESET |
+					AMS_DELTA_LATCH2_MODEM_CODEC);
 
 	platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));
 
+	early_serial_setup(&ams_delta_modem_port);
+
 #ifdef CONFIG_AMS_DELTA_FIQ
 	/* this can't be done in init_irq - the kernel fails to boot */
 	ams_delta_init_fiq();

