diff --git a/chipdrivers.h b/chipdrivers.h
index c96f44564e8727ac5982bf14d889084a6c755b94..6d5cef0fdbed736b8b41a223e51497fea1c82d61 100644
--- a/chipdrivers.h
+++ b/chipdrivers.h
@@ -100,11 +100,7 @@ int erase_sector_28sf040(struct flashchip *flash, unsigned int address, unsigned
 int write_28sf040(struct flashchip *flash, uint8_t *buf);
 
 /* sst49lfxxxc.c */
-int probe_49lfxxxc(struct flashchip *flash);
-int erase_49lfxxxc(struct flashchip *flash);
 int erase_sector_49lfxxxc(struct flashchip *flash, unsigned int address, unsigned int sector_size);
-int erase_block_49lfxxxc(struct flashchip *flash, unsigned int address, unsigned int sector_size);
-int erase_chip_49lfxxxc(struct flashchip *flash, unsigned int addr, unsigned int blocksize);
 int write_49lfxxxc(struct flashchip *flash, uint8_t *buf);
 int unlock_49lfxxxc(struct flashchip *flash);
 
diff --git a/flashchips.c b/flashchips.c
index 47cdc325ad676d15150b855187a03ed2ee208172..c69dd57e4f9485dbf62788c40bae0bcbe306a85b 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -4190,9 +4190,10 @@ struct flashchip flashchips[] = {
 					{8 * 1024, 2},
 					{16 * 1024, 1},
 				},
-				.block_erase = erase_block_49lfxxxc,
+				.block_erase = erase_block_82802ab,
 			}
 		},
+		.unlock		= unlock_49lfxxxc,
 		.write		= write_49lfxxxc,
 		.read		= read_memmapped,
 	},
@@ -4252,9 +4253,10 @@ struct flashchip flashchips[] = {
 					{8 * 1024, 2},
 					{16 * 1024, 1},
 				},
-				.block_erase = erase_block_49lfxxxc,
+				.block_erase = erase_block_82802ab,
 			}
 		},
+		.unlock		= unlock_49lfxxxc,
 		.write		= write_49lfxxxc,
 		.read		= read_memmapped,
 	},
@@ -4283,9 +4285,10 @@ struct flashchip flashchips[] = {
 					{8 * 1024, 2},
 					{16 * 1024, 1},
 				},
-				.block_erase = erase_block_49lfxxxc,
+				.block_erase = erase_block_82802ab,
 			}
 		},
+		.unlock		= unlock_49lfxxxc,
 		.write		= write_49lfxxxc,
 		.read		= read_memmapped,
 	},
@@ -4459,7 +4462,7 @@ struct flashchip flashchips[] = {
 					{8 * 1024, 2},
 					{16 * 1024, 1},
 				},
-				.block_erase = erase_block_49lfxxxc,
+				.block_erase = erase_block_82802ab,
 			}
 		},
 		.unlock		= unlock_49lfxxxc,
diff --git a/sst49lfxxxc.c b/sst49lfxxxc.c
index 9f9ee308c5848c48d05684fe901a360b382dd7e7..e7e5b6162baa728a45bc8b3656abda6298c22f4f 100644
--- a/sst49lfxxxc.c
+++ b/sst49lfxxxc.c
@@ -24,19 +24,6 @@
 #include "flash.h"
 #include "chipdrivers.h"
 
-#define SECTOR_ERASE		0x30
-#define BLOCK_ERASE		0x20
-#define ERASE			0xD0
-#define AUTO_PGRM		0x10
-#define RESET			0xFF
-#define READ_ID			0x90
-#define READ_STATUS		0x70
-#define CLEAR_STATUS		0x50
-
-#define STATUS_BPS		(1 << 1)
-#define	STATUS_ESS		(1 << 6)
-#define	STATUS_WSMS		(1 << 7)
-
 int unlock_block_49lfxxxc(struct flashchip *flash, unsigned long address, unsigned char bits)
 {
 	unsigned long lock = flash->virtual_registers + address + 2;
@@ -90,21 +77,13 @@ int unlock_49lfxxxc(struct flashchip *flash)
 
 int erase_sector_49lfxxxc(struct flashchip *flash, unsigned int address, unsigned int sector_size)
 {
-	unsigned char status;
+	uint8_t status;
 	chipaddr bios = flash->virtual_memory;
 
-	chip_writeb(SECTOR_ERASE, bios);
-	chip_writeb(ERASE, bios + address);
+	chip_writeb(0x30, bios);
+	chip_writeb(0xD0, bios + address);
 
-	do {
-		status = chip_readb(bios);
-		if (status & (STATUS_ESS | STATUS_BPS)) {
-			printf("sector erase FAILED at address=0x%08lx status=0x%01x\n", bios + address, status);
-			chip_writeb(CLEAR_STATUS, bios);
-			return (-1);
-		}
-	} while (!(status & STATUS_WSMS));
-	chip_writeb(RESET, bios);
+	status = wait_82802ab(bios);
 
 	if (check_erased_range(flash, address, sector_size)) {
 		fprintf(stderr, "ERASE FAILED!\n");
@@ -113,101 +92,6 @@ int erase_sector_49lfxxxc(struct flashchip *flash, unsigned int address, unsigne
 	return 0;
 }
 
-int erase_block_49lfxxxc(struct flashchip *flash, unsigned int address, unsigned int block_size)
-{
-	unsigned char status;
-	chipaddr bios = flash->virtual_memory;
-
-	chip_writeb(BLOCK_ERASE, bios);
-	chip_writeb(ERASE, bios + address);
-
-	do {
-		status = chip_readb(bios);
-		if (status & (STATUS_ESS | STATUS_BPS)) {
-			printf("block erase FAILED at address=0x%08lx status=0x%01x\n", bios + address, status);
-			chip_writeb(CLEAR_STATUS, bios);
-			return (-1);
-		}
-	} while (!(status & STATUS_WSMS));
-	chip_writeb(RESET, bios);
-
-	if (check_erased_range(flash, address, block_size)) {
-		fprintf(stderr, "ERASE FAILED!\n");
-		return -1;
-	}
-	return 0;
-}
-
-static int write_sector_49lfxxxc(chipaddr bios, uint8_t *src, chipaddr dst,
-				 unsigned int page_size)
-{
-	int i;
-	unsigned char status;
-
-	chip_writeb(CLEAR_STATUS, bios);
-	for (i = 0; i < page_size; i++) {
-		/* transfer data from source to destination */
-		if (*src == 0xFF) {
-			dst++, src++;
-			/* If the data is 0xFF, don't program it */
-			continue;
-		}
-		/*issue AUTO PROGRAM command */
-		chip_writeb(AUTO_PGRM, bios);
-		chip_writeb(*src++, dst++);
-
-		do {
-			status = chip_readb(bios);
-			if (status & (STATUS_ESS | STATUS_BPS)) {
-				printf("sector write FAILED at address=0x%08lx status=0x%01x\n", dst, status);
-				chip_writeb(CLEAR_STATUS, bios);
-				return (-1);
-			}
-		} while (!(status & STATUS_WSMS));
-	}
-
-	return 0;
-}
-
-int probe_49lfxxxc(struct flashchip *flash)
-{
-	chipaddr bios = flash->virtual_memory;
-	uint8_t id1, id2;
-
-	chip_writeb(RESET, bios);
-
-	chip_writeb(READ_ID, bios);
-	id1 = chip_readb(bios);
-	id2 = chip_readb(bios + 0x01);
-
-	chip_writeb(RESET, bios);
-
-	printf_debug("%s: id1 0x%02x, id2 0x%02x\n", __func__, id1, id2);
-
-	if (!(id1 == flash->manufacture_id && id2 == flash->model_id))
-		return 0;
-
-	map_flash_registers(flash);
-
-	return 1;
-}
-
-int erase_49lfxxxc(struct flashchip *flash)
-{
-	chipaddr bios = flash->virtual_memory;
-	int i;
-	unsigned int total_size = flash->total_size * 1024;
-
-	write_lockbits_49lfxxxc(flash, 0);
-	for (i = 0; i < total_size; i += flash->page_size)
-		if (erase_sector_49lfxxxc(flash, i, flash->page_size))
-			return (-1);
-
-	chip_writeb(RESET, bios);
-
-	return 0;
-}
-
 int write_49lfxxxc(struct flashchip *flash, uint8_t *buf)
 {
 	int i;
@@ -226,13 +110,13 @@ int write_49lfxxxc(struct flashchip *flash, uint8_t *buf)
 
 		/* write to the sector */
 		printf("%04d at address: 0x%08x", i, i * page_size);
-		write_sector_49lfxxxc(bios, buf + i * page_size,
+		write_page_82802ab(bios, buf + i * page_size,
 				      bios + i * page_size, page_size);
 		printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
 	}
 	printf("\n");
 
-	chip_writeb(RESET, bios);
+	chip_writeb(0xFF, bios);
 
 	return 0;
 }