From b99a145b9f9234bae0a1b36df264205db1db18b1 Mon Sep 17 00:00:00 2001
From: Tomasz 'CeDeROM' CEDRO <tomek@cedro.info>
Date: Sun, 10 Apr 2022 22:28:44 +0200
Subject: [PATCH 01/31] Added KT-LINK FT2232H interface with IO switching and
 voltage buffers.

Example TPI run: https://github.com/avrdudes/avrdude/issues/928

Signed-off-by: Tomasz 'CeDeROM' CEDRO <tomek@cedro.info>
---
 src/avrdude.conf.in | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index 096751d0..231147ee 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -593,6 +593,38 @@ programmer
   reset  = 3; # TMS 7
 ;
 
+# Kristech KT-LINK FT2232H interface with IO switching and voltage buffers.
+# Created on 20220410 by CeDeROM Tomasz CEDRO (www.cederom.io).
+# Interface DataSheet: https://kristech.pl/files/KT-LINK-UM-ENG.pdf
+# AVRDUDE FT2232H PIN NUMBER DECODE:
+#  | 0      | 1      | .. | 7      | 8      | 9      | .. | 15     |
+#  | ADBUS0 | ADBUS1 | .. | ADBUS7 | ACBUS0 | ACBUS1 | .. | ACBUS7 |
+# KT-LINK JTAG CONN:
+#  1=Vsense(->EXT13), 19=5V(EXT1->EXT3), 20=GND, 3=TPIRST, 9=TPICLK, 7=TPIDATA.
+# INTERNALS CONFIGURATION ("~" MEANS ACTIVE LOW):
+#  ~TRST_EN=10(ACBUS2), ~CLK_EN=14(ACBUS6), ~MOSI_EN=13(ACBUS5),
+#  TMS_SEL=5(ADBUS5), ~TMS_EN=12(ACBUS4), LED=~15(ACBUS7).
+# CONNECTION NOTES:
+#  * Connect EXT connector pin 1 with 3 to get 5V on JTAG connector pin 19.
+#  * Connect JTAG connector pin 1 to 5V (i.e. EXT pin 13 or JTAG pin 19).
+#  * For TPI connection use resistors: TDO --[470R]-- TPIDATA --[470R]-- TDI.
+#  * Powering target from JTAG pin 19 allows KT-LINK current measurement.
+programmer
+  id    = "ktlink";
+  desc  = "KT-LINK FT2232H interface with IO switching and voltage buffers.";
+  type  = "avrftdi";
+  connection_type = usb;
+  usbvid= 0x0403;
+  usbpid= 0xBBE2;
+  usbdev= "A";
+  reset = 8;
+  sck   = 0;
+  mosi  = 1;
+  miso  = 2;
+  buff  = ~10,~14,~13,5;
+  rdyled = ~15;
+;
+
 programmer
   id    = "serialupdi";
   desc  = "SerialUPDI";

From 9d025e6a709ae105b2a0d8cc3588877cb9636f28 Mon Sep 17 00:00:00 2001
From: MCUdude <hansibull@gmail.com>
Date: Sun, 10 Apr 2022 23:36:53 +0200
Subject: [PATCH 02/31] Fix linuxspi baud to clock period calculation #927
 related

---
 src/linuxspi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/linuxspi.c b/src/linuxspi.c
index d0912e1a..df497057 100644
--- a/src/linuxspi.c
+++ b/src/linuxspi.c
@@ -223,7 +223,7 @@ static int linuxspi_open(PROGRAMMER *pgm, char *port)
       avrdude_message(MSG_INFO,
 		      "%s: obsolete use of -b <clock> option for bit clock; use -B <clock>\n",
 		      progname);
-      pgm->bitclock = 1E6 / pgm->baudrate;
+      pgm->bitclock = 1.0 / pgm->baudrate;
     }
     if (pgm->bitclock == 0) {
       avrdude_message(MSG_NOTICE,

From 4bcd0eaa1d548ff659c4a5579070cfddcfeda1ea Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 1 May 2022 21:55:50 +0200
Subject: [PATCH 03/31] Fix a number of mistakes in avrdude.conf.in

Stefan Rueger found a lot of mistakes in this file.

Closes #915
---
 NEWS                |   1 +
 src/avrdude.conf.in | 164 +++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 147 insertions(+), 18 deletions(-)

diff --git a/NEWS b/NEWS
index f2ec51a2..36a475a3 100644
--- a/NEWS
+++ b/NEWS
@@ -88,6 +88,7 @@ Changes since version 6.4:
       where the EDBG AVRISP 'Enter Programming Mode' command fails #900
     - Terminal write mode doesn't support string input (yet) #913
     - Terminal mode: memory fill with strings may cause Avrdude to crash. #922
+    - Some parts have wrong or missing ISP commands #915
 
   * Pull requests:
 
diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index 096751d0..18db5ec2 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -4741,16 +4741,79 @@ part parent "m324p"
     signature        = 0x1e 0x94 0x0a;
 
     memory "eeprom"
+        paged           = no; /* leave this "no" */
         size            = 512;
         page_size       = 4;
-        ;
+        min_write_delay = 9000;
+        max_write_delay = 9000;
+        readback_p1     = 0xff;
+        readback_p2     = 0xff;
+	read            = "  1   0   1   0      0   0   0   0",
+                          "  0   0   x   x      x a10  a9  a8",
+                          " a7  a6  a5  a4     a3  a2  a1  a0",
+                          "  o   o   o   o      o   o   o   o";
+
+	write           = "  1   1   0   0      0   0   0   0",
+                          "  0   0   x   x      x a10  a9  a8",
+                          " a7  a6  a5  a4     a3  a2  a1  a0", 
+                          "  i   i   i   i      i   i   i   i";
+
+	loadpage_lo	= "  1   1   0   0      0   0   0   1",
+			  "  0   0   0   0      0   0   0   0",
+			  "  0   0   0   0      0   0  a1  a0",
+			  "  i   i   i   i      i   i   i   i";
+
+	writepage	= "  1   1   0   0      0   0   1   0",
+			  "  0   0   x   x      x a10  a9  a8",
+			  " a7  a6  a5  a4     a3  a2   0   0",
+			  "  x   x   x   x      x   x   x   x";
+
+	mode		= 0x41;
+	delay		= 10;
+	blocksize	= 128;
+	readsize	= 256;
+      ;
 
     memory "flash"
         paged           = yes;
         size            = 16384;
         page_size       = 128;
         num_pages       = 128;
+        min_write_delay = 4500;
+        max_write_delay = 4500;
+        readback_p1     = 0xff;
+        readback_p2     = 0xff;
+        read_lo         = "  0   0   1   0      0   0   0   0",
+                          "  0 a14 a13 a12    a11 a10  a9  a8",
+                          " a7  a6  a5  a4     a3  a2  a1  a0",
+                          "  o   o   o   o      o   o   o   o";
+
+        read_hi         = "  0   0   1   0      1   0   0   0",
+                          "  0 a14 a13 a12    a11 a10  a9  a8",
+                          " a7  a6  a5  a4     a3  a2  a1  a0",
+                          "  o   o   o   o      o   o   o   o";
+
+        loadpage_lo     = "  0   1   0   0      0   0   0   0",
+                          "  0   0   x   x      x   x   x   x",
+                          "  x   x  a5  a4     a3  a2  a1  a0",
+                          "  i   i   i   i      i   i   i   i";
+
+        loadpage_hi     = "  0   1   0   0      1   0   0   0",
+                          "  0   0   x   x      x   x   x   x",
+                          "  x   x  a5  a4     a3  a2  a1  a0",
+                          "  i   i   i   i      i   i   i   i";
+
+        writepage       = "  0   1   0   0      1   1   0   0",
+                          "  0 a14 a13 a12    a11 a10  a9  a8",
+                          " a7  a6   x   x      x   x   x   x",
+                          "  x   x   x   x      x   x   x   x";
+
+	mode		= 0x21;
+	delay		= 6;
+	blocksize	= 256;
+	readsize	= 256;
         ;
+
   ;
 
 #------------------------------------------------------------
@@ -5907,7 +5970,7 @@ part
                           "  i   i   i   i      i   i   i   i";
 
         writepage       = "  0   1   0   0      1   1   0   0",
-                          "  x   x   x a12    a11 a10  a9  a8",
+                          "  x a14 a13 a12    a11 a10  a9  a8",
                           " a7  a6   x   x      x   x   x   x",
                           "  x   x   x   x      x   x   x   x";
 
@@ -6161,7 +6224,7 @@ part
                           "  i   i   i   i      i   i   i   i";
 
         writepage       = "  0   1   0   0      1   1   0   0",
-                          "  x   x   x a12    a11 a10  a9  a8",
+                          "a15 a14 a13 a12    a11 a10  a9  a8",
                           " a7   x   x   x      x   x   x   x",
                           "  x   x   x   x      x   x   x   x";
 
@@ -8846,7 +8909,7 @@ part
                            "a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
 
          write           = "1  1  0  0   0  0  0  0    0 0 x x  x x x a8",
-                           "a8 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
+                           "a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
 
   loadpage_lo   = "  1   1   0   0      0   0   0   1",
         "  0   0   0   0      0   0   0   0",
@@ -8854,8 +8917,8 @@ part
         "  i   i   i   i      i   i   i   i";
 
   writepage = "  1   1   0   0      0   0   1   0",
-        "  0   0   x   x      x   x   x   x",
-        "  0   0  a5  a4     a3  a2   0   0",
+        "  0   0   x   x      x   x   x  a8",
+        " a7  a6  a5  a4     a3  a2   0   0",
         "  x   x   x   x      x   x   x   x";
 
   mode      = 0x41;
@@ -9033,7 +9096,7 @@ part
                            "a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
 
          write           = "1  1  0  0   0  0  0  0    0 0 x x  x x x a8",
-                           "a8 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
+                           "a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
 
   loadpage_lo   = "  1   1   0   0      0   0   0   1",
         "  0   0   0   0      0   0   0   0",
@@ -9041,8 +9104,8 @@ part
         "  i   i   i   i      i   i   i   i";
 
   writepage = "  1   1   0   0      0   0   1   0",
-        "  0   0   x   x      x   x   x   x",
-        "  0   0  a5  a4     a3  a2   0   0",
+        "  0   0   x   x      x   x   x  a8",
+        " a7  a6  a5  a4     a3  a2   0   0",
         "  x   x   x   x      x   x   x   x";
 
   mode      = 0x41;
@@ -9777,8 +9840,37 @@ part parent "m328"
     bs2             = 0xe2;
 
     memory "eeprom"
+	paged		= no;
         size            = 2048;
         page_size       = 8;
+	min_write_delay = 3600;
+	max_write_delay = 3600;
+	readback_p1	= 0xff;
+	readback_p2	= 0xff;
+	read = " 1 0 1 0 0 0 0 0",
+	       " 0 0 0 x x x a9 a8",
+	       " a7 a6 a5 a4 a3 a2 a1 a0",
+	       " o o o o o o o o";
+
+	write = " 1 1 0 0 0 0 0 0",
+		" 0 0 0 x x x a9 a8",
+		" a7 a6 a5 a4 a3 a2 a1 a0",
+		" i i i i i i i i";
+
+	loadpage_lo = " 1 1 0 0 0 0 0 1",
+		      " 0 0 0 0 0 0 0 0",
+		      " 0 0 0 0 0 0 a1 a0",
+		      " i i i i i i i i";
+
+	writepage = " 1 1 0 0 0 0 1 0",
+		    " 0 0 x x x x a9 a8",
+		    " a7 a6 a5 a4 a3 a2 0 0",
+		    " x x x x x x x x";
+
+	mode		= 0x41;
+	delay		= 20;
+	blocksize	= 4;
+	readsize	= 256;
     ;
 
     memory "flash"
@@ -9786,6 +9878,40 @@ part parent "m328"
         size            = 65536;
         page_size       = 256;
         num_pages       = 256;
+	min_write_delay = 4500;
+	max_write_delay = 4500;
+	readback_p1	= 0xff;
+	readback_p2	= 0xff;
+	read_lo = " 0 0 1 0 0 0 0 0",
+		  " 0 0 a13 a12 a11 a10 a9 a8",
+		  " a7 a6 a5 a4 a3 a2 a1 a0",
+		  " o o o o o o o o";
+
+	read_hi = " 0 0 1 0 1 0 0 0",
+		  " 0 0 a13 a12 a11 a10 a9 a8",
+		  " a7 a6 a5 a4 a3 a2 a1 a0",
+		  " o o o o o o o o";
+
+	loadpage_lo = " 0 1 0 0 0 0 0 0",
+		      " 0 0 0 x x x x x",
+		      " x x a5 a4 a3 a2 a1 a0",
+		      " i i i i i i i i";
+
+	loadpage_hi = " 0 1 0 0 1 0 0 0",
+		      " 0 0 0 x x x x x",
+		      " x x a5 a4 a3 a2 a1 a0",
+		      " i i i i i i i i";
+
+	writepage = " 0 1 0 0 1 1 0 0",
+		    " 0 0 a13 a12 a11 a10 a9 a8",
+		    " a7 a6 x x x x x x",
+		    " x x x x x x x x";
+
+	mode		= 0x41;
+	delay		= 6;
+	blocksize	= 128;
+	readsize	= 256;
+
     ;
 
     memory "efuse"
@@ -10259,7 +10385,7 @@ part
 			  "  i   i   i   i      i   i   i   i";
 
 	writepage	= "  1   1   0   0      0   0   1   0",
-			  "  0   0   x   x      x   x   x   x",
+			  "  0   0   x   x      x   x   x  a8",
 			  " a7  a6  a5  a4     a3  a2   0   0",
 			  "  x   x   x   x      x   x   x   x";
 
@@ -12127,7 +12253,7 @@ part
 
 	writepage	= "  1   1   0   0      0   0   1   0",
 			  "  0   0   x   x      x   x   x   x",
-			  "  x  a6  a5  a4     a3  a2   0   0",
+			  " a7  a6  a5  a4     a3  a2   0   0",
 			  "  x   x   x   x      x   x   x   x";
 
 	mode		= 0x41;
@@ -12319,8 +12445,8 @@ part
 			  "  i   i   i   i      i   i   i   i";
 
 	writepage	= "  1   1   0   0      0   0   1   0",
-			  "  0   0   x   x      x   x   x   x",
-			  "  x  a6  a5  a4     a3  a2   0   0",
+			  "  0   0   x   x      x   x   x  a8",
+			  " a7  a6  a5  a4     a3  a2   0   0",
 			  "  x   x   x   x      x   x   x   x";
 
 	mode		= 0x41;
@@ -12621,7 +12747,7 @@ part
                 readback_p1     = 0xff;
                 readback_p2     = 0xff;
                 read            = "1  0  1  0   0  0  0  0    0 0 0 x  x x x x",
-                                   "0  0 a4  a3 a2 a1 a0   o o o o  o o o o";
+                                  "0  0 a5 a4  a3 a2 a1 a0    o o o o  o o o o";
 
                 write           = "1  1  0  0   0  0  0  0    0 0 0 x  x x x x",
                                    "0  0 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
@@ -12690,6 +12816,8 @@ part
         size            = 1;
         write           = "1 0 1 0  1 1 0 0  1 1 1 x  x x x x",
                           "x x x x  x x x x  1 1 i i  i i i i";
+        read            = "0 1 0 1  1 0 0 0  0 0 0 0  0 0 0 0",
+                          "x x x x  x x x x  o o o o  o o o o";
         min_write_delay = 4500;
         max_write_delay = 4500;
     ;
@@ -13404,7 +13532,7 @@ part
 			  "  i   i   i   i      i   i   i   i";
 
 	writepage	= "  1   1   0   0      0   0   1   0",
-			  "  0   0   x   x      x a10  a9  a8",
+			  "  0   0   x   x    a11 a10  a9  a8",
 			  " a7  a6  a5  a4     a3   0   0   0",
 			  "  x   x   x   x      x   x   x   x";
 
@@ -16463,12 +16591,12 @@ part
         readback_p1     = 0xff;
         readback_p2     = 0xff;
         read_lo         = " 0 0 1 0 0 0 0 0",
-                          " 0 0 0 a12 a11 a10 a9 a8",
+                          " 0 0 a13 a12 a11 a10 a9 a8",
                           " a7 a6 a5 a4 a3 a2 a1 a0",
                           " o o o o o o o o";
 
         read_hi          = " 0 0 1 0 1 0 0 0",
-                           " 0 0 0 a12 a11 a10 a9 a8",
+                           " 0 0 a13 a12 a11 a10 a9 a8",
                            " a7 a6 a5 a4 a3 a2 a1 a0",
                            " o o o o o o o o";
 
@@ -16483,7 +16611,7 @@ part
                           " i i i i i i i i";
 
         writepage       = " 0 1 0 0 1 1 0 0",
-                          " 0 0 0 a12 a11 a10 a9 a8",
+                          " 0 0 a13 a12 a11 a10 a9 a8",
                           " a7 a6 x x x x x x",
                           " x x x x x x x x";
 

From 28ccd82edcda75b0f8c520ceb0455f3801a7ff09 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 1 May 2022 22:31:19 +0200
Subject: [PATCH 04/31] PR 930 931 issue 927 are done

---
 NEWS | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/NEWS b/NEWS
index 36a475a3..da5c09a2 100644
--- a/NEWS
+++ b/NEWS
@@ -52,6 +52,8 @@ Changes since version 6.4:
     - Teensy bootloader (PR #802)
     - Micronucleus bootloader (PR #786)
     - ft232h (generic variant, PR #842)
+    - Kristech KT-LINK FT2232H interface with IO switching and voltage
+      buffers (PR #930)
 
   * Issues fixed:
 
@@ -89,6 +91,7 @@ Changes since version 6.4:
     - Terminal write mode doesn't support string input (yet) #913
     - Terminal mode: memory fill with strings may cause Avrdude to crash. #922
     - Some parts have wrong or missing ISP commands #915
+    - Incorrect -b conversion for linuxspi programmer #927
 
   * Pull requests:
 
@@ -176,6 +179,8 @@ Changes since version 6.4:
     - Add terminal write string functionality #914
     - Update documentation link to new URL #929
     - Fix terminal write buffer overflow issue #924
+    - Fix linuxspi baud to clock period calculation #931
+    - Added KT-LINK FT2232H interface with IO switching and voltage buffers. #930
 
   * Internals:
 

From a4c9fcdcd7746f2aafae1ae5155d561a2af07cca Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Mon, 2 May 2022 22:51:22 +0200
Subject: [PATCH 05/31] More fixes for PR #915

---
 src/avrdude.conf.in | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index 02671614..d33a26a3 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -9880,23 +9880,23 @@ part parent "m328"
 	readback_p1	= 0xff;
 	readback_p2	= 0xff;
 	read = " 1 0 1 0 0 0 0 0",
-	       " 0 0 0 x x x a9 a8",
+	       " 0 0 0 x x a10 a9 a8",
 	       " a7 a6 a5 a4 a3 a2 a1 a0",
 	       " o o o o o o o o";
 
 	write = " 1 1 0 0 0 0 0 0",
-		" 0 0 0 x x x a9 a8",
+		" 0 0 0 x x a10 a9 a8",
 		" a7 a6 a5 a4 a3 a2 a1 a0",
 		" i i i i i i i i";
 
 	loadpage_lo = " 1 1 0 0 0 0 0 1",
 		      " 0 0 0 0 0 0 0 0",
-		      " 0 0 0 0 0 0 a1 a0",
+		      " 0 0 0 0 0 a2 a1 a0",
 		      " i i i i i i i i";
 
 	writepage = " 1 1 0 0 0 0 1 0",
-		    " 0 0 x x x x a9 a8",
-		    " a7 a6 a5 a4 a3 a2 0 0",
+		    " 0 0 x x x a10 a9 a8",
+		    " a7 a6 a5 a4 a3 0 0 0",
 		    " x x x x x x x x";
 
 	mode		= 0x41;
@@ -9915,28 +9915,28 @@ part parent "m328"
 	readback_p1	= 0xff;
 	readback_p2	= 0xff;
 	read_lo = " 0 0 1 0 0 0 0 0",
-		  " 0 0 a13 a12 a11 a10 a9 a8",
+		  " a15 a14 a13 a12 a11 a10 a9 a8",
 		  " a7 a6 a5 a4 a3 a2 a1 a0",
 		  " o o o o o o o o";
 
 	read_hi = " 0 0 1 0 1 0 0 0",
-		  " 0 0 a13 a12 a11 a10 a9 a8",
+		  " a15 a14 a13 a12 a11 a10 a9 a8",
 		  " a7 a6 a5 a4 a3 a2 a1 a0",
 		  " o o o o o o o o";
 
 	loadpage_lo = " 0 1 0 0 0 0 0 0",
 		      " 0 0 0 x x x x x",
-		      " x x a5 a4 a3 a2 a1 a0",
+		      " x a6 a5 a4 a3 a2 a1 a0",
 		      " i i i i i i i i";
 
 	loadpage_hi = " 0 1 0 0 1 0 0 0",
 		      " 0 0 0 x x x x x",
-		      " x x a5 a4 a3 a2 a1 a0",
+		      " x a6 a5 a4 a3 a2 a1 a0",
 		      " i i i i i i i i";
 
 	writepage = " 0 1 0 0 1 1 0 0",
-		    " 0 0 a13 a12 a11 a10 a9 a8",
-		    " a7 a6 x x x x x x",
+		    " a15 a14 a13 a12 a11 a10 a9 a8",
+		    " a7 x x x x x x x",
 		    " x x x x x x x x";
 
 	mode		= 0x41;
@@ -12963,23 +12963,23 @@ part
         readback_p1     = 0x00;
         readback_p2     = 0x00;
         read            = "  1   0   1   0      0   0   0   0",
-                          "  x   x   x   x      x a10  a9  a8",
+                          "  x   x   x   x      x   x   x  a8",
                           " a7  a6  a5  a4     a3  a2  a1  a0",
                           "  o   o   o   o      o   o   o   o";
 
         write           = "  1   1   0   0      0   0   0   0",
-                          "  x   x   x   x      x a10  a9  a8",
+                          "  x   x   x   x      x   x   x  a8",
                           " a7  a6  a5  a4     a3  a2  a1  a0",
                           "  i   i   i   i      i   i   i   i";
 
 	loadpage_lo	= "  1   1   0   0      0   0   0   1",
 			  "  0   0   0   0      0   0   0   0",
-			  "  0   0   0   0      0  a2  a1  a0",
+			  "  0   0   0   0      0   0  a1  a0",
 			  "  i   i   i   i      i   i   i   i";
 
 	writepage	= "  1   1   0   0      0   0   1   0",
-			  "  0   0   x   x      x a10  a9  a8",
-			  " a7  a6  a5  a4     a3   0   0   0",
+			  "  0   0   x   x      x   x   x  a8",
+			  " a7  a6  a5  a4     a3  a2   0   0",
 			  "  x   x   x   x      x   x   x   x";
 
 	mode		= 0x41;
@@ -13165,12 +13165,12 @@ part
 
 	loadpage_lo	= "  1   1   0   0      0   0   0   1",
 			  "  0   0   0   0      0   0   0   0",
-			  "  0   0   0   0      0  a2  a1  a0",
+			  "  0   0   0   0      0   0  a1  a0",
 			  "  i   i   i   i      i   i   i   i";
 
 	writepage	= "  1   1   0   0      0   0   1   0",
 			  "  0   0   x   x      x a10  a9  a8",
-			  " a7  a6  a5  a4     a3   0   0   0",
+			  " a7  a6  a5  a4     a3  a2   0   0",
 			  "  x   x   x   x      x   x   x   x";
 
 	mode		= 0x41;
@@ -16634,17 +16634,17 @@ part
 
         loadpage_lo     = " 0 1 0 0 0 0 0 0",
                           " 0 0 0 x x x x x",
-                          " x x a5 a4 a3 a2 a1 a0",
+                          " x x x x a3 a2 a1 a0",
                           " i i i i i i i i";
 
         loadpage_hi     = " 0 1 0 0 1 0 0 0",
                           " 0 0 0 x x x x x",
-                          " x x a5 a4 a3 a2 a1 a0",
+                          " x x x x a3 a2 a1 a0",
                           " i i i i i i i i";
 
         writepage       = " 0 1 0 0 1 1 0 0",
                           " 0 0 a13 a12 a11 a10 a9 a8",
-                          " a7 a6 x x x x x x",
+                          " a7 a6 a5 a4 x x x x",
                           " x x x x x x x x";
 
         mode        = 0x41;

From 3bdf138721bd4a08ed743312e11a95aa8a2ee892 Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Thu, 5 May 2022 20:45:47 +0200
Subject: [PATCH 06/31] Fix micronucleus bootloader to check for unresponsive
 USB devices

---
 src/micronucleus.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/micronucleus.c b/src/micronucleus.c
index b3c25341..b8d9d7ee 100644
--- a/src/micronucleus.c
+++ b/src/micronucleus.c
@@ -744,6 +744,19 @@ static int micronucleus_open(PROGRAMMER* pgm, char* port)
                     {
                         avrdude_message(MSG_INFO, "%s: ERROR: Failed to open USB device: %s\n", progname, usb_strerror());
                     }
+                    else
+                    {
+                        // Send a dummy request to check for a unresponsive USB device.
+                        int result = micronucleus_get_bootloader_info(pdata);
+                        if (result < 0)
+                        {
+                            avrdude_message(MSG_NOTICE, "%s: WARNING: Failed to probe device (error %d), skipping...\n",
+                                progname, result);
+
+                            usb_close(pdata->usb_handle);
+                            pdata->usb_handle = NULL;
+                        }
+                    }
                 }
             }
         }

From c64f2030a175341ee8943757d12dcf91f5af829c Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Thu, 5 May 2022 21:42:27 +0200
Subject: [PATCH 07/31] Improve micronucleus bootloader user experience for
 unresponsive USB devices

---
 src/micronucleus.c | 43 ++++++++++++++++++++++++++++++-------------
 1 file changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/micronucleus.c b/src/micronucleus.c
index b8d9d7ee..28dac2cb 100644
--- a/src/micronucleus.c
+++ b/src/micronucleus.c
@@ -139,6 +139,22 @@ static int micronucleus_check_connection(pdata_t* pdata)
     }
 }
 
+static bool micronucleus_is_device_responsive(pdata_t* pdata, struct usb_device* device)
+{
+    pdata->usb_handle = usb_open(device);
+    if (pdata->usb_handle == NULL)
+    {
+        return false;
+    }
+
+    int result = micronucleus_check_connection(pdata);
+
+    usb_close(pdata->usb_handle);
+    pdata->usb_handle = NULL;
+
+    return result >= 0;
+}
+
 static int micronucleus_reconnect(pdata_t* pdata)
 {
     struct usb_device* device = usb_device(pdata->usb_handle);
@@ -696,6 +712,7 @@ static int micronucleus_open(PROGRAMMER* pgm, char* port)
     usb_init();
 
     bool show_retry_message = true;
+    bool show_unresponsive_device_message = true;
 
     time_t start_time = time(NULL);
     for (;;)
@@ -717,6 +734,19 @@ static int micronucleus_open(PROGRAMMER* pgm, char* port)
                     pdata->major_version = (uint8_t)(device->descriptor.bcdDevice >> 8);
                     pdata->minor_version = (uint8_t)(device->descriptor.bcdDevice >> 0);
 
+                    if (!micronucleus_is_device_responsive(pdata, device))
+                    {
+                        if (show_unresponsive_device_message)
+                        {
+                            avrdude_message(MSG_INFO, "%s: WARNING: Unresponsive Micronucleus device detected, please reconnect....\n",
+                                progname);
+
+                            show_unresponsive_device_message = false;
+                        }
+
+                        continue;
+                    }
+
                     avrdude_message(MSG_NOTICE, "%s: Found device with Micronucleus V%d.%d, bus:device: %s:%s\n",
                         progname,
                         pdata->major_version, pdata->minor_version,
@@ -744,19 +774,6 @@ static int micronucleus_open(PROGRAMMER* pgm, char* port)
                     {
                         avrdude_message(MSG_INFO, "%s: ERROR: Failed to open USB device: %s\n", progname, usb_strerror());
                     }
-                    else
-                    {
-                        // Send a dummy request to check for a unresponsive USB device.
-                        int result = micronucleus_get_bootloader_info(pdata);
-                        if (result < 0)
-                        {
-                            avrdude_message(MSG_NOTICE, "%s: WARNING: Failed to probe device (error %d), skipping...\n",
-                                progname, result);
-
-                            usb_close(pdata->usb_handle);
-                            pdata->usb_handle = NULL;
-                        }
-                    }
                 }
             }
         }

From 01a9e42d7d43bb4329740f9d72b1c3591e342726 Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Thu, 5 May 2022 22:08:46 +0200
Subject: [PATCH 08/31] Fix typo in micronucleus message

---
 src/micronucleus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/micronucleus.c b/src/micronucleus.c
index 28dac2cb..c3dd007d 100644
--- a/src/micronucleus.c
+++ b/src/micronucleus.c
@@ -738,7 +738,7 @@ static int micronucleus_open(PROGRAMMER* pgm, char* port)
                     {
                         if (show_unresponsive_device_message)
                         {
-                            avrdude_message(MSG_INFO, "%s: WARNING: Unresponsive Micronucleus device detected, please reconnect....\n",
+                            avrdude_message(MSG_INFO, "%s: WARNING: Unresponsive Micronucleus device detected, please reconnect...\n",
                                 progname);
 
                             show_unresponsive_device_message = false;

From 43ddea910254df8c92d48b3d73b49c823b4b62b2 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Thu, 5 May 2022 22:58:45 +0200
Subject: [PATCH 09/31] Calibration memory of ATtiny43U is only 1 byte

Closes issue #921.
---
 NEWS                | 1 +
 src/avrdude.conf.in | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index da5c09a2..7bcbd142 100644
--- a/NEWS
+++ b/NEWS
@@ -92,6 +92,7 @@ Changes since version 6.4:
     - Terminal mode: memory fill with strings may cause Avrdude to crash. #922
     - Some parts have wrong or missing ISP commands #915
     - Incorrect -b conversion for linuxspi programmer #927
+    - ATtiny43U calibration memory size #921
 
   * Pull requests:
 
diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index d33a26a3..362b6167 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -12888,7 +12888,7 @@ part
     ;
 
     memory "calibration"
-        size            = 2;
+        size            = 1;
         read            = "0  0  1  1   1  0  0  0    0 0 0 x  x x x x",
                           "0  0  0  0   0  0  0  a0   o o o o  o o o o";
     ;

From a2e456ca8a88557cf6ae567e1712b8804fdc6442 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sat, 7 May 2022 22:20:31 +0200
Subject: [PATCH 10/31] v7.0 release preparation

---
 src/configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/configure.ac b/src/configure.ac
index 5527ad6c..ae60e3f1 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -23,7 +23,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.60)
-AC_INIT(avrdude, 6.99-20211218, avrdude-dev@nongnu.org)
+AC_INIT(avrdude, 7.0, avrdude-dev@nongnu.org)
 
 AC_CANONICAL_BUILD
 AC_CANONICAL_HOST

From ec5033743469f229ccabf7c12cfcc361a98b5659 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sat, 7 May 2022 22:39:47 +0200
Subject: [PATCH 11/31] Correctly name the release in NEWS

---
 NEWS | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 7bcbd142..2a190861 100644
--- a/NEWS
+++ b/NEWS
@@ -5,7 +5,7 @@ Approximate change log for AVRDUDE by version.
 (For detailed changes, see the version control system logs.)
 
 ----------------------------------------------------------------------
-Changes since version 6.4:
+Changes in version 7.0:
 
   * Major changes compared to the previous version:
 

From 9bc28d410e7e646b29f8f3e03f5afb2225e118af Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sat, 7 May 2022 22:57:49 +0200
Subject: [PATCH 12/31] Post-7.0 changes

Update version date in configure.ac.
Update template in NEWS
---
 NEWS             | 14 ++++++++++++++
 src/configure.ac |  2 +-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index 2a190861..558831ab 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,20 @@ Approximate change log for AVRDUDE by version.
 (For detailed changes, see the version control system logs.)
 
 ----------------------------------------------------------------------
+Changes since version 7.0:
+
+  * Major changes compared to the previous version:
+
+  * New devices supported:
+
+  * New programmers supported:
+
+  * Issues fixed:
+
+  * Pull requests:
+
+  * Internals:
+
 Changes in version 7.0:
 
   * Major changes compared to the previous version:
diff --git a/src/configure.ac b/src/configure.ac
index ae60e3f1..e6629c73 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -23,7 +23,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.60)
-AC_INIT(avrdude, 7.0, avrdude-dev@nongnu.org)
+AC_INIT(avrdude, 7.0-20220508, avrdude-dev@nongnu.org)
 
 AC_CANONICAL_BUILD
 AC_CANONICAL_HOST

From a855692d973c2e72d38b59be545375982af3d4f7 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 8 May 2022 13:58:44 +0200
Subject: [PATCH 13/31] Correctly name the release in CMakeLists.txt as well

---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e3d6f8dd..95c89d2b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@
 #     cmake --build build
 
 cmake_minimum_required(VERSION 3.12)
-project(avrdude VERSION 6.99)
+project(avrdude VERSION 7.0)
 
 set(CMAKE_C_STANDARD 11)
 set(CMAKE_C_STANDARD_REQUIRED True)

From d6347f4187451653371b83edf6ff6a2c02567d61 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 8 May 2022 13:58:44 +0200
Subject: [PATCH 14/31] Correctly name the release in CMakeLists.txt as well

---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e3d6f8dd..95c89d2b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@
 #     cmake --build build
 
 cmake_minimum_required(VERSION 3.12)
-project(avrdude VERSION 6.99)
+project(avrdude VERSION 7.0)
 
 set(CMAKE_C_STANDARD 11)
 set(CMAKE_C_STANDARD_REQUIRED True)

From b9a012cebb96a4ec73763a58b45ace9aeb7af00d Mon Sep 17 00:00:00 2001
From: Subhaditya Nath <sn03.general@gmail.com>
Date: Sun, 8 May 2022 20:35:32 +0530
Subject: [PATCH 15/31] Fix .Dd macro in manpage

The correct format for .Dd according to mdoc(7) is -

	.Dd month day, year
---
 src/avrdude.1 | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/avrdude.1 b/src/avrdude.1
index cc05cf4c..81834d30 100644
--- a/src/avrdude.1
+++ b/src/avrdude.1
@@ -18,7 +18,7 @@
 .\"
 .\" $Id$
 .\"
-.Dd DATE November 22, 2021
+.Dd November 22, 2021
 .Os
 .Dt AVRDUDE 1
 .Sh NAME

From 4601bee4afa76fb4aa8392ffdd4a4dd56ede1bae Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 8 May 2022 20:39:12 +0200
Subject: [PATCH 16/31] Mention PR 949

---
 NEWS | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/NEWS b/NEWS
index 558831ab..ca827290 100644
--- a/NEWS
+++ b/NEWS
@@ -17,6 +17,8 @@ Changes since version 7.0:
 
   * Pull requests:
 
+    - Fix .Dd macro in manpage #949
+
   * Internals:
 
 Changes in version 7.0:

From 75bfbf7bef53a54a6824626913253d0b4bebc9e8 Mon Sep 17 00:00:00 2001
From: Charles <hallard04@free.fr>
Date: Mon, 9 May 2022 02:02:42 +0200
Subject: [PATCH 17/31] fix M1 homebrew path

---
 build.sh | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index baea4516..4fceb6e3 100755
--- a/build.sh
+++ b/build.sh
@@ -50,7 +50,13 @@ case "${ostype}" in
 	then
 	    build_flags="${build_flags} -D CMAKE_C_FLAGS=-I/opt/local/include -D CMAKE_EXE_LINKER_FLAGS=-L/opt/local/lib"
 	else
-	    build_flags="${build_flags} -D CMAKE_C_FLAGS=-I/usr/local/include -D CMAKE_EXE_LINKER_FLAGS=-L/usr/local/Cellar"
+            # Apple M1 (may be new version of homebrew also)
+            if [ -d /opt/homebrew ]  
+            then
+                build_flags="${build_flags} -D CMAKE_C_FLAGS=-I/usr/homebrew/include -D CMAKE_EXE_LINKER_FLAGS=-L/usr/homebrew/Cellar"
+            else
+                build_flags="${build_flags} -D CMAKE_C_FLAGS=-I/usr/local/include -D CMAKE_EXE_LINKER_FLAGS=-L/usr/local/Cellar"
+            fi
 	fi
 	;;
 

From a23055d6481f268f1782a55303cc5427072bbe1e Mon Sep 17 00:00:00 2001
From: Charles <hallard04@free.fr>
Date: Mon, 9 May 2022 14:51:16 +0200
Subject: [PATCH 18/31] fix typo

---
 build.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.sh b/build.sh
index 4fceb6e3..0b664807 100755
--- a/build.sh
+++ b/build.sh
@@ -53,7 +53,7 @@ case "${ostype}" in
             # Apple M1 (may be new version of homebrew also)
             if [ -d /opt/homebrew ]  
             then
-                build_flags="${build_flags} -D CMAKE_C_FLAGS=-I/usr/homebrew/include -D CMAKE_EXE_LINKER_FLAGS=-L/usr/homebrew/Cellar"
+                build_flags="${build_flags} -D CMAKE_C_FLAGS=-I/opt/homebrew/include -D CMAKE_EXE_LINKER_FLAGS=-L/opt/homebrew/Cellar"
             else
                 build_flags="${build_flags} -D CMAKE_C_FLAGS=-I/usr/local/include -D CMAKE_EXE_LINKER_FLAGS=-L/usr/local/Cellar"
             fi

From 8b61c9dd8f0c0e99bd89389c4f19f186beeef3ef Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Wed, 11 May 2022 20:56:05 +0200
Subject: [PATCH 19/31] CMake: Move MSVC compatibility shim into library

---
 src/CMakeLists.txt | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a8e0262b..7d6771f3 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -51,7 +51,7 @@ include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
 add_compile_definitions(CONFIG_DIR=\"${CONFIG_DIR}\")
 
 if(WIN32)
-    set(EXTRA_WINDOWS_SOURCES "${PROJECT_BINARY_DIR}/src/windows.rc")
+    set(EXTRA_WINDOWS_RESOURCES "${PROJECT_BINARY_DIR}/src/windows.rc")
     set(EXTRA_WINDOWS_LIBRARIES setupapi ws2_32)
 endif()
 
@@ -216,6 +216,7 @@ add_library(libavrdude
     xbee.c
     ${FLEX_Parser_OUTPUTS}
     ${BISON_Parser_OUTPUTS}
+    "${EXTRA_WINDOWS_SOURCES}"
     )
     
 set_target_properties(libavrdude PROPERTIES
@@ -253,7 +254,7 @@ add_executable(avrdude
     term.h
     whereami.c
     whereami.h
-    "${EXTRA_WINDOWS_SOURCES}"
+    "${EXTRA_WINDOWS_RESOURCES}"
     )
 
 target_link_libraries(avrdude PUBLIC libavrdude)

From 053c2dcdd3cb24e0778bd54073c7456a66056a68 Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Wed, 11 May 2022 20:57:14 +0200
Subject: [PATCH 20/31] CMake: Include GCC specific options also for MSYS2

---
 src/CMakeLists.txt | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7d6771f3..7577e113 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -55,11 +55,6 @@ if(WIN32)
     set(EXTRA_WINDOWS_LIBRARIES setupapi ws2_32)
 endif()
 
-if(NOT WIN32)
-    set(LIB_MATH m)
-    add_compile_options(-Wall) # -Wextra
-endif()
-
 if(MSVC)
     add_compile_definitions(_CRT_SECURE_NO_WARNINGS=1)
     add_compile_definitions(_CRT_NONSTDC_NO_WARNINGS=1)
@@ -79,6 +74,9 @@ if(MSVC)
     set(EXTRA_WINDOWS_INCLUDES ${EXTRA_WINDOWS_INCLUDES}
         "msvc"
         )
+else()
+    set(LIB_MATH m)
+    add_compile_options(-Wall) # -Wextra
 endif()
 
 # =====================================

From 0ea4b08b2f895ed89dcc0f0557acf9de0bd0dcd3 Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Wed, 11 May 2022 21:02:03 +0200
Subject: [PATCH 21/31] CMake: If installed, use static version of libreadline
 for MSYS2

---
 CMakeLists.txt | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 95c89d2b..cf3623e9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -118,6 +118,7 @@ if(WIN32)
     set(PREFERRED_LIBHIDAPI libhidapi.a libhidapi-libusb.a libhidapi-hidraw.a hidapi hidapi-libusb hidapi-hidraw)
     set(PREFERRED_LIBFTDI libftdi.a ftdi)
     set(PREFERRED_LIBFTDI1 libftdi1.a ftdi1)
+    set(PREFERRED_LIBREADLINE libreadline.a)
 else()
     set(PREFERRED_LIBELF elf)
     set(PREFERRED_LIBUSB usb)
@@ -125,6 +126,7 @@ else()
     set(PREFERRED_LIBHIDAPI hidapi hidapi-libusb hidapi-hidraw)
     set(PREFERRED_LIBFTDI ftdi)
     set(PREFERRED_LIBFTDI1 ftdi1)
+    set(PREFERRED_LIBREADLINE readline)
 endif()
 
 # -------------------------------------
@@ -212,7 +214,7 @@ endif()
 # -------------------------------------
 # Find libreadline
 
-find_library(HAVE_LIBREADLINE NAMES readline)
+find_library(HAVE_LIBREADLINE NAMES ${PREFERRED_LIBREADLINE})
 if(HAVE_LIBREADLINE)
     set(LIB_LIBREADLINE ${HAVE_LIBREADLINE})
 endif()

From 65bb41f8e9bd500d2afe2462a7ff7f93b3c277b7 Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Wed, 11 May 2022 21:08:05 +0200
Subject: [PATCH 22/31] CMake: Add build option to select static or shared
 libraries

---
 CMakeLists.txt | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf3623e9..19897c72 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -35,6 +35,13 @@ option(USE_LIBUSBWIN32 "Prefer libusb-win32 over libusb" OFF)
 option(DEBUG_CMAKE "Enable debugging output for this CMake project" OFF)
 option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
 
+if(WIN32)
+    # Prefer static libraries over DLLs on Windows
+    option(USE_STATIC_LIBS "Use static libraries" ON)
+else()
+    option(USE_STATIC_LIBS "Use static libraries" OFF)
+endif()
+
 include(CheckIncludeFile)
 include(CheckSymbolExists)
 include(FetchContent)
@@ -110,8 +117,7 @@ endif()
 # Detect installed libraries
 # =====================================
 
-# Prefer static libraries over DLLs on Windows
-if(WIN32)
+if(USE_STATIC_LIBS)
     set(PREFERRED_LIBELF libelf.a elf)
     set(PREFERRED_LIBUSB libusb.a usb)
     set(PREFERRED_LIBUSB_1_0 libusb-1.0.a usb-1.0)

From 3b0d7e5d5d325362d4ca1f4ebc7271c653a89766 Mon Sep 17 00:00:00 2001
From: Ebben Aries <exa@dscp.org>
Date: Sat, 21 May 2022 14:25:27 -0600
Subject: [PATCH 23/31] Fix src/CMakeLists.txt to honor CMAKE_INSTALL_LIBDIR

---
 src/CMakeLists.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index a8e0262b..d4472481 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -264,8 +264,8 @@ target_link_libraries(avrdude PUBLIC libavrdude)
 
 install(TARGETS avrdude DESTINATION bin)
 install(TARGETS libavrdude
-    LIBRARY DESTINATION lib
-    ARCHIVE DESTINATION lib
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
     PUBLIC_HEADER DESTINATION include COMPONENT dev
     )
 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/avrdude.conf" TYPE SYSCONF)

From feaa1c6a6b0a0cf234dbd9e86e5b0d13d745c09a Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Mon, 30 May 2022 07:01:22 +0200
Subject: [PATCH 24/31] PR 950 done

---
 NEWS | 1 +
 1 file changed, 1 insertion(+)

diff --git a/NEWS b/NEWS
index ca827290..1a0c4824 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,7 @@ Changes since version 7.0:
   * Pull requests:
 
     - Fix .Dd macro in manpage #949
+    - fix M1 homebrew path #950
 
   * Internals:
 

From bdb4128de3f63a1fb4abc208ec9bfa90ef3dd676 Mon Sep 17 00:00:00 2001
From: MCUdude <hansibull@gmail.com>
Date: Sun, 29 May 2022 13:12:50 +0200
Subject: [PATCH 25/31] Fix JTAG transaction close issue  Fixes issue #366

---
 src/jtagmkII.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/jtagmkII.c b/src/jtagmkII.c
index fc06301c..b1024b53 100644
--- a/src/jtagmkII.c
+++ b/src/jtagmkII.c
@@ -1840,8 +1840,8 @@ void jtagmkII_close(PROGRAMMER * pgm)
 
   avrdude_message(MSG_NOTICE2, "%s: jtagmkII_close()\n", progname);
 
-  if (pgm->flag & PGM_FL_IS_PDI) {
-    /* When in PDI mode, restart target. */
+  if (pgm->flag & (PGM_FL_IS_PDI | PGM_FL_IS_JTAG)) {
+    /* When in PDI or JTAG mode, restart target. */
     buf[0] = CMND_GO;
     avrdude_message(MSG_NOTICE2, "%s: jtagmkII_close(): Sending GO command: ",
 	      progname);

From bd8c17b35f772978dd12f866e4de569963f27162 Mon Sep 17 00:00:00 2001
From: prchal <jiri.prchal@aksignal.cz>
Date: Tue, 7 Jun 2022 11:50:03 +0200
Subject: [PATCH 26/31] adding support for all Linux baud rates v.2

If optiboot can work at higher bauds, why not avrdude.
Versoin 2 of #985.
Linux uses the old-style bitmapped version of the Bxxxx macros.
---
 src/ser_posix.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/src/ser_posix.c b/src/ser_posix.c
index 2c5d45b5..53d8cd15 100644
--- a/src/ser_posix.c
+++ b/src/ser_posix.c
@@ -76,6 +76,45 @@ static struct baud_mapping baud_lookup_table [] = {
 #endif
 #ifdef B230400
   { 230400, B230400 },
+#endif
+#ifdef B250000
+  { 250000, B250000 },
+#endif
+#ifdef B460800
+  { 460800, B460800 },
+#endif
+#ifdef B500000
+  { 500000, B500000 },
+#endif
+#ifdef B576000
+  { 576000, B576000 },
+#endif
+#ifdef B921600
+  { 921600, B921600 },
+#endif
+#ifdef B1000000
+  { 1000000, B1000000 },
+#endif
+#ifdef B1152000
+  { 1152000, B1152000 },
+#endif
+#ifdef B1500000
+  { 1500000, B1500000 },
+#endif
+#ifdef B2000000
+  { 2000000, B2000000 },
+#endif
+#ifdef B2500000
+  { 2500000, B2500000 },
+#endif
+#ifdef B3000000
+  { 3000000, B3000000 },
+#endif
+#ifdef B3500000
+  { 3500000, B3500000 },
+#endif
+#ifdef B4000000
+  { 4000000, B4000000 },
 #endif
   { 0,      0 }                 /* Terminator. */
 };

From cb114233ef68625332df5fff876467f57648cd9d Mon Sep 17 00:00:00 2001
From: Marius Greuel <greuelm@mgtek.com>
Date: Fri, 10 Jun 2022 20:38:54 +0200
Subject: [PATCH 27/31] Mention PR #945, #962, #972

---
 NEWS | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/NEWS b/NEWS
index 1a0c4824..4638746a 100644
--- a/NEWS
+++ b/NEWS
@@ -15,10 +15,15 @@ Changes since version 7.0:
 
   * Issues fixed:
 
+    - Fix micronucleus bootloader to check for unresponsive USB
+      devices #945
+    - Fix src/CMakeLists.txt to honor CMAKE_INSTALL_LIBDIR #972
+
   * Pull requests:
 
     - Fix .Dd macro in manpage #949
     - fix M1 homebrew path #950
+    - CMake Enhancements #962
 
   * Internals:
 

From 3b0a2abc20e88101a194b953ab31cd8ab89d27dd Mon Sep 17 00:00:00 2001
From: MCUdude <hansibull@gmail.com>
Date: Sun, 19 Jun 2022 10:53:07 +0200
Subject: [PATCH 28/31] Reduce programmer description string length  to less
 than 80 characters. #941 related

---
 src/avrdude.conf.in | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index 362b6167..ba7f4f8e 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -947,9 +947,10 @@ programmer
 ;
 
 # commercial version of USBtiny, using a separate VID/PID
+# https://github.com/IowaScaledEngineering/ckt-avrprogrammer
 programmer
   id    = "iseavrprog";
-  desc  = "USBtiny-based USB programmer, https://github.com/IowaScaledEngineering/ckt-avrprogrammer";
+  desc  = "USBtiny-based programmer, https://iascaled.com";
   type  = "usbtiny";
   connection_type = usb;
   usbvid     = 0x1209;

From 1aa59aaa98e6a79bb4a321be80c5113184dd2668 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 19 Jun 2022 19:56:56 +0200
Subject: [PATCH 29/31] PR #1000 is done now

---
 NEWS | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/NEWS b/NEWS
index 4638746a..888796ca 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,8 @@ Changes since version 7.0:
     - Fix .Dd macro in manpage #949
     - fix M1 homebrew path #950
     - CMake Enhancements #962
+    - Reduce programmer desc string length in avrdude.conf
+      to < 80 characters #1000
 
   * Internals:
 

From 1b997968a526c630a45ba8c705162140f86a7419 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 26 Jun 2022 22:58:25 +0200
Subject: [PATCH 30/31] Closing PR 979

---
 NEWS | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/NEWS b/NEWS
index 888796ca..16fef572 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,7 @@ Changes since version 7.0:
     - Fix micronucleus bootloader to check for unresponsive USB
       devices #945
     - Fix src/CMakeLists.txt to honor CMAKE_INSTALL_LIBDIR #972
+    - [bug #43898] atmega644p remains stopped after JTAG transaction #366
 
   * Pull requests:
 
@@ -26,6 +27,7 @@ Changes since version 7.0:
     - CMake Enhancements #962
     - Reduce programmer desc string length in avrdude.conf
       to < 80 characters #1000
+    - Dragon JTAG fix #979
 
   * Internals:
 

From 362e6993acc863c282a16fd4d3642ebbeab4eae7 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 26 Jun 2022 23:00:32 +0200
Subject: [PATCH 31/31] PR 993 done

---
 NEWS | 1 +
 1 file changed, 1 insertion(+)

diff --git a/NEWS b/NEWS
index 16fef572..da4e42d0 100644
--- a/NEWS
+++ b/NEWS
@@ -28,6 +28,7 @@ Changes since version 7.0:
     - Reduce programmer desc string length in avrdude.conf
       to < 80 characters #1000
     - Dragon JTAG fix #979
+    - adding support for all Linux baud rates v.2 #993
 
   * Internals: