Enable unlocking (erasing/writing) W39V040FB chips

Add code for the unlocking (erasing/writing) of Winbond W39V040FB
chips, enabling erasing/writing this type of chip.

Corresponding to flashrom svn r1248.

Signed-off-by: Idwer Vollering <vidwer@gmail.com>
Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
diff --git a/chipdrivers.h b/chipdrivers.h
index a65cb99..a6faf9f 100644
--- a/chipdrivers.h
+++ b/chipdrivers.h
@@ -119,6 +119,7 @@
 int printlock_w39v080a(struct flashchip *flash);
 int printlock_w39v080fa(struct flashchip *flash);
 int printlock_w39v080fa_dual(struct flashchip *flash);
+int unlock_w39v040fb(struct flashchip *flash);
 int unlock_w39v080fa(struct flashchip *flash);
 
 /* w29ee011.c */
diff --git a/flashchips.c b/flashchips.c
index 8082160..b6dff6c 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -7706,6 +7706,7 @@
 			}
 		},
 		.printlock	= printlock_w39v040fb,
+		.unlock		= unlock_w39v040fb,
 		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
diff --git a/w39.c b/w39.c
index 65cf32f..06fabfd 100644
--- a/w39.c
+++ b/w39.c
@@ -244,6 +244,16 @@
 	return -1;
 }
 
+int unlock_w39v040fb(struct flashchip *flash)
+{
+	if (unlock_w39_fwh(flash))
+		return -1;
+	if (printlock_w39_common(flash, 0x7fff2))
+		return -1;
+
+	return 0;
+}
+
 int unlock_w39v080fa(struct flashchip *flash)
 {
 	if (unlock_w39_fwh(flash))