Index: /i2c/trunk/kernel/i2c-dev.h
===================================================================
--- /i2c/trunk/kernel/i2c-dev.h	(revision 3450)
+++ /i2c/trunk/kernel/i2c-dev.h	(revision 3491)
@@ -163,4 +163,18 @@
 }
 
+extern inline __s32 i2c_smbus_write_i2c_block_data(int file, __u8 command,
+                                               __u8 length, __u8 *values)
+{
+	union i2c_smbus_data data;
+	int i;
+	if (length > 32)
+		length = 32;
+	for (i = 1; i <= length; i++)
+		data.block[i] = values[i-1];
+	data.block[0] = length;
+	return i2c_smbus_access(file,I2C_SMBUS_WRITE,command,
+	                        I2C_SMBUS_I2C_BLOCK_DATA, &data);
+}
+
 #endif /* ndef __KERNEL__ */
 
Index: /i2c/trunk/kernel/i2c-core.c
===================================================================
--- /i2c/trunk/kernel/i2c-core.c	(revision 3482)
+++ /i2c/trunk/kernel/i2c-core.c	(revision 3491)
@@ -1110,4 +1110,19 @@
 }
 
+extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client,
+                                          u8 command, u8 length, u8 *values)
+{
+	union i2c_smbus_data data;
+	int i;
+	if (length > 32)
+		length = 32;
+	for (i = 1; i <= length; i++)
+		data.block[i] = values[i-1];
+	data.block[0] = length;
+	return i2c_smbus_xfer(client->adapter,client->addr,client->flags,
+	                      I2C_SMBUS_WRITE,command,
+	                      I2C_SMBUS_I2C_BLOCK_DATA,&data);
+}
+
 /* Simulate a SMBus command using the i2c protocol 
    No checking of parameters is done!  */
Index: /i2c/trunk/kernel/i2c.h
===================================================================
--- /i2c/trunk/kernel/i2c.h	(revision 3486)
+++ /i2c/trunk/kernel/i2c.h	(revision 3491)
@@ -121,4 +121,7 @@
                                       u8 command, u8 length,
                                       u8 *values);
+extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client,
+                                          u8 command, u8 length,
+                                          u8 *values);
 
 
@@ -438,10 +441,11 @@
 /* SMBus transaction types (size parameter in the above functions) 
    Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
-#define I2C_SMBUS_QUICK		0
-#define I2C_SMBUS_BYTE		1
-#define I2C_SMBUS_BYTE_DATA	2 
-#define I2C_SMBUS_WORD_DATA	3
-#define I2C_SMBUS_PROC_CALL	4
-#define I2C_SMBUS_BLOCK_DATA	5
+#define I2C_SMBUS_QUICK		    0
+#define I2C_SMBUS_BYTE		    1
+#define I2C_SMBUS_BYTE_DATA	    2 
+#define I2C_SMBUS_WORD_DATA	    3
+#define I2C_SMBUS_PROC_CALL	    4
+#define I2C_SMBUS_BLOCK_DATA	    5
+#define I2C_SMBUS_I2C_BLOCK_DATA    6
 
 
Index: /i2c/trunk/kernel/i2c-dev.c
===================================================================
--- /i2c/trunk/kernel/i2c-dev.c	(revision 3487)
+++ /i2c/trunk/kernel/i2c-dev.c	(revision 3491)
@@ -294,5 +294,6 @@
 		    (data_arg.size != I2C_SMBUS_WORD_DATA) &&
 		    (data_arg.size != I2C_SMBUS_PROC_CALL) &&
-		    (data_arg.size != I2C_SMBUS_BLOCK_DATA)) {
+		    (data_arg.size != I2C_SMBUS_BLOCK_DATA) &&
+                    (data_arg.size != I2C_SMBUS_I2C_BLOCK_DATA)) {
 #ifdef DEBUG
 			printk("i2c-dev.o: size out of range (%x) in ioctl I2C_SMBUS.\n",
Index: /i2c/trunk/CHANGES
===================================================================
--- /i2c/trunk/CHANGES	(revision 3481)
+++ /i2c/trunk/CHANGES	(revision 3491)
@@ -14,5 +14,8 @@
       cvs diff -r V2-0-0 -r V2-0-1 -u
 
-2.5.2 (200007??)
+2.5.3 (2000????)
+  i2c-core.c, i2c-dev.c, i2c-dev.h, i2c.h: Add i2c block read/write support
+
+2.5.2 (20000709)
   i2c-philips-par: Now compiles on all 2.2 kernels
   i2c-core: Corrected some SMBus block commands-related stuff
