From 06d46a0ef96a766b114db5902beccb86829ba57c Mon Sep 17 00:00:00 2001
From: "Alexey D. Filimonov" <alexey@filimonic.net>
Date: Sat, 5 Aug 2023 03:07:56 +0300
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20AUTO=5FPOWER=5FSPINDLE=5FLASER=20(#?=
 =?UTF-8?q?25739)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Marlin/Configuration.h             | 11 ++++++-----
 Marlin/src/feature/power.cpp       |  8 ++++++++
 Marlin/src/inc/Conditionals_post.h |  3 +++
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 4dbc2a8c11e..22b060dcb22 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -412,11 +412,12 @@
 
   //#define AUTO_POWER_CONTROL      // Enable automatic control of the PS_ON pin
   #if ENABLED(AUTO_POWER_CONTROL)
-    #define AUTO_POWER_FANS         // Turn on PSU if fans need power
-    #define AUTO_POWER_E_FANS
-    #define AUTO_POWER_CONTROLLERFAN
-    #define AUTO_POWER_CHAMBER_FAN
-    #define AUTO_POWER_COOLER_FAN
+    #define AUTO_POWER_FANS           // Turn on PSU for fans
+    #define AUTO_POWER_E_FANS         // Turn on PSU for E Fans
+    #define AUTO_POWER_CONTROLLERFAN  // Turn on PSU for Controller Fan
+    #define AUTO_POWER_CHAMBER_FAN    // Turn on PSU for Chamber Fan
+    #define AUTO_POWER_COOLER_FAN     // Turn on PSU for Cooler Fan
+    #define AUTO_POWER_SPINDLE_LASER  // Turn on PSU for Spindle/Laser
     #define POWER_TIMEOUT              30 // (s) Turn off power if the machine is idle for this duration
     //#define POWER_OFF_DELAY          60 // (s) Delay of poweroff after M81 command. Useful to let fans run for extra time.
   #endif
diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp
index d0f8a66fec3..e908c8292fd 100644
--- a/Marlin/src/feature/power.cpp
+++ b/Marlin/src/feature/power.cpp
@@ -53,6 +53,10 @@ bool Power::psu_on;
     #include "controllerfan.h"
   #endif
 
+  #if ANY(LASER_FEATURE, SPINDLE_FEATURE)
+    #include "spindle_laser.h"
+  #endif
+
   millis_t Power::lastPowerOn;
 #endif
 
@@ -196,6 +200,10 @@ void Power::power_off() {
       if (controllerFan.state()) return true;
     #endif
 
+    #if ANY(LASER_FEATURE, SPINDLE_FEATURE)
+      if (TERN0(AUTO_POWER_SPINDLE_LASER, cutter.enabled())) return true;
+    #endif
+
     if (TERN0(AUTO_POWER_CHAMBER_FAN, thermalManager.chamberfan_speed))
       return true;
 
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 13f20114e50..8f3a2eee27b 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -2623,6 +2623,9 @@
 #if !HAS_AUTO_COOLER_FAN || AUTO_COOLER_IS_E
   #undef AUTO_POWER_COOLER_FAN
 #endif
+#if !HAS_CUTTER
+  #undef AUTO_POWER_SPINDLE_LASER
+#endif
 
 /**
  * Controller Fan Settings