diff --git a/82802ab.c b/82802ab.c
deleted file mode 100644
index 38a5ce2..0000000
--- a/82802ab.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * This file is part of the flashrom project.
- *
- * Copyright (C) 2000 Silicon Integrated System Corporation
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
- */
-
-/*
- * Datasheet:
- *  - Name: Intel 82802AB/82802AC Firmware Hub (FWH)
- *  - URL: http://www.intel.com/design/chipsets/datashts/290658.htm
- *  - PDF: http://download.intel.com/design/chipsets/datashts/29065804.pdf
- *  - Order number: 290658-004
- */
-
-#include <stdio.h>
-#include <stdint.h>
-#include "flash.h"
-
-// I need that Berkeley bit-map printer
-void print_82802ab_status(uint8_t status)
-{
-	printf("%s", status & 0x80 ? "Ready:" : "Busy:");
-	printf("%s", status & 0x40 ? "BE SUSPEND:" : "BE RUN/FINISH:");
-	printf("%s", status & 0x20 ? "BE ERROR:" : "BE OK:");
-	printf("%s", status & 0x10 ? "PROG ERR:" : "PROG OK:");
-	printf("%s", status & 0x8 ? "VP ERR:" : "VPP OK:");
-	printf("%s", status & 0x4 ? "PROG SUSPEND:" : "PROG RUN/FINISH:");
-	printf("%s", status & 0x2 ? "WP|TBL#|WP#,ABORT:" : "UNLOCK:");
-}
-
-int probe_82802ab(struct flashchip *flash)
-{
-	volatile uint8_t *bios = flash->virtual_memory;
-	uint8_t id1, id2;
-
-#if 0
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0x90;
-#endif
-
-	*bios = 0xff;
-	myusec_delay(10);
-	*bios = 0x90;
-	myusec_delay(10);
-
-	id1 = *(volatile uint8_t *)bios;
-	id2 = *(volatile uint8_t *)(bios + 0x01);
-
-	/* Leave ID mode */
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0xF0;
-
-	myusec_delay(10);
-
-	printf_debug("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2);
-
-	if (id1 != flash->manufacture_id || id2 != flash->model_id)
-		return 0;
-
-	map_flash_registers(flash);
-
-	return 1;
-}
-
-uint8_t wait_82802ab(volatile uint8_t *bios)
-{
-	uint8_t status;
-	uint8_t id1, id2;
-
-	*bios = 0x70;
-	if ((*bios & 0x80) == 0) {	// it's busy
-		while ((*bios & 0x80) == 0) ;
-	}
-
-	status = *bios;
-
-	// put another command to get out of status register mode
-
-	*bios = 0x90;
-	myusec_delay(10);
-
-	id1 = *(volatile uint8_t *)bios;
-	id2 = *(volatile uint8_t *)(bios + 0x01);
-
-	// this is needed to jam it out of "read id" mode
-	*(volatile uint8_t *)(bios + 0x5555) = 0xAA;
-	*(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
-	*(volatile uint8_t *)(bios + 0x5555) = 0xF0;
-
-	return status;
-}
-
-int erase_82802ab_block(struct flashchip *flash, int offset)
-{
-	volatile uint8_t *bios = flash->virtual_memory + offset;
-	volatile uint8_t *wrprotect = flash->virtual_registers + offset + 2;
-	uint8_t status;
-
-	// clear status register
-	*bios = 0x50;
-	//printf("Erase at %p\n", bios);
-	// clear write protect
-	//printf("write protect is at %p\n", (wrprotect));
-	//printf("write protect is 0x%x\n", *(wrprotect));
-	*(wrprotect) = 0;
-	//printf("write protect is 0x%x\n", *(wrprotect));
-
-	// now start it
-	*(volatile uint8_t *)(bios) = 0x20;
-	*(volatile uint8_t *)(bios) = 0xd0;
-	myusec_delay(10);
-	// now let's see what the register is
-	status = wait_82802ab(flash->virtual_memory);
-	//print_82802ab_status(status);
-	printf("DONE BLOCK 0x%x\n", offset);
-
-	return 0;
-}
-
-int erase_82802ab(struct flashchip *flash)
-{
-	int i;
-	unsigned int total_size = flash->total_size * 1024;
-
-	printf("total_size is %d; flash->page_size is %d\n",
-	       total_size, flash->page_size);
-	for (i = 0; i < total_size; i += flash->page_size)
-		erase_82802ab_block(flash, i);
-	printf("DONE ERASE\n");
-
-	return 0;
-}
-
-void write_page_82802ab(volatile uint8_t *bios, uint8_t *src,
-			volatile uint8_t *dst, int page_size)
-{
-	int i;
-
-	for (i = 0; i < page_size; i++) {
-		/* transfer data from source to destination */
-		*dst = 0x40;
-		*dst++ = *src++;
-		wait_82802ab(bios);
-	}
-}
-
-int write_82802ab(struct flashchip *flash, uint8_t *buf)
-{
-	int i;
-	int total_size = flash->total_size * 1024;
-	int page_size = flash->page_size;
-	volatile uint8_t *bios = flash->virtual_memory;
-
-	erase_82802ab(flash);
-	if (*bios != 0xff) {
-		printf("ERASE FAILED\n");
-		return -1;
-	}
-	printf("Programming page: ");
-	for (i = 0; i < total_size / page_size; i++) {
-		printf("%04d at address: 0x%08x", i, 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");
-	protect_jedec(bios);
-
-	return 0;
-}
diff --git a/Makefile b/Makefile
index 57c9686..424a5c4 100644
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@
 
 OBJS = chipset_enable.o board_enable.o udelay.o jedec.o sst28sf040.o \
 	am29f040b.o mx29f002.o sst39sf020.o m29f400bt.o w49f002u.o \
-	82802ab.o msys_doc.o pm49fl004.o sst49lf040.o sst49lfxxxc.o \
+	msys_doc.o pm49fl004.o sst49lf040.o sst49lfxxxc.o \
 	sst_fwhub.o layout.o cbtable.o flashchips.o flashrom.o \
 	sharplhf00l04.o w29ee011.o spi.o
 
diff --git a/flashchips.c b/flashchips.c
index 89a3753..a46e009 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -192,10 +192,10 @@
 	 probe_spi,	generic_spi_chip_erase_c7,	generic_spi_chip_write, generic_spi_chip_read},
 	{"M25P128",	ST_ID,		ST_M25P128,	16384,	256,
 	 probe_spi,	generic_spi_chip_erase_c7,	generic_spi_chip_write, generic_spi_chip_read},
-	{"82802ab",	137,		173,		512, 64 * 1024,
-	 probe_82802ab, erase_82802ab,	write_82802ab},
-	{"82802ac",	137,		172,		1024, 64 * 1024,
-	 probe_82802ab, erase_82802ab,	write_82802ab},
+	{"82802ab",	INTEL_ID,	173,		512, 64 * 1024,
+	 probe_lhf00l04, erase_lhf00l04,	write_lhf00l04},
+	{"82802ac",	INTEL_ID,	172,		1024, 64 * 1024,
+	 probe_lhf00l04, erase_lhf00l04,	write_lhf00l04},
 	{"F49B002UA",   EMST_ID,        EMST_F49B002UA, 256, 4096,
          probe_jedec,   erase_chip_jedec, write_49f002},
 #ifndef DISABLE_DOC
diff --git a/sharplhf00l04.c b/sharplhf00l04.c
index da7dc3f..e2257d4 100644
--- a/sharplhf00l04.c
+++ b/sharplhf00l04.c
@@ -18,6 +18,14 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+/*
+ * Datasheet:
+ *  - Name: Intel 82802AB/82802AC Firmware Hub (FWH)
+ *  - URL: http://www.intel.com/design/chipsets/datashts/290658.htm
+ *  - PDF: http://download.intel.com/design/chipsets/datashts/29065804.pdf
+ *  - Order number: 290658-004
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include "flash.h"
