--- a/drivers/misc/eeprom/at24.c	2016-10-06 12:45:49.290365545 +0000
+++ b/drivers/misc/eeprom/at24.c	2016-10-06 12:47:08.630368526 +0000
@@ -84,9 +84,9 @@
  *
  * This value is forced to be a power of two so that writes align on pages.
  */
-static unsigned io_limit = 128;
+static unsigned io_limit = 32;
 module_param(io_limit, uint, 0);
-MODULE_PARM_DESC(io_limit, "Maximum bytes per I/O (default 128)");
+MODULE_PARM_DESC(io_limit, "Maximum bytes per I/O (default 32)");
 
 /*
  * Specs often allow 5 msec for a page write, sometimes 20 msec;
@@ -192,7 +192,8 @@
 			count = I2C_SMBUS_BLOCK_MAX;
 		break;
 	case I2C_SMBUS_WORD_DATA:
-		count = 2;
+		/* Check for odd length transaction */
+		count = (count == 1) ? 1 : 2;
 		break;
 	case I2C_SMBUS_BYTE_DATA:
 		count = 1;
@@ -237,7 +238,8 @@
 			status = i2c_smbus_read_word_data(client, offset);
 			if (status >= 0) {
 				buf[0] = status & 0xff;
-				buf[1] = status >> 8;
+				if (count == 2)
+					buf[1] = status >> 8;
 				status = count;
 			}
 			break;
