Index: drivers/mtd/devices/m25p80.c =================================================================== --- drivers/mtd/devices/m25p80.c (revision 3333) +++ drivers/mtd/devices/m25p80.c (working copy) @@ -212,7 +212,7 @@ { DEBUG(MTD_DEBUG_LEVEL3, "%s: %s %dKiB at 0x%08x\n", dev_name(&flash->spi->dev), __func__, - flash->mtd.erasesize / 1024, offset); + flash->mtd.writesize / 1024, offset); /* Wait until finished previous write command. */ if (wait_till_ready(flash)) @@ -255,7 +255,7 @@ /* sanity checks */ if (instr->addr + instr->len > flash->mtd.size) return -EINVAL; - div_u64_rem(instr->len, mtd->erasesize, &rem); + div_u64_rem(instr->len, mtd->writesize, &rem); if (rem) return -EINVAL; @@ -286,8 +286,8 @@ return -EIO; } - addr += mtd->erasesize; - len -= mtd->erasesize; + addr += mtd->writesize; + len -= mtd->writesize; } } @@ -831,9 +831,8 @@ else flash->mtd.name = dev_name(&spi->dev); - flash->mtd.type = MTD_NORFLASH; - flash->mtd.writesize = 1; - flash->mtd.flags = MTD_CAP_NORFLASH; + flash->mtd.type = MTD_DATAFLASH; + flash->mtd.flags = MTD_WRITEABLE; flash->mtd.size = info->sector_size * info->n_sectors; flash->mtd.erase = m25p80_erase; flash->mtd.read = m25p80_read; @@ -845,12 +844,13 @@ flash->mtd.write = m25p80_write; /* prefer "small sector" erase if possible */ - if (info->flags & SECT_4K) { + flash->mtd.erasesize = info->sector_size; + if (info->flags & SECT_4K && (info->sector_size%4096)==0 ) { flash->erase_opcode = OPCODE_BE_4K; - flash->mtd.erasesize = 4096; + flash->mtd.writesize = 4096; } else { flash->erase_opcode = OPCODE_SE; - flash->mtd.erasesize = info->sector_size; + flash->mtd.writesize = info->sector_size; } flash->mtd.dev.parent = &spi->dev; @@ -860,10 +860,11 @@ DEBUG(MTD_DEBUG_LEVEL2, "mtd .name = %s, .size = 0x%llx (%lldMiB) " - ".erasesize = 0x%.8x (%uKiB) .numeraseregions = %d\n", + ".erasesize = 0x%.8x (%uKiB) .writesize = 0x%.8x (%uKiB) .numeraseregions = %d\n", flash->mtd.name, (long long)flash->mtd.size, (long long)(flash->mtd.size >> 20), flash->mtd.erasesize, flash->mtd.erasesize / 1024, + flash->mtd.writesize, flash->mtd.writesize / 1024, flash->mtd.numeraseregions); if (flash->mtd.numeraseregions)