From 715249e2d4e0d9e99bda9f653e58c9d9d8ceaa39 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Tue, 3 Sep 2013 21:43:24 +0000
Subject: [PATCH] Submitted by Brane Zdralo: patch #7769: Write flash fails for
 AVR910 programmers * avr910.c (avr910_paged_write): Fix flash addresses in
 'A' command.

git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1206 81a1dc3b-b13d-400b-aceb-764788c761c2
---
 ChangeLog |  7 +++++++
 NEWS      |  1 +
 avr910.c  | 10 ++++++++--
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e6ad1c8a..1ed4f087 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-09-03  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	Submitted by Brane Ždralo:
+	patch #7769: Write flash fails for AVR910 programmers
+	* avr910.c (avr910_paged_write): Fix flash addresses in
+	'A' command.
+
 2013-09-03  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	Submitted by Fred (magister):
diff --git a/NEWS b/NEWS
index c1f22ffc..17173906 100644
--- a/NEWS
+++ b/NEWS
@@ -90,6 +90,7 @@ Current:
       - bug #38580 Current svn head, xmega and fuses, all fuses tied to fuse0
       - bug #39691 Buffer overrun when reading EEPROM byte with JTAGICE3
       - bug #38951: AVR109 use byte offset instead of word offset
+      - patch #7769: Write flash fails for AVR910 programmers
 
   * Keep track of input file contents
 
diff --git a/avr910.c b/avr910.c
index 6db353b6..d6b3c4d6 100644
--- a/avr910.c
+++ b/avr910.c
@@ -612,13 +612,19 @@ static int avr910_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
     unsigned int max_addr = addr + n_bytes;
     char *cmd;
     unsigned int blocksize = PDATA(pgm)->buffersize;
+    int wr_size;
 
     if (strcmp(m->desc, "flash") && strcmp(m->desc, "eeprom"))
       return -2;
 
-    if (m->desc[0] == 'e')
+    if (m->desc[0] == 'e') {
       blocksize = 1;		/* Write to eeprom single bytes only */
-    avr910_set_addr(pgm, addr);
+      wr_size = 1;
+    } else {
+      wr_size = 2;
+    }
+
+    avr910_set_addr(pgm, addr / wr_size);
 
     cmd = malloc(4 + blocksize);
     if (!cmd) return -1;