|  |  |  | @ -2908,6 +2908,9 @@ inline void gcode_G28() { | 
			
		
	
		
			
				
					|  |  |  |  |   #if ENABLED(MESH_BED_LEVELING) | 
			
		
	
		
			
				
					|  |  |  |  |     float pre_home_z = MESH_HOME_SEARCH_Z; | 
			
		
	
		
			
				
					|  |  |  |  |     if (mbl.active()) { | 
			
		
	
		
			
				
					|  |  |  |  |       #if ENABLED(DEBUG_LEVELING_FEATURE) | 
			
		
	
		
			
				
					|  |  |  |  |         if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("MBL was active"); | 
			
		
	
		
			
				
					|  |  |  |  |       #endif | 
			
		
	
		
			
				
					|  |  |  |  |       // Save known Z position if already homed
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) { | 
			
		
	
		
			
				
					|  |  |  |  |         pre_home_z = current_position[Z_AXIS]; | 
			
		
	
	
		
			
				
					|  |  |  | @ -2915,6 +2918,9 @@ inline void gcode_G28() { | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  |       mbl.set_active(false); | 
			
		
	
		
			
				
					|  |  |  |  |       current_position[Z_AXIS] = pre_home_z; | 
			
		
	
		
			
				
					|  |  |  |  |       #if ENABLED(DEBUG_LEVELING_FEATURE) | 
			
		
	
		
			
				
					|  |  |  |  |         if (DEBUGGING(LEVELING)) DEBUG_POS("Set Z to pre_home_z", current_position); | 
			
		
	
		
			
				
					|  |  |  |  |       #endif | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -3140,7 +3146,13 @@ inline void gcode_G28() { | 
			
		
	
		
			
				
					|  |  |  |  |   // Enable mesh leveling again
 | 
			
		
	
		
			
				
					|  |  |  |  |   #if ENABLED(MESH_BED_LEVELING) | 
			
		
	
		
			
				
					|  |  |  |  |     if (mbl.has_mesh()) { | 
			
		
	
		
			
				
					|  |  |  |  |       #if ENABLED(DEBUG_LEVELING_FEATURE) | 
			
		
	
		
			
				
					|  |  |  |  |         if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("MBL has mesh"); | 
			
		
	
		
			
				
					|  |  |  |  |       #endif | 
			
		
	
		
			
				
					|  |  |  |  |       if (home_all_axis || (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && homeZ)) { | 
			
		
	
		
			
				
					|  |  |  |  |         #if ENABLED(DEBUG_LEVELING_FEATURE) | 
			
		
	
		
			
				
					|  |  |  |  |           if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("MBL Z homing"); | 
			
		
	
		
			
				
					|  |  |  |  |         #endif | 
			
		
	
		
			
				
					|  |  |  |  |         current_position[Z_AXIS] = MESH_HOME_SEARCH_Z | 
			
		
	
		
			
				
					|  |  |  |  |           #if Z_HOME_DIR > 0 | 
			
		
	
		
			
				
					|  |  |  |  |             + Z_MAX_POS | 
			
		
	
	
		
			
				
					|  |  |  | @ -3154,6 +3166,9 @@ inline void gcode_G28() { | 
			
		
	
		
			
				
					|  |  |  |  |           feedrate = homing_feedrate[Z_AXIS]; | 
			
		
	
		
			
				
					|  |  |  |  |           line_to_destination(); | 
			
		
	
		
			
				
					|  |  |  |  |           stepper.synchronize(); | 
			
		
	
		
			
				
					|  |  |  |  |           #if ENABLED(DEBUG_LEVELING_FEATURE) | 
			
		
	
		
			
				
					|  |  |  |  |             if (DEBUGGING(LEVELING)) DEBUG_POS("MBL Rest Origin", current_position); | 
			
		
	
		
			
				
					|  |  |  |  |           #endif | 
			
		
	
		
			
				
					|  |  |  |  |         #else | 
			
		
	
		
			
				
					|  |  |  |  |           current_position[Z_AXIS] = MESH_HOME_SEARCH_Z - | 
			
		
	
		
			
				
					|  |  |  |  |             mbl.get_z(RAW_CURRENT_POSITION(X_AXIS), RAW_CURRENT_POSITION(Y_AXIS)) | 
			
		
	
	
		
			
				
					|  |  |  | @ -3161,6 +3176,9 @@ inline void gcode_G28() { | 
			
		
	
		
			
				
					|  |  |  |  |               + Z_MAX_POS | 
			
		
	
		
			
				
					|  |  |  |  |             #endif | 
			
		
	
		
			
				
					|  |  |  |  |           ; | 
			
		
	
		
			
				
					|  |  |  |  |           #if ENABLED(DEBUG_LEVELING_FEATURE) | 
			
		
	
		
			
				
					|  |  |  |  |             if (DEBUGGING(LEVELING)) DEBUG_POS("MBL adjusted MESH_HOME_SEARCH_Z", current_position); | 
			
		
	
		
			
				
					|  |  |  |  |           #endif | 
			
		
	
		
			
				
					|  |  |  |  |         #endif | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  |       else if ((axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) && (homeX || homeY)) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -3169,6 +3187,9 @@ inline void gcode_G28() { | 
			
		
	
		
			
				
					|  |  |  |  |         mbl.set_active(true); | 
			
		
	
		
			
				
					|  |  |  |  |         current_position[Z_AXIS] = pre_home_z - | 
			
		
	
		
			
				
					|  |  |  |  |           mbl.get_z(RAW_CURRENT_POSITION(X_AXIS), RAW_CURRENT_POSITION(Y_AXIS)); | 
			
		
	
		
			
				
					|  |  |  |  |         #if ENABLED(DEBUG_LEVELING_FEATURE) | 
			
		
	
		
			
				
					|  |  |  |  |           if (DEBUGGING(LEVELING)) DEBUG_POS("MBL Home X or Y", current_position); | 
			
		
	
		
			
				
					|  |  |  |  |         #endif | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
	
		
			
				
					|  |  |  | 
 |