diff -ruN a/drivers/i2c/busses/i2c-intel-mid.c b/drivers/i2c/busses/i2c-intel-mid.c
--- a/drivers/i2c/busses/i2c-intel-mid.c	2010-11-23 09:36:29.750000000 +0800
+++ b/drivers/i2c/busses/i2c-intel-mid.c	2010-11-23 10:12:51.950754633 +0800
@@ -54,6 +54,11 @@
 	STATUS_STANDBY
 };
 
+/* The FIFO buffer size is different with different CPU stepping */
+/* It is better to read the size from board setting */
+/* Currently, pre-define it as 32-byte; it is safe for all CPU stepping */
+#define I2C_FIFO_SIZE	32
+
 /**
  * struct intel_mid_i2c_private	- per device I²C context
  * @adap: core i2c layer adapter information
@@ -531,9 +536,10 @@
 	int i = length;
 	int err;
 
-	if (length >= 256) {
+	if (length >= I2C_FIFO_SIZE) {
 		dev_err(&adap->dev,
-			"I2C FIFO cannot support larger than 256 bytes\n");
+			"I2C FIFO cannot support larger than %d bytes\n",
+			I2C_FIFO_SIZE);
 		return -EMSGSIZE;
 	}
 
@@ -584,9 +590,10 @@
 	struct intel_mid_i2c_private *i2c = i2c_get_adapdata(adap);
 	int i, err;
 
-	if (length >= 256) {
+	if (length >= I2C_FIFO_SIZE) {
 		dev_err(&adap->dev,
-			"I2C FIFO cannot support larger than 256 bytes\n");
+			"I2C FIFO cannot support larger than %d bytes\n",
+			I2C_FIFO_SIZE);
 		return -EMSGSIZE;
 	}
 
