+ int regions = 0;
+ int numblocks = 0;
+ ulong offset;
+ ulong base_addr;
+
+ /*
+ * First detect the number of eraseregions so that we can allocate
+ * the array of eraseregions correctly
+ */
+ for (sect = 0; sect < fi->sector_count; sect++) {
+ if (sect_size_old != flash_sector_size(fi, sect))
+ regions++;
+ sect_size_old = flash_sector_size(fi, sect);
+ }
+
+ switch (regions) {
+ case 0:
+ return 1;
+ case 1: /* flash has uniform erase size */
+ mtd->numeraseregions = 0;
+ mtd->erasesize = sect_size_old;
+ return 0;
+ }
+
+ mtd->numeraseregions = regions;
+ mtd->eraseregions = malloc(sizeof(struct mtd_erase_region_info) * regions);