diff options
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0002.c | 10 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_probe.c | 2 | ||||
-rw-r--r-- | include/linux/mtd/cfi.h | 1 |
3 files changed, 9 insertions, 4 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c index eb8ce0cf2855..288fc2ea8494 100644 --- a/drivers/mtd/chips/cfi_cmdset_0002.c +++ b/drivers/mtd/chips/cfi_cmdset_0002.c | |||
@@ -291,6 +291,8 @@ static void fixup_sst39vf_rev_b(struct mtd_info *mtd, void *param) | |||
291 | 291 | ||
292 | cfi->addr_unlock1 = 0x555; | 292 | cfi->addr_unlock1 = 0x555; |
293 | cfi->addr_unlock2 = 0x2AA; | 293 | cfi->addr_unlock2 = 0x2AA; |
294 | |||
295 | cfi->sector_erase_cmd = CMD(0x50); | ||
294 | } | 296 | } |
295 | 297 | ||
296 | static void fixup_sst38vf640x_sectorsize(struct mtd_info *mtd, void *param) | 298 | static void fixup_sst38vf640x_sectorsize(struct mtd_info *mtd, void *param) |
@@ -691,7 +693,7 @@ static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr | |||
691 | * there was an error (so leave the erase | 693 | * there was an error (so leave the erase |
692 | * routine to recover from it) or we trying to | 694 | * routine to recover from it) or we trying to |
693 | * use the erase-in-progress sector. */ | 695 | * use the erase-in-progress sector. */ |
694 | map_write(map, CMD(0x30), chip->in_progress_block_addr); | 696 | map_write(map, cfi->sector_erase_cmd, chip->in_progress_block_addr); |
695 | chip->state = FL_ERASING; | 697 | chip->state = FL_ERASING; |
696 | chip->oldstate = FL_READY; | 698 | chip->oldstate = FL_READY; |
697 | printk(KERN_ERR "MTD %s(): chip not ready after erase suspend\n", __func__); | 699 | printk(KERN_ERR "MTD %s(): chip not ready after erase suspend\n", __func__); |
@@ -744,7 +746,7 @@ static void put_chip(struct map_info *map, struct flchip *chip, unsigned long ad | |||
744 | switch(chip->oldstate) { | 746 | switch(chip->oldstate) { |
745 | case FL_ERASING: | 747 | case FL_ERASING: |
746 | chip->state = chip->oldstate; | 748 | chip->state = chip->oldstate; |
747 | map_write(map, CMD(0x30), chip->in_progress_block_addr); | 749 | map_write(map, cfi->sector_erase_cmd, chip->in_progress_block_addr); |
748 | chip->oldstate = FL_READY; | 750 | chip->oldstate = FL_READY; |
749 | chip->state = FL_ERASING; | 751 | chip->state = FL_ERASING; |
750 | break; | 752 | break; |
@@ -887,7 +889,7 @@ static void __xipram xip_udelay(struct map_info *map, struct flchip *chip, | |||
887 | local_irq_disable(); | 889 | local_irq_disable(); |
888 | 890 | ||
889 | /* Resume the write or erase operation */ | 891 | /* Resume the write or erase operation */ |
890 | map_write(map, CMD(0x30), adr); | 892 | map_write(map, cfi->sector_erase_cmd, adr); |
891 | chip->state = oldstate; | 893 | chip->state = oldstate; |
892 | start = xip_currtime(); | 894 | start = xip_currtime(); |
893 | } else if (usec >= 1000000/HZ) { | 895 | } else if (usec >= 1000000/HZ) { |
@@ -1670,7 +1672,7 @@ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, | |||
1670 | cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); | 1672 | cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); |
1671 | cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); | 1673 | cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL); |
1672 | cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); | 1674 | cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL); |
1673 | map_write(map, CMD(0x30), adr); | 1675 | map_write(map, cfi->sector_erase_cmd, adr); |
1674 | 1676 | ||
1675 | chip->state = FL_ERASING; | 1677 | chip->state = FL_ERASING; |
1676 | chip->erase_suspended = 0; | 1678 | chip->erase_suspended = 0; |
diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c index 8f5b96aa87a0..d25535279404 100644 --- a/drivers/mtd/chips/cfi_probe.c +++ b/drivers/mtd/chips/cfi_probe.c | |||
@@ -177,6 +177,8 @@ static int __xipram cfi_chip_setup(struct map_info *map, | |||
177 | 177 | ||
178 | cfi->cfi_mode = CFI_MODE_CFI; | 178 | cfi->cfi_mode = CFI_MODE_CFI; |
179 | 179 | ||
180 | cfi->sector_erase_cmd = CMD(0x30); | ||
181 | |||
180 | /* Read the CFI info structure */ | 182 | /* Read the CFI info structure */ |
181 | xip_disable_qry(base, map, cfi); | 183 | xip_disable_qry(base, map, cfi); |
182 | for (i=0; i<(sizeof(struct cfi_ident) + num_erase_regions * 4); i++) | 184 | for (i=0; i<(sizeof(struct cfi_ident) + num_erase_regions * 4); i++) |
diff --git a/include/linux/mtd/cfi.h b/include/linux/mtd/cfi.h index d2118b0eac9a..4dd0c2cd7659 100644 --- a/include/linux/mtd/cfi.h +++ b/include/linux/mtd/cfi.h | |||
@@ -289,6 +289,7 @@ struct cfi_private { | |||
289 | must be of the same type. */ | 289 | must be of the same type. */ |
290 | int mfr, id; | 290 | int mfr, id; |
291 | int numchips; | 291 | int numchips; |
292 | map_word sector_erase_cmd; | ||
292 | unsigned long chipshift; /* Because they're of the same type */ | 293 | unsigned long chipshift; /* Because they're of the same type */ |
293 | const char *im_name; /* inter_module name for cmdset_setup */ | 294 | const char *im_name; /* inter_module name for cmdset_setup */ |
294 | struct flchip chips[0]; /* per-chip data structure for each chip */ | 295 | struct flchip chips[0]; /* per-chip data structure for each chip */ |