int result = 0;
        unsigned char hostc;
 
+       if (read_write == I2C_SMBUS_READ && command == I2C_SMBUS_BLOCK_DATA)
+               data->block[0] = I2C_SMBUS_BLOCK_MAX;
+       else if (data->block[0] < 1 || data->block[0] > I2C_SMBUS_BLOCK_MAX)
+               return -EPROTO;
+
        if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
                if (read_write == I2C_SMBUS_WRITE) {
                        /* set I2C_EN bit in configuration register */
                }
        }
 
-       if (read_write == I2C_SMBUS_WRITE
-        || command == I2C_SMBUS_I2C_BLOCK_DATA) {
-               if (data->block[0] < 1)
-                       data->block[0] = 1;
-               if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
-                       data->block[0] = I2C_SMBUS_BLOCK_MAX;
-       } else {
-               data->block[0] = 32;    /* max for SMBus block reads */
-       }
-
        /* Experience has shown that the block buffer can only be used for
           SMBus (not I2C) block transactions, even though the datasheet
           doesn't mention this limitation. */