static int __init epxa_mtd_init(void) { int i; printk(KERN_NOTICE "%s flash device: %x at %x\n", BOARD_NAME, FLASH_SIZE, FLASH_START); epxa_map.map_priv_1 = (unsigned long)ioremap(FLASH_START, FLASH_SIZE); if (!epxa_map.map_priv_1) { printk("Failed to ioremap %s flash\n",BOARD_NAME); return -EIO; } mymtd = do_map_probe("cfi_probe", &epxa_map); if (!mymtd) { iounmap((void *)epxa_map.map_priv_1); return -ENXIO; } mymtd->module = THIS_MODULE; /* Unlock the flash device. */ if(mymtd->unlock){ for (i=0; i<mymtd->numeraseregions;i++){ int j; for(j=0;j<mymtd->eraseregions[i].numblocks;j++){ mymtd->unlock(mymtd,mymtd->eraseregions[i].offset + j * mymtd->eraseregions[i].erasesize,mymtd->eraseregions[i].erasesize); } } } #ifdef CONFIG_MTD_REDBOOT_PARTS nr_parts = parse_redboot_partitions(mymtd, &parts); if (nr_parts > 0) { add_mtd_partitions(mymtd, parts, nr_parts); return 0; } #endif #ifdef CONFIG_MTD_AFS_PARTS nr_parts = parse_afs_partitions(mymtd, &parts); if (nr_parts > 0) { add_mtd_partitions(mymtd, parts, nr_parts); return 0; } #endif /* No recognised partitioning schemes found - use defaults */ nr_parts = epxa_default_partitions(mymtd, &parts); if (nr_parts > 0) { add_mtd_partitions(mymtd, parts, nr_parts); return 0; } /* If all else fails... */ add_mtd_device(mymtd); return 0; }
static int __init armflash_cfi_init(void *base, u_int size) { struct mtd_partition *parts; int ret; armflash_flash_init(); armflash_flash_wp(1); /* * look for CFI based flash parts fitted to this board */ armflash_map.size = size; armflash_map.buswidth = 4; armflash_map.map_priv_2 = (unsigned long) base; /* * Also, the CFI layer automatically works out what size * of chips we have, and does the necessary identification * for us automatically. */ mtd = do_map_probe("cfi_probe", &armflash_map); if (!mtd) return -ENXIO; mtd->module = THIS_MODULE; ret = parse_afs_partitions(mtd, &parts); if (ret > 0) { ret = add_mtd_partitions(mtd, parts, ret); /* we don't need the partition info any longer */ kfree(parts); if (ret) printk(KERN_ERR "mtd partition registration " "failed: %d\n", ret); } /* * If we got an error, free all resources. */ if (ret < 0) { del_mtd_partitions(mtd); map_destroy(mtd); } return ret; }