diff -ruNp linux-2.6.15-e3-02/drivers/input/keyboard/omap-keypad.c linux-2.6.15-e3-03/drivers/input/keyboard/omap-keypad.c
--- linux-2.6.15-e3-02/drivers/input/keyboard/omap-keypad.c	2006-03-03 18:19:17.603061000 +0000
+++ linux-2.6.15-e3-03/drivers/input/keyboard/omap-keypad.c	2006-03-01 21:56:41.000000000 +0000
@@ -169,6 +169,66 @@ static int p2_keymap[] = {
 	0
 };
 
+static int ams_delta_keymap[] = {
+	KEY(7, 0, KEY_1),
+	KEY(6, 0, KEY_2),
+	KEY(5, 0, KEY_3),
+	KEY(7, 1, KEY_4),
+	KEY(6, 1, KEY_5),
+	KEY(5, 1, KEY_6),
+	KEY(7, 2, KEY_7),
+	KEY(6, 2, KEY_8),
+	KEY(5, 2, KEY_9),
+	KEY(6, 3, KEY_0),
+	KEY(7, 3, KEY_KPASTERISK),
+	KEY(5, 3, KEY_SHARP),
+
+	KEY(4, 3, KEY_Q),
+	KEY(3, 3, KEY_W),
+	KEY(2, 3, KEY_E),
+	KEY(1, 3, KEY_R),
+	KEY(0, 3, KEY_T),
+	KEY(7, 4, KEY_Y),
+	KEY(6, 4, KEY_U),
+	KEY(5, 4, KEY_I),
+	KEY(4, 4, KEY_O),
+	KEY(3, 4, KEY_P),
+
+	KEY(2, 4, KEY_A),
+	KEY(1, 4, KEY_S),
+	KEY(0, 4, KEY_D),
+	KEY(7, 5, KEY_F),
+	KEY(6, 5, KEY_G),
+	KEY(5, 5, KEY_H),
+	KEY(4, 5, KEY_J),
+	KEY(3, 5, KEY_K),
+	KEY(2, 5, KEY_L),
+
+	KEY(1, 5, KEY_Z),
+	KEY(0, 5, KEY_X),
+	KEY(7, 6, KEY_C),
+	KEY(6, 6, KEY_V),
+	KEY(5, 6, KEY_B),
+	KEY(4, 6, KEY_N),
+	KEY(3, 6, KEY_M),
+	KEY(2, 6, KEY_SPACE),
+
+	KEY(1, 0, KEY_DELETE),		/* Delete */
+
+	KEY(0, 6, KEY_ENTER),		/* Video */
+
+	KEY(4, 0, KEY_SLASH),		/* Home */
+	KEY(4, 1, KEY_BACKSLASH),	/* Office */
+	KEY(4, 2, KEY_MINUS),		/* Mobile */
+	KEY(7, 7, KEY_APOSTROPHE),	/* Mobile Msg */
+	KEY(5, 7, KEY_BACKSPACE),	/* Email */
+
+	KEY(0, 7, KEY_LEFTSHIFT),	/* Vol up */
+	KEY(3, 7, KEY_LEFTCTRL),	/* Vol down */
+
+	0
+};
+
 static int *keymap;
 
 static irqreturn_t omap_kp_interrupt(int irq, void *dev_id,
@@ -321,6 +381,8 @@ static int __init omap_kp_probe(struct p
 	} else if (machine_is_omap_perseus2()) {
 		keymap = p2_keymap;
 		keypad_irq = INT_730_MPUIO_KEYPAD;
+	} else if (machine_is_ams_delta()) {
+		keymap = ams_delta_keymap;
 	} else {
 		keymap = test_keymap;
 	}

