diff --git a/cores/esp32/esp32-hal-touch.c b/cores/esp32/esp32-hal-touch.c
index 7360e77a67d..476df60850c 100644
--- a/cores/esp32/esp32-hal-touch.c
+++ b/cores/esp32/esp32-hal-touch.c
@@ -186,6 +186,7 @@ static touch_value_t __touchRead(uint8_t pin)
 {
     int8_t pad = digitalPinToTouchChannel(pin);
     if(pad < 0){
+        log_e(" No touch pad on selected pin!");
         return 0;
     }
 
@@ -202,6 +203,7 @@ static void __touchConfigInterrupt(uint8_t pin, void (*userFunc)(void), void *Ar
 {
     int8_t pad = digitalPinToTouchChannel(pin);
     if(pad < 0){
+        log_e(" No touch pad on selected pin!");
         return;
     }
 
@@ -264,6 +266,27 @@ bool touchInterruptGetLastStatus(uint8_t pin) {
 }
 #endif
 
+void touchSleepWakeUpEnable(uint8_t pin, touch_value_t threshold)
+{
+    int8_t pad = digitalPinToTouchChannel(pin);
+    if(pad < 0){
+        log_e(" No touch pad on selected pin!");
+        return;
+    }
+    __touchInit();
+    __touchChannelInit(pad);
+
+    #if SOC_TOUCH_VERSION_1        // Only for ESP32 SoC
+    touch_pad_set_thresh(pad, threshold);
+   
+    #elif SOC_TOUCH_VERSION_2
+    touch_pad_sleep_channel_enable(pad, true);
+    touch_pad_sleep_set_threshold(pad, threshold);
+
+    #endif 
+    esp_sleep_enable_touchpad_wakeup();
+}
+
 extern touch_value_t touchRead(uint8_t) __attribute__ ((weak, alias("__touchRead")));
 extern void touchAttachInterrupt(uint8_t, voidFuncPtr, touch_value_t) __attribute__ ((weak, alias("__touchAttachInterrupt")));
 extern void touchAttachInterruptArg(uint8_t, voidArgFuncPtr, void *, touch_value_t) __attribute__ ((weak, alias("__touchAttachArgsInterrupt")));
diff --git a/cores/esp32/esp32-hal-touch.h b/cores/esp32/esp32-hal-touch.h
index e62a4166206..235b8f86d63 100644
--- a/cores/esp32/esp32-hal-touch.h
+++ b/cores/esp32/esp32-hal-touch.h
@@ -89,6 +89,11 @@ void touchInterruptSetThresholdDirection(bool mustbeLower);
 bool touchInterruptGetLastStatus(uint8_t pin);
 #endif
 
+/*
+ * Setup touch pad wake up from deep sleep with given threshold.
+ **/
+void touchSleepWakeUpEnable(uint8_t pin, touch_value_t threshold);
+
 #endif // SOC_TOUCH_SENSOR_NUM > 0
 
 #ifdef __cplusplus
diff --git a/docs/source/api/touch.rst b/docs/source/api/touch.rst
index 75715ffed70..9dd23a8d017 100644
--- a/docs/source/api/touch.rst
+++ b/docs/source/api/touch.rst
@@ -85,6 +85,20 @@ This function is used to detach interrupt from the touch pad.
 
 * ``pin`` GPIO TOUCH pad pin.
 
+touchSleepWakeUpEnable
+^^^^^^^^^^^^^^^^^^^^^^
+
+This function is used to setup touch pad as the wake up source from the deep sleep.
+
+.. note:: ESP32-S2 and ESP32-S3 only support one sleep wake up touch pad.
+
+.. code-block:: arduino
+
+    void touchSleepWakeUpEnable(uint8_t pin, touch_value_t threshold);
+
+* ``pin`` GPIO TOUCH pad pin
+* ``threshold`` Sets the threshold when to wake up
+
 TOUCH API specific for ESP32 chip (TOUCH_V1)
 ********************************************
 
diff --git a/libraries/ESP32/examples/DeepSleep/TouchWakeUp/TouchWakeUp.ino b/libraries/ESP32/examples/DeepSleep/TouchWakeUp/TouchWakeUp.ino
index 76f48b757a4..94f2dc735a2 100644
--- a/libraries/ESP32/examples/DeepSleep/TouchWakeUp/TouchWakeUp.ino
+++ b/libraries/ESP32/examples/DeepSleep/TouchWakeUp/TouchWakeUp.ino
@@ -5,13 +5,20 @@ This code displays how to use deep sleep with
 a touch as a wake up source and how to store data in
 RTC memory to use it over reboots
 
+ESP32 can have multiple touch pads enabled as wakeup source
+ESP32-S2 and ESP32-S3 supports only 1 touch pad as wakeup source enabled
+
 This code is under Public Domain License.
 
 Author:
 Pranav Cherukupalli <cherukupallip@gmail.com>
 */
 
-#define Threshold 40 /* Greater the value, more the sensitivity */
+#if CONFIG_IDF_TARGET_ESP32
+  #define THRESHOLD   40      /* Greater the value, more the sensitivity */
+#else //ESP32-S2 and ESP32-S3 + default for other chips (to be adjusted) */
+  #define THRESHOLD   5000   /* Lower the value, more the sensitivity */
+#endif
 
 RTC_DATA_ATTR int bootCount = 0;
 touch_pad_t touchPin;
@@ -42,24 +49,31 @@ has been awaken from sleep
 void print_wakeup_touchpad(){
   touchPin = esp_sleep_get_touchpad_wakeup_status();
 
-  switch(touchPin)
-  {
-    case 0  : Serial.println("Touch detected on GPIO 4"); break;
-    case 1  : Serial.println("Touch detected on GPIO 0"); break;
-    case 2  : Serial.println("Touch detected on GPIO 2"); break;
-    case 3  : Serial.println("Touch detected on GPIO 15"); break;
-    case 4  : Serial.println("Touch detected on GPIO 13"); break;
-    case 5  : Serial.println("Touch detected on GPIO 12"); break;
-    case 6  : Serial.println("Touch detected on GPIO 14"); break;
-    case 7  : Serial.println("Touch detected on GPIO 27"); break;
-    case 8  : Serial.println("Touch detected on GPIO 33"); break;
-    case 9  : Serial.println("Touch detected on GPIO 32"); break;
-    default : Serial.println("Wakeup not by touchpad"); break;
-  }
-}
-
-void callback(){
-  //placeholder callback function
+  #if CONFIG_IDF_TARGET_ESP32
+    switch(touchPin)
+    {
+      case 0  : Serial.println("Touch detected on GPIO 4"); break;
+      case 1  : Serial.println("Touch detected on GPIO 0"); break;
+      case 2  : Serial.println("Touch detected on GPIO 2"); break;
+      case 3  : Serial.println("Touch detected on GPIO 15"); break;
+      case 4  : Serial.println("Touch detected on GPIO 13"); break;
+      case 5  : Serial.println("Touch detected on GPIO 12"); break;
+      case 6  : Serial.println("Touch detected on GPIO 14"); break;
+      case 7  : Serial.println("Touch detected on GPIO 27"); break;
+      case 8  : Serial.println("Touch detected on GPIO 33"); break;
+      case 9  : Serial.println("Touch detected on GPIO 32"); break;
+      default : Serial.println("Wakeup not by touchpad"); break;
+    }
+  #else
+    if(touchPin < TOUCH_PAD_MAX)
+    {
+      Serial.printf("Touch detected on GPIO %d\n", touchPin); 
+    }
+    else
+    {
+      Serial.println("Wakeup not by touchpad");
+    }
+  #endif
 }
 
 void setup(){
@@ -74,11 +88,16 @@ void setup(){
   print_wakeup_reason();
   print_wakeup_touchpad();
 
-  //Setup interrupt on Touch Pad 3 (GPIO15)
-  touchAttachInterrupt(T3, callback, Threshold);
+  #if CONFIG_IDF_TARGET_ESP32 
+  //Setup sleep wakeup on Touch Pad 3 + 7 (GPIO15 + GPIO 27) 
+  touchSleepWakeUpEnable(T3,THRESHOLD);
+  touchSleepWakeUpEnable(T7,THRESHOLD);
+  
+  #else //ESP32-S2 + ESP32-S3
+  //Setup sleep wakeup on Touch Pad 3 (GPIO3) 
+  touchSleepWakeUpEnable(T3,THRESHOLD);
 
-  //Configure Touchpad as wakeup source
-  esp_sleep_enable_touchpad_wakeup();
+  #endif
 
   //Go to sleep now
   Serial.println("Going to sleep now");
@@ -88,4 +107,4 @@ void setup(){
 
 void loop(){
   //This will never be reached
-}
+}
\ No newline at end of file