diff --git a/ChangeLog b/ChangeLog
index e55724f9..129c3079 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2021-11-14  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	Submitted by David Mosberger-Tang:
+	patch #9320: fix TPI RESET in bitbang.c
+	* bitbang.c (bitbang_initialize): wait for 128 ms after deasserting
+	/RESET (per datasheet), and keep /RESET low during MOSI/MISO link check
+
 2021-11-12  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	Submitted by Jon Thacker:
diff --git a/NEWS b/NEWS
index e6c91cd5..0628ff63 100644
--- a/NEWS
+++ b/NEWS
@@ -106,6 +106,7 @@ Current:
     patch #8957: Allow reading prodsig memory from stk500v2 on xmega devices
     patch #9110: Let reserved fuse bits to be read as *don't care*
     patch #9253: Fix for giving terminal_mode commands more than 20 arguments
+    patch #9320: fix TPI RESET in bitbang.c
 
   * Internals:
     - New avrdude.conf keyword "family_id", used to verify SIB attributes
diff --git a/bitbang.c b/bitbang.c
index 6c6c9912..fe06c425 100644
--- a/bitbang.c
+++ b/bitbang.c
@@ -542,7 +542,10 @@ int bitbang_initialize(PROGRAMMER * pgm, AVRPART * p)
 
 	/* bring RESET high first */
     pgm->setpin(pgm, PIN_AVR_RESET, 1);
-	usleep(1000);
+    usleep(128000);	/* wait t_TOUT (32-128ms) */
+
+    /* RESET must be LOW in case the existing code is driving the TPI pins: */
+    pgm->setpin(pgm, PIN_AVR_RESET, 0);
 
     avrdude_message(MSG_NOTICE2, "doing MOSI-MISO link check\n");