From 32232faa2bff8f48405f20f5038a763805bf3f0d Mon Sep 17 00:00:00 2001
From: MCUdude <hansibull@gmail.com>
Date: Fri, 7 Jan 2022 11:52:15 +0100
Subject: [PATCH 1/3] Add missing ATmega targets

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

diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index 29107feb..8f59bef5 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -4731,6 +4731,21 @@ part parent "m324p"
   ;
 
 
+#------------------------------------------------------------
+# ATmega164A
+#------------------------------------------------------------
+
+# similar to ATmega164P
+
+part parent "m164p"
+    id               = "m164a";
+    desc             = "ATmega164A";
+    signature        = 0x1e 0x94 0x0f;
+
+    ocdrev              = 3;
+  ;
+
+
 #------------------------------------------------------------
 # ATmega324PB
 #------------------------------------------------------------
@@ -5908,6 +5923,18 @@ part
       ;
   ;
 
+#------------------------------------------------------------
+# ATmega169P
+#------------------------------------------------------------
+
+part parent "m169"
+    id               = "m169p";
+    desc             = "ATmega169P";
+    signature        = 0x1E 0x94 0x05;
+
+    ocdrev              = 3;
+  ;
+
 #------------------------------------------------------------
 # ATmega329
 #------------------------------------------------------------
@@ -6333,6 +6360,20 @@ part parent "m649"
     ocdrev              = 3;
   ;
 
+#------------------------------------------------------------
+# ATmega6490P
+#------------------------------------------------------------
+
+# identical to ATmega6490
+
+part parent "m649"
+    id               = "m6490p";
+    desc             = "ATmega6490P";
+    signature        = 0x1e 0x96 0x0C;
+
+    ocdrev              = 3;
+  ;
+
 #------------------------------------------------------------
 # ATmega32
 #------------------------------------------------------------
@@ -14194,6 +14235,7 @@ part
                           "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
       ;
   ;
+
 #------------------------------------------------------------
 # ATmega325
 #------------------------------------------------------------
@@ -14385,6 +14427,20 @@ part
         ;
   ;
 
+#------------------------------------------------------------
+# ATmega325P
+#------------------------------------------------------------
+
+# similar to ATmega325
+
+part parent "m325"
+    id               = "m325p";
+    desc             = "ATmega325P";
+    signature        = 0x1e 0x95 0x0d;
+
+    ocdrev              = 3;
+  ;
+
 #------------------------------------------------------------
 # ATmega645
 #------------------------------------------------------------
@@ -14576,6 +14632,20 @@ part
         ;
   ;
 
+#------------------------------------------------------------
+# ATmega645P
+#------------------------------------------------------------
+
+# similar to ATmega645
+
+part parent "m645"
+    id               = "m645p";
+    desc             = "ATmega645P";
+    signature        = 0x1e 0x96 0x0d;
+
+    ocdrev              = 3;
+  ;
+
 #------------------------------------------------------------
 # ATmega3250
 #------------------------------------------------------------
@@ -14588,6 +14658,18 @@ part parent "m325"
     ocdrev              = 3;
   ;
 
+#------------------------------------------------------------
+# ATmega3250P
+#------------------------------------------------------------
+
+part parent "m325"
+    id               = "m3250p";
+    desc             = "ATmega3250P";
+    signature        = 0x1E 0x95 0x0e;
+
+    ocdrev              = 3;
+  ;
+
 #------------------------------------------------------------
 # ATmega6450
 #------------------------------------------------------------
@@ -14600,6 +14682,18 @@ part parent "m645"
     ocdrev              = 3;
   ;
 
+#------------------------------------------------------------
+# ATmega6450P
+#------------------------------------------------------------
+
+part parent "m645"
+    id               = "m6450p";
+    desc             = "ATmega6450P";
+    signature        = 0x1E 0x96 0x0e;
+
+    ocdrev              = 3;
+  ;
+
 #------------------------------------------------------------
 # AVR XMEGA family common values
 #------------------------------------------------------------

From 77ed8b98c545a1147a698161cfb5f5f950ef598f Mon Sep 17 00:00:00 2001
From: MCUdude <hansibull@gmail.com>
Date: Fri, 7 Jan 2022 13:07:51 +0100
Subject: [PATCH 2/3] Add ATmega165A/P targets

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

diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index 8f59bef5..64139d30 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -14236,6 +14236,212 @@ part
       ;
   ;
 
+#------------------------------------------------------------
+# ATmega165A
+#------------------------------------------------------------
+
+part
+    id               = "m165a";
+    desc             = "ATmega165A";
+    signature        = 0x1e 0x94 0x10;
+    has_jtag         = yes;
+#   stk500_devcode   = 0x??;
+#   avr910_devcode   = 0x??;
+    chip_erase_delay = 9000;
+    reset            =  io;
+    pagel            = 0xd7;
+    bs2              = 0xa0;
+    pgm_enable       = "1 0 1 0  1 1 0 0   0 1 0 1  0 0 1 1",
+                       "x x x x  x x x x   x x x x  x x x x";
+
+    chip_erase       = "1 0 1 0  1 1 0 0   1 0 0 x  x x x x",
+                       "x x x x  x x x x   x x x x  x x x x";
+
+    timeout                = 200;
+    stabdelay              = 100;
+    cmdexedelay            = 25;
+    synchloops             = 32;
+    bytedelay              = 0;
+    pollindex              = 3;
+    pollvalue              = 0x53;
+    predelay               = 1;
+    postdelay              = 1;
+    pollmethod             = 1;
+
+    pp_controlstack        =
+        0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+	      0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+	      0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
+	      0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
+    hventerstabdelay       = 100;
+    progmodedelay          = 0;
+    latchcycles            = 6;
+    togglevtg              = 0;
+    poweroffdelay          = 0;
+    resetdelayms           = 0;
+    resetdelayus           = 0;
+    hvleavestabdelay       = 15;
+    chiperasepulsewidth    = 0;
+    resetdelay             = 15;
+    chiperasepolltimeout   = 10;
+    programfusepulsewidth  = 0;
+    programfusepolltimeout = 5;
+    programlockpulsewidth  = 0;
+    programlockpolltimeout = 5;
+
+    idr                    = 0x31;
+    spmcr                  = 0x57;
+    eecr                   = 0x3f;
+    allowfullpagebitstream = no;
+
+    ocdrev                 = 3;
+
+    memory "eeprom"
+        paged           = no;
+        page_size       = 4;
+        size            = 512;
+        num_pages       = 128;
+        min_write_delay = 3600;
+        max_write_delay = 3600;
+        readback_p1     = 0x00;
+        readback_p2     = 0x00;
+        read            = "  1   0   1   0      0   0   0   0",
+                          "  0   0   0   0      0   0   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",
+                          "  0   0   0   0      0   0   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   0  a1  a0",
+                          "  i   i   i   i      i   i   i   i";
+
+        writepage       = "  1   1   0   0      0   0   1   0",
+                          "  0   0   0   0      0   0   x  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"
+        paged           = yes;
+        size            = 16384;
+        page_size       = 128;
+        num_pages       = 128;
+        min_write_delay = 4500;
+        max_write_delay = 4500;
+        readback_p1     = 0x00;
+        readback_p2     = 0x00;
+        read_lo         = "  0   0   1   0      0   0   0   0",
+                          "  x   x   x 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",
+                          "  x   x   x 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   0      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   0      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",
+                          "  x   x   x a12    a11 a10  a9  a8",
+                          " a7  a6   x   x      x   x   x   x",
+                          "  x   x   x   x      x   x   x   x";
+
+        mode            = 0x41;
+        delay           = 10;
+        blocksize       = 128;
+        readsize        = 256;
+      ;
+
+    memory "lfuse"
+        size   = 1;
+        min_write_delay   = 4500;
+        max_write_delay   = 4500;
+        read            = "0 1 0 1  0 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";
+
+        write           = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0",
+                          "x x x x  x x x x   i i i i  i i i i";
+      ;
+
+    memory "hfuse"
+        size   = 1;
+        min_write_delay   = 4500;
+        max_write_delay   = 4500;
+        read            = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0",
+                          "x x x x  x x x x   o o o o  o o o o";
+
+        write           = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0",
+                          "x x x x  x x x x   i i i i  i i i i";
+      ;
+
+    memory "efuse"
+        size   = 1;
+        min_write_delay   = 4500;
+        max_write_delay   = 4500;
+        read            = "0 1 0 1  0 0 0 0  0 0 0 0  1 0 0 0",
+                          "x x x x  x x x x  o o o o  o o o o";
+
+        write           = "1 0 1 0  1 1 0 0  1 0 1 0  0 1 0 0",
+                          "x x x x  x x x x  x x x x  i i i i";
+     ;
+
+    memory "lock"
+        size   = 1;
+        min_write_delay   = 4500;
+        max_write_delay   = 4500;
+        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";
+
+        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";
+      ;
+
+    memory "signature"
+        size            = 3;
+        read            = "0  0  1  1   1  0  0  0   0  0  0  0   0  0  0  0",
+                          "x  x  x  x   x  x a1 a0   o  o  o  o   o  o  o  o";
+      ;
+
+    memory "calibration"
+        size            = 1;
+        read            = "0 0 1 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";
+      ;
+  ;
+
+#------------------------------------------------------------
+# ATmega165P
+#------------------------------------------------------------
+
+# similar to ATmega165A
+
+part parent "m165a"
+    id               = "m165p";
+    desc             = "ATmega165P";
+    signature        = 0x1e 0x94 0x07;
+
+    ocdrev              = 3;
+  ;
+
 #------------------------------------------------------------
 # ATmega325
 #------------------------------------------------------------

From 7064447378cab4c035dcd5f4d5d882c92e1c82ff Mon Sep 17 00:00:00 2001
From: MCUdude <hansibull@gmail.com>
Date: Wed, 12 Jan 2022 23:50:40 +0100
Subject: [PATCH 3/3] Add all possible ATmega__5 and ATmega__9 targets This
 includes the "non-P", A, P and PA suffixes

---
 src/avrdude.conf.in | 195 ++++++++++++++++++++++++++++++++++++--------
 1 file changed, 159 insertions(+), 36 deletions(-)

diff --git a/src/avrdude.conf.in b/src/avrdude.conf.in
index 64139d30..393b0c2a 100644
--- a/src/avrdude.conf.in
+++ b/src/avrdude.conf.in
@@ -5923,6 +5923,15 @@ part
       ;
   ;
 
+#------------------------------------------------------------
+# ATmega169A
+#------------------------------------------------------------
+
+part parent "m169"
+    id               = "m169a";
+    desc             = "ATmega169A";
+  ;
+
 #------------------------------------------------------------
 # ATmega169P
 #------------------------------------------------------------
@@ -5931,8 +5940,16 @@ part parent "m169"
     id               = "m169p";
     desc             = "ATmega169P";
     signature        = 0x1E 0x94 0x05;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega169PA
+#------------------------------------------------------------
+
+part parent "m169"
+    id               = "m169pa";
+    desc             = "ATmega169PA";
+    signature        = 0x1E 0x94 0x05;
   ;
 
 #------------------------------------------------------------
@@ -6120,45 +6137,73 @@ part
       ;
   ;
 
+#------------------------------------------------------------
+# ATmega329A
+#------------------------------------------------------------
+
+part parent "m329"
+    id               = "m329a";
+    desc             = "ATmega329a";
+  ;
+
 #------------------------------------------------------------
 # ATmega329P
 #------------------------------------------------------------
-# Identical to ATmega329 except of the signature
 
 part parent "m329"
     id               = "m329p";
     desc             = "ATmega329P";
     signature        = 0x1e 0x95 0x0b;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega329PA
+#------------------------------------------------------------
+
+part parent "m329"
+    id               = "m329pa";
+    desc             = "ATmega329PA";
+    signature        = 0x1e 0x95 0x0b;
   ;
 
 #------------------------------------------------------------
 # ATmega3290
 #------------------------------------------------------------
 
-# identical to ATmega329
-
 part parent "m329"
     id               = "m3290";
     desc             = "ATmega3290";
     signature        = 0x1e 0x95 0x04;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega3290A
+#------------------------------------------------------------
+
+part parent "m329"
+    id               = "m3290a";
+    desc             = "ATmega3290A";
+    signature        = 0x1e 0x95 0x04;
   ;
 
 #------------------------------------------------------------
 # ATmega3290P
 #------------------------------------------------------------
 
-# identical to ATmega3290 except of the signature
-
-part parent "m3290"
+part parent "m329"
     id               = "m3290p";
     desc             = "ATmega3290P";
     signature        = 0x1e 0x95 0x0c;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega3290PA
+#------------------------------------------------------------
+
+part parent "m329"
+    id               = "m3290pa";
+    desc             = "ATmega3290PA";
+    signature        = 0x1e 0x95 0x0c;
   ;
 
 #------------------------------------------------------------
@@ -6347,31 +6392,52 @@ part
   ;
 
 #------------------------------------------------------------
-# ATmega6490
+# ATmega649A
 #------------------------------------------------------------
 
-# identical to ATmega649
+part parent "m649"
+    id               = "m649a";
+    desc             = "ATmega649A";
+  ;
+
+#------------------------------------------------------------
+# ATmega649P
+#------------------------------------------------------------
+
+part parent "m649"
+    id               = "m649p";
+    desc             = "ATmega649P";
+    signature        = 0x1e 0x96 0x0b;
+  ;
+
+#------------------------------------------------------------
+# ATmega6490
+#------------------------------------------------------------
 
 part parent "m649"
     id               = "m6490";
     desc             = "ATmega6490";
     signature        = 0x1e 0x96 0x04;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega6490A
+#------------------------------------------------------------
+
+part parent "m649"
+    id               = "m6490a";
+    desc             = "ATmega6490A";
+    signature        = 0x1e 0x96 0x04;
   ;
 
 #------------------------------------------------------------
 # ATmega6490P
 #------------------------------------------------------------
 
-# identical to ATmega6490
-
 part parent "m649"
     id               = "m6490p";
     desc             = "ATmega6490P";
     signature        = 0x1e 0x96 0x0C;
-
-    ocdrev              = 3;
   ;
 
 #------------------------------------------------------------
@@ -14237,12 +14303,12 @@ part
   ;
 
 #------------------------------------------------------------
-# ATmega165A
+# ATmega165
 #------------------------------------------------------------
 
 part
-    id               = "m165a";
-    desc             = "ATmega165A";
+    id               = "m165";
+    desc             = "ATmega165";
     signature        = 0x1e 0x94 0x10;
     has_jtag         = yes;
 #   stk500_devcode   = 0x??;
@@ -14428,18 +14494,33 @@ part
       ;
   ;
 
+#------------------------------------------------------------
+# ATmega165A
+#------------------------------------------------------------
+
+part parent "m165"
+    id               = "m165a";
+    desc             = "ATmega165A";
+  ;
+
 #------------------------------------------------------------
 # ATmega165P
 #------------------------------------------------------------
 
-# similar to ATmega165A
-
-part parent "m165a"
+part parent "m165"
     id               = "m165p";
     desc             = "ATmega165P";
     signature        = 0x1e 0x94 0x07;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega165PA
+#------------------------------------------------------------
+
+part parent "m165"
+    id               = "m165pa";
+    desc             = "ATmega165PA";
+    signature        = 0x1e 0x94 0x07;
   ;
 
 #------------------------------------------------------------
@@ -14634,17 +14715,32 @@ part
   ;
 
 #------------------------------------------------------------
-# ATmega325P
+# ATmega325A
 #------------------------------------------------------------
 
-# similar to ATmega325
+part parent "m325"
+    id               = "m325a";
+    desc             = "ATmega325A";
+  ;
+
+#------------------------------------------------------------
+# ATmega325P
+#------------------------------------------------------------
 
 part parent "m325"
     id               = "m325p";
     desc             = "ATmega325P";
     signature        = 0x1e 0x95 0x0d;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega325PA
+#------------------------------------------------------------
+
+part parent "m325"
+    id               = "m325pa";
+    desc             = "ATmega325PA";
+    signature        = 0x1e 0x95 0x0d;
   ;
 
 #------------------------------------------------------------
@@ -14839,17 +14935,22 @@ part
   ;
 
 #------------------------------------------------------------
-# ATmega645P
+# ATmega645A
 #------------------------------------------------------------
 
-# similar to ATmega645
+part parent "m645"
+    id               = "m645a";
+    desc             = "ATmega645A";
+  ;
+
+#------------------------------------------------------------
+# ATmega645P
+#------------------------------------------------------------
 
 part parent "m645"
     id               = "m645p";
     desc             = "ATmega645P";
     signature        = 0x1e 0x96 0x0d;
-
-    ocdrev              = 3;
   ;
 
 #------------------------------------------------------------
@@ -14860,8 +14961,16 @@ part parent "m325"
     id               = "m3250";
     desc             = "ATmega3250";
     signature        = 0x1E 0x95 0x06;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega3250A
+#------------------------------------------------------------
+
+part parent "m325"
+    id               = "m3250a";
+    desc             = "ATmega3250A";
+    signature        = 0x1E 0x95 0x06;
   ;
 
 #------------------------------------------------------------
@@ -14872,8 +14981,16 @@ part parent "m325"
     id               = "m3250p";
     desc             = "ATmega3250P";
     signature        = 0x1E 0x95 0x0e;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega3250PA
+#------------------------------------------------------------
+
+part parent "m325"
+    id               = "m3250pa";
+    desc             = "ATmega3250PA";
+    signature        = 0x1E 0x95 0x0e;
   ;
 
 #------------------------------------------------------------
@@ -14884,8 +15001,16 @@ part parent "m645"
     id               = "m6450";
     desc             = "ATmega6450";
     signature        = 0x1E 0x96 0x06;
+  ;
 
-    ocdrev              = 3;
+#------------------------------------------------------------
+# ATmega6450A
+#------------------------------------------------------------
+
+part parent "m645"
+    id               = "m6450a";
+    desc             = "ATmega6450A";
+    signature        = 0x1E 0x96 0x06;
   ;
 
 #------------------------------------------------------------
@@ -14896,8 +15021,6 @@ part parent "m645"
     id               = "m6450p";
     desc             = "ATmega6450P";
     signature        = 0x1E 0x96 0x0e;
-
-    ocdrev              = 3;
   ;
 
 #------------------------------------------------------------