diff --git a/src/southbridge/amd/sb700/lpc.c b/src/southbridge/amd/sb700/lpc.c
index 643a5a1..a56ccf0 100644
--- a/src/southbridge/amd/sb700/lpc.c
+++ b/src/southbridge/amd/sb700/lpc.c
@@ -144,83 +144,85 @@
 		device_t child;
 		for (child = link->children; child;
 		     child = child->sibling) {
-			if (child->enabled
-			    && (child->path.type == DEVICE_PATH_PNP)) {
-				struct resource *res;
-				for (res = child->resource_list; res; res = res->next) {
-					u32 base, end;	/*  don't need long long */
-					if (!(res->flags & IORESOURCE_IO))
+			if (!(child->enabled
+				&& (child->path.type == DEVICE_PATH_PNP)))
+				continue;
+
+			struct resource *res;
+			for (res = child->resource_list; res; res = res->next) {
+				u32 base, end;	/*  don't need long long */
+				if (!(res->flags & IORESOURCE_IO))
+					continue;
+				base = res->base;
+				end = resource_end(res);
+				printk(BIOS_DEBUG, "sb700 lpc decode:%s,"
+					" base=0x%08x, end=0x%08x\n",
+					dev_path(child), base, end);
+				switch (base) {
+				case 0x60:	/*  KB */
+				case 0x64:	/*  MS */
+					reg |= (1 << 29);
+					break;
+				case 0x3f8:	/*  COM1 */
+					reg |= (1 << 6);
+					break;
+				case 0x2f8:	/*  COM2 */
+					reg |= (1 << 7);
+					break;
+				case 0x378:	/*  Parallel 1 */
+					reg |= (1 << 0);
+					reg |= (1 << 1); /* + 0x778 for ECP */
+					break;
+				case 0x3f0:	/*  FD0 */
+					reg |= (1 << 26);
+					break;
+				case 0x220:	/*  Audio 0 */
+					reg |= (1 << 8);
+					break;
+				case 0x300:	/*  Midi 0 */
+					reg |= (1 << 18);
+					break;
+				case 0x400:
+					reg_x |= (1 << 16);
+					break;
+				case 0x480:
+					reg_x |= (1 << 17);
+					break;
+				case 0x500:
+					reg_x |= (1 << 18);
+					break;
+				case 0x580:
+					reg_x |= (1 << 19);
+					break;
+				case 0x4700:
+					reg_x |= (1 << 22);
+					break;
+				case 0xfd60:
+					reg_x |= (1 << 23);
+					break;
+				default:
+					/* only 3 var ; compact them ? */
+					if (var_num >= 3)
 						continue;
-					base = res->base;
-					end = resource_end(res);
-					printk(BIOS_DEBUG, "sb700 lpc decode:%s, base=0x%08x, end=0x%08x\n",
-					     dev_path(child), base, end);
-					switch (base) {
-					case 0x60:	/*  KB */
-					case 0x64:	/*  MS */
-						reg |= (1 << 29);
+					switch (var_num) {
+					case 0:
+						reg_x |= (1 << 2);
+						if ((end - base) < 16)
+							wiosize |= (1 << 0);
 						break;
-					case 0x3f8:	/*  COM1 */
-						reg |= (1 << 6);
+					case 1:
+						reg_x |= (1 << 24);
+						if ((end - base) < 16)
+							wiosize |= (1 << 2);
 						break;
-					case 0x2f8:	/*  COM2 */
-						reg |= (1 << 7);
+					case 2:
+						reg_x |= (1 << 25);
+						reg_x |= (1 << 24);
+						if ((end - base) < 16)
+							wiosize |= (1 << 3);
 						break;
-					case 0x378:	/*  Parallel 1 */
-						reg |= (1 << 0);
-						reg |= (1 << 1); /* + 0x778 for ECP */
-						break;
-					case 0x3f0:	/*  FD0 */
-						reg |= (1 << 26);
-						break;
-					case 0x220:	/*  Audio 0 */
-						reg |= (1 << 8);
-						break;
-					case 0x300:	/*  Midi 0 */
-						reg |= (1 << 18);
-						break;
-					case 0x400:
-						reg_x |= (1 << 16);
-						break;
-					case 0x480:
-						reg_x |= (1 << 17);
-						break;
-					case 0x500:
-						reg_x |= (1 << 18);
-						break;
-					case 0x580:
-						reg_x |= (1 << 19);
-						break;
-					case 0x4700:
-						reg_x |= (1 << 22);
-						break;
-					case 0xfd60:
-						reg_x |= (1 << 23);
-						break;
-					default:
-						if (var_num >= 3)
-							continue;	/* only 3 var ; compact them ? */
-						switch (var_num) {
-						case 0:
-							reg_x |= (1 << 2);
-							if ((end - base) < 16)
-								wiosize |= (1 << 0);
-							break;
-						case 1:
-							reg_x |= (1 << 24);
-							if ((end - base) < 16)
-								wiosize |= (1 << 2);
-							break;
-						case 2:
-							reg_x |= (1 << 25);
-							reg_x |= (1 << 24);
-							if ((end - base) < 16)
-								wiosize |= (1 << 3);
-							break;
-						}
-						reg_var[var_num++] =
-						    base & 0xffff;
 					}
+					reg_var[var_num++] = base & 0xffff;
 				}
 			}
 		}
