Use generic unlocking infrastructure for SPI chips

Actually check if the unlock worked instead of just assuming it worked.

Corresponding to flashrom svn r1082.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
diff --git a/spi25.c b/spi25.c
index fa76531..32bb73c 100644
--- a/spi25.c
+++ b/spi25.c
@@ -436,12 +436,6 @@
 		.readarr	= NULL,
 	}};
 	
-	result = spi_disable_blockprotect();
-	if (result) {
-		msg_cerr("spi_disable_blockprotect failed\n");
-		return result;
-	}
-	
 	result = spi_send_multicommand(cmds);
 	if (result) {
 		msg_cerr("%s failed during command execution\n",
@@ -482,12 +476,6 @@
 		.readarr	= NULL,
 	}};
 
-	result = spi_disable_blockprotect();
-	if (result) {
-		msg_cerr("spi_disable_blockprotect failed\n");
-		return result;
-	}
-
 	result = spi_send_multicommand(cmds);
 	if (result) {
 		msg_cerr("%s failed during command execution\n", __func__);
@@ -841,7 +829,7 @@
 	return result;
 }
 
-int spi_disable_blockprotect(void)
+int spi_disable_blockprotect(struct flashchip *flash)
 {
 	uint8_t status;
 	int result;
@@ -855,6 +843,11 @@
 			msg_cerr("spi_write_status_register failed\n");
 			return result;
 		}
+		status = spi_read_status_register();
+		if ((status & 0x3c) != 0) {
+			msg_cerr("Block protection could not be disabled!\n");
+			return 1;
+		}
 	}
 	return 0;
 }
@@ -970,7 +963,6 @@
 {
 	int i, result = 0;
 
-	spi_disable_blockprotect();
 	for (i = start; i < start + len; i++) {
 		result = spi_byte_program(i, buf[i]);
 		if (result)
@@ -984,7 +976,6 @@
 
 int spi_chip_write_1(struct flashchip *flash, uint8_t *buf)
 {
-	spi_disable_blockprotect();
 	/* Erase first */
 	msg_cinfo("Erasing flash before programming... ");
 	if (erase_flash(flash)) {