diff --git a/avrdude/ChangeLog b/avrdude/ChangeLog
index ca8859f1..1612b9c7 100644
--- a/avrdude/ChangeLog
+++ b/avrdude/ChangeLog
@@ -1,3 +1,8 @@
+2012-01-21  Rene Liebscher <R.Liebscher@gmx.de>
+
+	bug #21797: AT90PWM316: New part description
+	* avrdude.conf.in: added pwm316 with parent pwm3b but 16KB flash
+
 2012-01-20  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	* configure.ac: Check for presence of lusb_usb.h as an alternative
diff --git a/avrdude/avrdude.conf.in b/avrdude/avrdude.conf.in
index fa2ffef9..a99261f4 100644
--- a/avrdude/avrdude.conf.in
+++ b/avrdude/avrdude.conf.in
@@ -9735,6 +9735,58 @@ part parent "pwm2b"
      desc          = "AT90PWM3B";
   ;
 
+#------------------------------------------------------------
+# AT90PWM316
+#------------------------------------------------------------
+
+# Similar to AT90PWM3B, but with 16 kiB flash, 512 B EEPROM, and 1024 B SRAM.
+
+part parent "pwm3b"
+     id            = "pwm316";
+     desc          = "AT90PWM316";
+     signature     = 0x1e 0x94 0x83;
+
+    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   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   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   0 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	= 128;
+	readsize	= 256;
+      ;
+  ;
+
 #------------------------------------------------------------
 # ATtiny25
 #------------------------------------------------------------