From a58d35d765c091ec4aab6af893e5b3ad353cb3d5 Mon Sep 17 00:00:00 2001
From: Mathew Winters <mathew@winters.org.nz>
Date: Sun, 13 Mar 2022 14:13:41 +1300
Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20G12=20-=20Only=20require?=
 =?UTF-8?q?=20used=20axes=20to=20be=20homed=20(#23422)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
---
 Marlin/src/gcode/feature/clean/G12.cpp | 3 ++-
 Marlin/src/module/motion.h             | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Marlin/src/gcode/feature/clean/G12.cpp b/Marlin/src/gcode/feature/clean/G12.cpp
index a0b87b1abc9..999a9b10bd8 100644
--- a/Marlin/src/gcode/feature/clean/G12.cpp
+++ b/Marlin/src/gcode/feature/clean/G12.cpp
@@ -46,7 +46,8 @@
  */
 void GcodeSuite::G12() {
   // Don't allow nozzle cleaning without homing first
-  if (homing_needed_error()) return;
+  if (homing_needed_error(linear_bits & ~TERN0(NOZZLE_CLEAN_NO_Z, Z_AXIS) & ~TERN0(NOZZLE_CLEAN_NO_Y, Y_AXIS)))
+    return;
 
   #ifdef WIPE_SEQUENCE_COMMANDS
     if (!parser.seen_any()) {
diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h
index 2fbb4ce1147..1dd6d8c4ede 100644
--- a/Marlin/src/module/motion.h
+++ b/Marlin/src/module/motion.h
@@ -404,7 +404,7 @@ void set_axis_is_at_home(const AxisEnum axis);
   constexpr linear_axis_bits_t axis_homed = linear_bits, axis_trusted = linear_bits; // Zero-endstop machines are always homed and trusted
   inline void homeaxis(const AxisEnum axis)           {}
   inline void set_axis_never_homed(const AxisEnum)    {}
-  inline linear_axis_bits_t axes_should_home(linear_axis_bits_t=linear_bits) { return false; }
+  inline linear_axis_bits_t axes_should_home(linear_axis_bits_t=linear_bits) { return 0; }
   inline bool homing_needed_error(linear_axis_bits_t=linear_bits) { return false; }
   inline void set_axis_unhomed(const AxisEnum axis)   {}
   inline void set_axis_untrusted(const AxisEnum axis) {}