Index: lm-sensors/trunk/kernel/busses/i2c-i810.c
===================================================================
--- lm-sensors/trunk/kernel/busses/i2c-i810.c	(revision 1281)
+++ lm-sensors/trunk/kernel/busses/i2c-i810.c	(revision 1427)
@@ -130,4 +130,5 @@
 	outlong((val ? SCL_VAL_OUT : 0) | SCL_DIR | SCL_DIR_MASK | SCL_VAL_MASK,
 	     I810_GPIOB);
+	readlong(I810_GPIOB);	/* flush posted write */
 }
 
@@ -136,4 +137,5 @@
  	outlong((val ? SDA_VAL_OUT : 0) | SDA_DIR | SDA_DIR_MASK | SDA_VAL_MASK,
 	     I810_GPIOB);
+	readlong(I810_GPIOB);	/* flush posted write */
 }
 
@@ -162,4 +164,5 @@
 	outlong((val ? SCL_VAL_OUT : 0) | SCL_DIR | SCL_DIR_MASK | SCL_VAL_MASK,
 	     I810_GPIOA);
+	readlong(I810_GPIOA);	/* flush posted write */
 }
 
@@ -168,4 +171,5 @@
  	outlong((val ? SDA_VAL_OUT : 0) | SDA_DIR | SDA_DIR_MASK | SDA_VAL_MASK,
 	     I810_GPIOA);
+	readlong(I810_GPIOA);	/* flush posted write */
 }
 
@@ -237,8 +241,10 @@
 	cadr &= PCI_BASE_ADDRESS_MEM_MASK;
 	mem = ioremap_nocache(cadr, 0x1000);
-	bit_i810i2c_setscl(NULL, 1);
-	bit_i810i2c_setsda(NULL, 1);
-	bit_i810ddc_setscl(NULL, 1);
-	bit_i810ddc_setsda(NULL, 1);
+	if(mem) {
+		bit_i810i2c_setscl(NULL, 1);
+		bit_i810i2c_setsda(NULL, 1);
+		bit_i810ddc_setscl(NULL, 1);
+		bit_i810ddc_setsda(NULL, 1);
+	}
 }
 
@@ -254,4 +260,6 @@
 					   *num++, dev))) {
 			config_i810(dev);
+			if(!mem)
+				return -ENOMEM;
 			printk("i2c-i810.o: i810/i815 found.\n");
 			return 0;
