diff --git a/board_enable.c b/board_enable.c
index 10608ad..27d2d01 100644
--- a/board_enable.c
+++ b/board_enable.c
@@ -138,7 +138,7 @@
 }
 
 /*
- * Suited for Asus A7V8X-MX SE and A7V400-MX.
+ * Suited for ASUS A7V8X-MX SE and A7V400-MX.
  *
  */
 
@@ -170,6 +170,83 @@
 }
 
 /*
+ * Suited for ASUS P5A.
+ *
+ * This is rather nasty code, but there's no way to do this cleanly.
+ * We're basically talking to some unknown device on SMBus, my guess
+ * is that it is the Winbond W83781D that lives near the DIP BIOS.
+ */
+
+static int board_asus_p5a(const char *name)
+{
+	uint8_t tmp;
+	int i;
+
+#define ASUSP5A_LOOP 5000
+
+	outb(0x00, 0xE807);
+	outb(0xEF, 0xE803);
+
+	outb(0xFF, 0xE800);
+
+	for (i = 0; i < ASUSP5A_LOOP; i++) {
+		outb(0xE1, 0xFF);
+		if (inb(0xE800) & 0x04)
+			break;
+	}
+
+	if (i == ASUSP5A_LOOP) {
+		printf("%s: Unable to contact device.\n", name);
+		return -1;
+	}
+
+	outb(0x20, 0xE801);
+	outb(0x20, 0xE1);
+
+	outb(0xFF, 0xE802);
+
+	for (i = 0; i < ASUSP5A_LOOP; i++) {
+		tmp = inb(0xE800);
+		if (tmp & 0x70)
+			break;
+	}
+
+	if ((i == ASUSP5A_LOOP) || !(tmp & 0x10)) {
+		printf("%s: failed to read device.\n", name);
+		return -1;
+	}
+
+	tmp = inb(0xE804);
+	tmp &= ~0x02;
+
+	outb(0x00, 0xE807);
+	outb(0xEE, 0xE803);
+
+	outb(tmp, 0xE804);
+
+	outb(0xFF, 0xE800);
+	outb(0xE1, 0xFF);
+
+	outb(0x20, 0xE801);
+	outb(0x20, 0xE1);
+
+	outb(0xFF, 0xE802);
+
+	for (i = 0; i < ASUSP5A_LOOP; i++) {
+		tmp = inb(0xE800);
+		if (tmp & 0x70)
+			break;
+	}
+
+	if ((i == ASUSP5A_LOOP) || !(tmp & 0x10)) {
+		printf("%s: failed to write to device.\n", name);
+		return -1;
+	}
+
+	return 0;
+}
+
+/*
  * We use 2 sets of ids here, you're free to choose which is which. This
  * to provide a very high degree of certainty when matching a board on
  * the basis of Subsystem/card ids. As not every vendor handles
@@ -211,7 +288,8 @@
 	 NULL, NULL, "VIA EPIA M/MII/...", board_via_epia_m},
 	{0x1106, 0x3177, 0x1043, 0x80A1, 0x1106, 0x3205, 0x1043, 0x8118,
 	 NULL, NULL, "ASUS A7V8-MX SE", board_asus_a7v8x_mx},
-
+	{0x10B9, 0x1541, 0x0000, 0x0000, 0x10B9, 0x1533, 0x0000, 0x0000,
+	 "asus", "p5a", "ASUS P5A", board_asus_p5a},
 	{0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL}	/* Keep this */
 };
 
