mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
Merge git://git.infradead.org/mtd-2.6
* git://git.infradead.org/mtd-2.6: (97 commits) mtd: kill CONFIG_MTD_PARTITIONS mtd: remove add_mtd_partitions, add_mtd_device and friends mtd: convert remaining users to mtd_device_register() mtd: samsung onenand: convert to mtd_device_register() mtd: omap2 onenand: convert to mtd_device_register() mtd: txx9ndfmc: convert to mtd_device_register() mtd: tmio_nand: convert to mtd_device_register() mtd: socrates_nand: convert to mtd_device_register() mtd: sharpsl: convert to mtd_device_register() mtd: s3c2410 nand: convert to mtd_device_register() mtd: ppchameleonevb: convert to mtd_device_register() mtd: orion_nand: convert to mtd_device_register() mtd: omap2: convert to mtd_device_register() mtd: nomadik_nand: convert to mtd_device_register() mtd: ndfc: convert to mtd_device_register() mtd: mxc_nand: convert to mtd_device_register() mtd: mpc5121_nfc: convert to mtd_device_register() mtd: jz4740_nand: convert to mtd_device_register() mtd: h1910: convert to mtd_device_register() mtd: fsmc_nand: convert to mtd_device_register() ... Fixed up trivial conflicts in - drivers/mtd/maps/integrator-flash.c: removed in ARM tree - drivers/mtd/maps/physmap.c: addition of afs partition probe type clashing with removal of CONFIG_MTD_PARTITIONS
This commit is contained in:
commit
29a6ccca38
@ -189,8 +189,7 @@ static void __iomem *baseaddr;
|
||||
<title>Partition defines</title>
|
||||
<para>
|
||||
If you want to divide your device into partitions, then
|
||||
enable the configuration switch CONFIG_MTD_PARTITIONS and define
|
||||
a partitioning scheme suitable to your board.
|
||||
define a partitioning scheme suitable to your board.
|
||||
</para>
|
||||
<programlisting>
|
||||
#define NUM_PARTITIONS 2
|
||||
|
@ -84,7 +84,6 @@ static struct sys_timer wbd111_timer = {
|
||||
.init = gemini_timer_init,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static struct mtd_partition wbd111_partitions[] = {
|
||||
{
|
||||
.name = "RedBoot",
|
||||
@ -116,11 +115,7 @@ static struct mtd_partition wbd111_partitions[] = {
|
||||
.mask_flags = MTD_WRITEABLE,
|
||||
}
|
||||
};
|
||||
#define wbd111_num_partitions ARRAY_SIZE(wbd111_partitions)
|
||||
#else
|
||||
#define wbd111_partitions NULL
|
||||
#define wbd111_num_partitions 0
|
||||
#endif /* CONFIG_MTD_PARTITIONS */
|
||||
#define wbd111_num_partitions ARRAY_SIZE(wbd111_partitions)
|
||||
|
||||
static void __init wbd111_init(void)
|
||||
{
|
||||
|
@ -84,7 +84,6 @@ static struct sys_timer wbd222_timer = {
|
||||
.init = gemini_timer_init,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static struct mtd_partition wbd222_partitions[] = {
|
||||
{
|
||||
.name = "RedBoot",
|
||||
@ -116,11 +115,7 @@ static struct mtd_partition wbd222_partitions[] = {
|
||||
.mask_flags = MTD_WRITEABLE,
|
||||
}
|
||||
};
|
||||
#define wbd222_num_partitions ARRAY_SIZE(wbd222_partitions)
|
||||
#else
|
||||
#define wbd222_partitions NULL
|
||||
#define wbd222_num_partitions 0
|
||||
#endif /* CONFIG_MTD_PARTITIONS */
|
||||
#define wbd222_num_partitions ARRAY_SIZE(wbd222_partitions)
|
||||
|
||||
static void __init wbd222_init(void)
|
||||
{
|
||||
|
@ -60,7 +60,6 @@ static struct platform_device ixdp425_flash = {
|
||||
#if defined(CONFIG_MTD_NAND_PLATFORM) || \
|
||||
defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
const char *part_probes[] = { "cmdlinepart", NULL };
|
||||
|
||||
static struct mtd_partition ixdp425_partitions[] = {
|
||||
@ -74,7 +73,6 @@ static struct mtd_partition ixdp425_partitions[] = {
|
||||
.size = MTDPART_SIZ_FULL
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
static void
|
||||
ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
|
||||
@ -103,11 +101,9 @@ static struct platform_nand_data ixdp425_flash_nand_data = {
|
||||
.nr_chips = 1,
|
||||
.chip_delay = 30,
|
||||
.options = NAND_NO_AUTOINCR,
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
.part_probe_types = part_probes,
|
||||
.partitions = ixdp425_partitions,
|
||||
.nr_partitions = ARRAY_SIZE(ixdp425_partitions),
|
||||
#endif
|
||||
},
|
||||
.ctrl = {
|
||||
.cmd_ctrl = ixdp425_flash_nand_cmd_ctrl
|
||||
|
@ -153,7 +153,6 @@ config MACH_XCEP
|
||||
bool "Iskratel Electronics XCEP"
|
||||
select PXA25x
|
||||
select MTD
|
||||
select MTD_PARTITIONS
|
||||
select MTD_PHYSMAP
|
||||
select MTD_CFI_INTELEXT
|
||||
select MTD_CFI
|
||||
|
@ -58,8 +58,6 @@
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/gpio-cfg.h>
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/map.h>
|
||||
@ -113,7 +111,6 @@ static struct platform_device amlm5900_device_nor = {
|
||||
.num_resources = 1,
|
||||
.resource = &amlm5900_nor_resource,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct map_desc amlm5900_iodesc[] __initdata = {
|
||||
};
|
||||
@ -158,9 +155,7 @@ static struct platform_device *amlm5900_devices[] __initdata = {
|
||||
&s3c_device_rtc,
|
||||
&s3c_device_usbgadget,
|
||||
&s3c_device_sdi,
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
&amlm5900_device_nor,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void __init amlm5900_map_io(void)
|
||||
|
@ -49,8 +49,6 @@
|
||||
#include <plat/devs.h>
|
||||
#include <plat/cpu.h>
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/map.h>
|
||||
@ -91,8 +89,6 @@ static struct platform_device tct_hammer_device_nor = {
|
||||
.resource = &tct_hammer_nor_resource,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
static struct map_desc tct_hammer_iodesc[] __initdata = {
|
||||
};
|
||||
|
||||
@ -133,9 +129,7 @@ static struct platform_device *tct_hammer_devices[] __initdata = {
|
||||
&s3c_device_rtc,
|
||||
&s3c_device_usbgadget,
|
||||
&s3c_device_sdi,
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
&tct_hammer_device_nor,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void __init tct_hammer_map_io(void)
|
||||
|
@ -382,7 +382,6 @@ static struct platform_device net2272_bfin_device = {
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MTD_NAND_PLATFORM) || defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
const char *part_probes[] = { "cmdlinepart", "RedBoot", NULL };
|
||||
|
||||
static struct mtd_partition bfin_plat_nand_partitions[] = {
|
||||
@ -396,7 +395,6 @@ static struct mtd_partition bfin_plat_nand_partitions[] = {
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
#define BFIN_NAND_PLAT_CLE 2
|
||||
#define BFIN_NAND_PLAT_ALE 1
|
||||
@ -423,11 +421,9 @@ static struct platform_nand_data bfin_plat_nand_data = {
|
||||
.chip = {
|
||||
.nr_chips = 1,
|
||||
.chip_delay = 30,
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
.part_probe_types = part_probes,
|
||||
.partitions = bfin_plat_nand_partitions,
|
||||
.nr_partitions = ARRAY_SIZE(bfin_plat_nand_partitions),
|
||||
#endif
|
||||
},
|
||||
.ctrl = {
|
||||
.cmd_ctrl = bfin_plat_nand_cmd_ctrl,
|
||||
|
@ -243,7 +243,6 @@ static struct platform_device bfin_uart0_device = {
|
||||
|
||||
#if defined(CONFIG_MTD_NAND_PLATFORM) || defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
const char *part_probes[] = { "cmdlinepart", NULL };
|
||||
|
||||
static struct mtd_partition bfin_plat_nand_partitions[] = {
|
||||
@ -257,7 +256,6 @@ static struct mtd_partition bfin_plat_nand_partitions[] = {
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
#define BFIN_NAND_PLAT_CLE 2
|
||||
#define BFIN_NAND_PLAT_ALE 3
|
||||
@ -286,11 +284,9 @@ static struct platform_nand_data bfin_plat_nand_data = {
|
||||
.chip = {
|
||||
.nr_chips = 1,
|
||||
.chip_delay = 30,
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
.part_probe_types = part_probes,
|
||||
.partitions = bfin_plat_nand_partitions,
|
||||
.nr_partitions = ARRAY_SIZE(bfin_plat_nand_partitions),
|
||||
#endif
|
||||
},
|
||||
.ctrl = {
|
||||
.cmd_ctrl = bfin_plat_nand_cmd_ctrl,
|
||||
|
@ -270,7 +270,6 @@ config ETRAX_AXISFLASHMAP
|
||||
select MTD_JEDECPROBE if ETRAX_ARCH_V32
|
||||
select MTD_CHAR
|
||||
select MTD_BLOCK
|
||||
select MTD_PARTITIONS
|
||||
select MTD_COMPLEX_MAPPINGS
|
||||
help
|
||||
This option enables MTD mapping of flash devices. Needed to use
|
||||
|
@ -372,7 +372,7 @@ static int __init init_axis_flash(void)
|
||||
#ifdef CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE
|
||||
if (mymtd) {
|
||||
main_partition.size = mymtd->size;
|
||||
err = add_mtd_partitions(mymtd, &main_partition, 1);
|
||||
err = mtd_device_register(mymtd, &main_partition, 1);
|
||||
if (err)
|
||||
panic("axisflashmap: Could not initialize "
|
||||
"partition for whole main mtd device!\n");
|
||||
@ -382,10 +382,12 @@ static int __init init_axis_flash(void)
|
||||
if (mymtd) {
|
||||
if (use_default_ptable) {
|
||||
printk(KERN_INFO " Using default partition table.\n");
|
||||
err = add_mtd_partitions(mymtd, axis_default_partitions,
|
||||
NUM_DEFAULT_PARTITIONS);
|
||||
err = mtd_device_register(mymtd,
|
||||
axis_default_partitions,
|
||||
NUM_DEFAULT_PARTITIONS);
|
||||
} else {
|
||||
err = add_mtd_partitions(mymtd, axis_partitions, pidx);
|
||||
err = mtd_device_register(mymtd, axis_partitions,
|
||||
pidx);
|
||||
}
|
||||
|
||||
if (err)
|
||||
|
@ -405,7 +405,6 @@ config ETRAX_AXISFLASHMAP
|
||||
select MTD_JEDECPROBE
|
||||
select MTD_CHAR
|
||||
select MTD_BLOCK
|
||||
select MTD_PARTITIONS
|
||||
select MTD_COMPLEX_MAPPINGS
|
||||
help
|
||||
This option enables MTD mapping of flash devices. Needed to use
|
||||
|
@ -561,7 +561,7 @@ static int __init init_axis_flash(void)
|
||||
#ifdef CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE
|
||||
if (main_mtd) {
|
||||
main_partition.size = main_mtd->size;
|
||||
err = add_mtd_partitions(main_mtd, &main_partition, 1);
|
||||
err = mtd_device_register(main_mtd, &main_partition, 1);
|
||||
if (err)
|
||||
panic("axisflashmap: Could not initialize "
|
||||
"partition for whole main mtd device!\n");
|
||||
@ -597,7 +597,8 @@ static int __init init_axis_flash(void)
|
||||
mtd_ram->erasesize = (main_mtd ? main_mtd->erasesize :
|
||||
CONFIG_ETRAX_PTABLE_SECTOR);
|
||||
} else {
|
||||
err = add_mtd_partitions(main_mtd, &partition[part], 1);
|
||||
err = mtd_device_register(main_mtd, &partition[part],
|
||||
1);
|
||||
if (err)
|
||||
panic("axisflashmap: Could not add mtd "
|
||||
"partition %d\n", part);
|
||||
@ -633,7 +634,7 @@ static int __init init_axis_flash(void)
|
||||
#ifndef CONFIG_ETRAX_VCS_SIM
|
||||
if (aux_mtd) {
|
||||
aux_partition.size = aux_mtd->size;
|
||||
err = add_mtd_partitions(aux_mtd, &aux_partition, 1);
|
||||
err = mtd_device_register(aux_mtd, &aux_partition, 1);
|
||||
if (err)
|
||||
panic("axisflashmap: Could not initialize "
|
||||
"aux mtd device!\n");
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
static struct map_info flash_map;
|
||||
static struct mtd_info *mymtd;
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static int nr_parts;
|
||||
static struct mtd_partition *parts;
|
||||
static const char *part_probe_types[] = {
|
||||
@ -26,7 +25,6 @@ static const char *part_probe_types[] = {
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Module/ driver initialization.
|
||||
@ -63,17 +61,10 @@ static int __init flash_init(void)
|
||||
if (mymtd) {
|
||||
mymtd->owner = THIS_MODULE;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
nr_parts = parse_mtd_partitions(mymtd,
|
||||
part_probe_types,
|
||||
&parts, 0);
|
||||
if (nr_parts > 0)
|
||||
add_mtd_partitions(mymtd, parts, nr_parts);
|
||||
else
|
||||
add_mtd_device(mymtd);
|
||||
#else
|
||||
add_mtd_device(mymtd);
|
||||
#endif
|
||||
mtd_device_register(mymtd, parts, nr_parts);
|
||||
} else {
|
||||
pr_err("Failed to register MTD device for flash\n");
|
||||
}
|
||||
|
@ -639,7 +639,6 @@ void __init txx9_physmap_flash_init(int no, unsigned long addr,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
struct platform_device *pdev;
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static struct mtd_partition parts[2];
|
||||
struct physmap_flash_data pdata_part;
|
||||
|
||||
@ -658,7 +657,7 @@ void __init txx9_physmap_flash_init(int no, unsigned long addr,
|
||||
pdata_part.parts = parts;
|
||||
pdata = &pdata_part;
|
||||
}
|
||||
#endif
|
||||
|
||||
pdev = platform_device_alloc("physmap-flash", no);
|
||||
if (!pdev ||
|
||||
platform_device_add_resources(pdev, &res, 1) ||
|
||||
|
@ -33,20 +33,6 @@ config MTD_TESTS
|
||||
should normally be compiled as kernel modules. The modules perform
|
||||
various checks and verifications when loaded.
|
||||
|
||||
config MTD_PARTITIONS
|
||||
bool "MTD partitioning support"
|
||||
help
|
||||
If you have a device which needs to divide its flash chip(s) up
|
||||
into multiple 'partitions', each of which appears to the user as
|
||||
a separate MTD device, you require this option to be enabled. If
|
||||
unsure, say 'Y'.
|
||||
|
||||
Note, however, that you don't need this option for the DiskOnChip
|
||||
devices. Partitioning on NFTL 'devices' is a different - that's the
|
||||
'normal' form of partitioning used on a block device.
|
||||
|
||||
if MTD_PARTITIONS
|
||||
|
||||
config MTD_REDBOOT_PARTS
|
||||
tristate "RedBoot partition table parsing"
|
||||
---help---
|
||||
@ -99,7 +85,7 @@ endif # MTD_REDBOOT_PARTS
|
||||
|
||||
config MTD_CMDLINE_PARTS
|
||||
bool "Command line partition table parsing"
|
||||
depends on MTD_PARTITIONS = "y" && MTD = "y"
|
||||
depends on MTD = "y"
|
||||
---help---
|
||||
Allow generic configuration of the MTD partition tables via the kernel
|
||||
command line. Multiple flash resources are supported for hardware where
|
||||
@ -163,8 +149,6 @@ config MTD_AR7_PARTS
|
||||
---help---
|
||||
TI AR7 partitioning support
|
||||
|
||||
endif # MTD_PARTITIONS
|
||||
|
||||
comment "User Modules And Translation Layers"
|
||||
|
||||
config MTD_CHAR
|
||||
|
@ -4,8 +4,7 @@
|
||||
|
||||
# Core functionality.
|
||||
obj-$(CONFIG_MTD) += mtd.o
|
||||
mtd-y := mtdcore.o mtdsuper.o mtdconcat.o
|
||||
mtd-$(CONFIG_MTD_PARTITIONS) += mtdpart.o
|
||||
mtd-y := mtdcore.o mtdsuper.o mtdconcat.o mtdpart.o
|
||||
mtd-$(CONFIG_MTD_OF_PARTS) += ofpart.o
|
||||
|
||||
obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o
|
||||
|
@ -812,12 +812,9 @@ static int chip_ready (struct map_info *map, struct flchip *chip, unsigned long
|
||||
break;
|
||||
|
||||
if (time_after(jiffies, timeo)) {
|
||||
/* Urgh. Resume and pretend we weren't here. */
|
||||
map_write(map, CMD(0xd0), adr);
|
||||
/* Make sure we're in 'read status' mode if it had finished */
|
||||
map_write(map, CMD(0x70), adr);
|
||||
chip->state = FL_ERASING;
|
||||
chip->oldstate = FL_READY;
|
||||
/* Urgh. Resume and pretend we weren't here.
|
||||
* Make sure we're in 'read status' mode if it had finished */
|
||||
put_chip(map, chip, adr);
|
||||
printk(KERN_ERR "%s: Chip not ready after erase "
|
||||
"suspended: status = 0x%lx\n", map->name, status.x[0]);
|
||||
return -EIO;
|
||||
@ -997,7 +994,6 @@ static void put_chip(struct map_info *map, struct flchip *chip, unsigned long ad
|
||||
|
||||
switch(chip->oldstate) {
|
||||
case FL_ERASING:
|
||||
chip->state = chip->oldstate;
|
||||
/* What if one interleaved chip has finished and the
|
||||
other hasn't? The old code would leave the finished
|
||||
one in READY mode. That's bad, and caused -EROFS
|
||||
|
@ -462,13 +462,14 @@ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
|
||||
cfi_fixup_major_minor(cfi, extp);
|
||||
|
||||
/*
|
||||
* Valid primary extension versions are: 1.0, 1.1, 1.2, 1.3, 1.4
|
||||
* Valid primary extension versions are: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5
|
||||
* see: http://cs.ozerki.net/zap/pub/axim-x5/docs/cfi_r20.pdf, page 19
|
||||
* http://www.spansion.com/Support/AppNotes/cfi_100_20011201.pdf
|
||||
* http://www.spansion.com/Support/Datasheets/s29ws-p_00_a12_e.pdf
|
||||
* http://www.spansion.com/Support/Datasheets/S29GL_128S_01GS_00_02_e.pdf
|
||||
*/
|
||||
if (extp->MajorVersion != '1' ||
|
||||
(extp->MajorVersion == '1' && (extp->MinorVersion < '0' || extp->MinorVersion > '4'))) {
|
||||
(extp->MajorVersion == '1' && (extp->MinorVersion < '0' || extp->MinorVersion > '5'))) {
|
||||
printk(KERN_ERR " Unknown Amd/Fujitsu Extended Query "
|
||||
"version %c.%c (%#02x/%#02x).\n",
|
||||
extp->MajorVersion, extp->MinorVersion,
|
||||
@ -710,9 +711,7 @@ static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr
|
||||
* there was an error (so leave the erase
|
||||
* routine to recover from it) or we trying to
|
||||
* use the erase-in-progress sector. */
|
||||
map_write(map, cfi->sector_erase_cmd, chip->in_progress_block_addr);
|
||||
chip->state = FL_ERASING;
|
||||
chip->oldstate = FL_READY;
|
||||
put_chip(map, chip, adr);
|
||||
printk(KERN_ERR "MTD %s(): chip not ready after erase suspend\n", __func__);
|
||||
return -EIO;
|
||||
}
|
||||
@ -762,7 +761,6 @@ static void put_chip(struct map_info *map, struct flchip *chip, unsigned long ad
|
||||
|
||||
switch(chip->oldstate) {
|
||||
case FL_ERASING:
|
||||
chip->state = chip->oldstate;
|
||||
map_write(map, cfi->sector_erase_cmd, chip->in_progress_block_addr);
|
||||
chip->oldstate = FL_READY;
|
||||
chip->state = FL_ERASING;
|
||||
|
@ -296,6 +296,7 @@ static inline int do_read_onechip(struct map_info *map, struct flchip *chip, lof
|
||||
/* make sure we're in 'read status' mode */
|
||||
map_write(map, CMD(0x70), cmd_addr);
|
||||
chip->state = FL_ERASING;
|
||||
wake_up(&chip->wq);
|
||||
mutex_unlock(&chip->mutex);
|
||||
printk(KERN_ERR "Chip not ready after erase "
|
||||
"suspended: status = 0x%lx\n", status.x[0]);
|
||||
|
@ -294,7 +294,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size)
|
||||
dev->mtd.priv = dev;
|
||||
dev->mtd.owner = THIS_MODULE;
|
||||
|
||||
if (add_mtd_device(&dev->mtd)) {
|
||||
if (mtd_device_register(&dev->mtd, NULL, 0)) {
|
||||
/* Device didn't get added, so free the entry */
|
||||
goto devinit_err;
|
||||
}
|
||||
@ -465,7 +465,7 @@ static void __devexit block2mtd_exit(void)
|
||||
list_for_each_safe(pos, next, &blkmtd_device_list) {
|
||||
struct block2mtd_dev *dev = list_entry(pos, typeof(*dev), list);
|
||||
block2mtd_sync(&dev->mtd);
|
||||
del_mtd_device(&dev->mtd);
|
||||
mtd_device_unregister(&dev->mtd);
|
||||
INFO("mtd%d: [%s] removed", dev->mtd.index,
|
||||
dev->mtd.name + strlen("block2mtd: "));
|
||||
list_del(&dev->list);
|
||||
|
@ -597,7 +597,7 @@ void DoC2k_init(struct mtd_info *mtd)
|
||||
doc2klist = mtd;
|
||||
mtd->size = this->totlen;
|
||||
mtd->erasesize = this->erasesize;
|
||||
add_mtd_device(mtd);
|
||||
mtd_device_register(mtd, NULL, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -1185,7 +1185,7 @@ static void __exit cleanup_doc2000(void)
|
||||
this = mtd->priv;
|
||||
doc2klist = this->nextdoc;
|
||||
|
||||
del_mtd_device(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
|
||||
iounmap(this->virtadr);
|
||||
kfree(this->chips);
|
||||
|
@ -376,7 +376,7 @@ void DoCMil_init(struct mtd_info *mtd)
|
||||
this->nextdoc = docmillist;
|
||||
docmillist = mtd;
|
||||
mtd->size = this->totlen;
|
||||
add_mtd_device(mtd);
|
||||
mtd_device_register(mtd, NULL, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -826,7 +826,7 @@ static void __exit cleanup_doc2001(void)
|
||||
this = mtd->priv;
|
||||
docmillist = this->nextdoc;
|
||||
|
||||
del_mtd_device(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
|
||||
iounmap(this->virtadr);
|
||||
kfree(this->chips);
|
||||
|
@ -499,7 +499,7 @@ void DoCMilPlus_init(struct mtd_info *mtd)
|
||||
docmilpluslist = mtd;
|
||||
mtd->size = this->totlen;
|
||||
mtd->erasesize = this->erasesize;
|
||||
add_mtd_device(mtd);
|
||||
mtd_device_register(mtd, NULL, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -1091,7 +1091,7 @@ static void __exit cleanup_doc2001plus(void)
|
||||
this = mtd->priv;
|
||||
docmilpluslist = this->nextdoc;
|
||||
|
||||
del_mtd_device(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
|
||||
iounmap(this->virtadr);
|
||||
kfree(this->chips);
|
||||
|
@ -684,9 +684,10 @@ static int __init lart_flash_init (void)
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_PARTITIONS
|
||||
result = add_mtd_device (&mtd);
|
||||
result = mtd_device_register(&mtd, NULL, 0);
|
||||
#else
|
||||
result = add_mtd_partitions (&mtd,lart_partitions, ARRAY_SIZE(lart_partitions));
|
||||
result = mtd_device_register(&mtd, lart_partitions,
|
||||
ARRAY_SIZE(lart_partitions));
|
||||
#endif
|
||||
|
||||
return (result);
|
||||
@ -695,9 +696,9 @@ static int __init lart_flash_init (void)
|
||||
static void __exit lart_flash_exit (void)
|
||||
{
|
||||
#ifndef HAVE_PARTITIONS
|
||||
del_mtd_device (&mtd);
|
||||
mtd_device_unregister(&mtd);
|
||||
#else
|
||||
del_mtd_partitions (&mtd);
|
||||
mtd_device_unregister(&mtd);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
||||
#include <linux/mtd/cfi.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
@ -55,6 +56,9 @@
|
||||
#define OPCODE_EN4B 0xb7 /* Enter 4-byte mode */
|
||||
#define OPCODE_EX4B 0xe9 /* Exit 4-byte mode */
|
||||
|
||||
/* Used for Spansion flashes only. */
|
||||
#define OPCODE_BRWR 0x17 /* Bank register write */
|
||||
|
||||
/* Status Register bits. */
|
||||
#define SR_WIP 1 /* Write in progress */
|
||||
#define SR_WEL 2 /* Write enable latch */
|
||||
@ -76,6 +80,8 @@
|
||||
#define FAST_READ_DUMMY_BYTE 0
|
||||
#endif
|
||||
|
||||
#define JEDEC_MFR(_jedec_id) ((_jedec_id) >> 16)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct m25p {
|
||||
@ -158,11 +164,18 @@ static inline int write_disable(struct m25p *flash)
|
||||
/*
|
||||
* Enable/disable 4-byte addressing mode.
|
||||
*/
|
||||
static inline int set_4byte(struct m25p *flash, int enable)
|
||||
static inline int set_4byte(struct m25p *flash, u32 jedec_id, int enable)
|
||||
{
|
||||
u8 code = enable ? OPCODE_EN4B : OPCODE_EX4B;
|
||||
|
||||
return spi_write_then_read(flash->spi, &code, 1, NULL, 0);
|
||||
switch (JEDEC_MFR(jedec_id)) {
|
||||
case CFI_MFR_MACRONIX:
|
||||
flash->command[0] = enable ? OPCODE_EN4B : OPCODE_EX4B;
|
||||
return spi_write(flash->spi, flash->command, 1);
|
||||
default:
|
||||
/* Spansion style */
|
||||
flash->command[0] = OPCODE_BRWR;
|
||||
flash->command[1] = enable << 7;
|
||||
return spi_write(flash->spi, flash->command, 2);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -668,6 +681,7 @@ static const struct spi_device_id m25p_ids[] = {
|
||||
/* Macronix */
|
||||
{ "mx25l4005a", INFO(0xc22013, 0, 64 * 1024, 8, SECT_4K) },
|
||||
{ "mx25l8005", INFO(0xc22014, 0, 64 * 1024, 16, 0) },
|
||||
{ "mx25l1606e", INFO(0xc22015, 0, 64 * 1024, 32, SECT_4K) },
|
||||
{ "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, 0) },
|
||||
{ "mx25l6405d", INFO(0xc22017, 0, 64 * 1024, 128, 0) },
|
||||
{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
|
||||
@ -684,6 +698,10 @@ static const struct spi_device_id m25p_ids[] = {
|
||||
{ "s25sl032a", INFO(0x010215, 0, 64 * 1024, 64, 0) },
|
||||
{ "s25sl032p", INFO(0x010215, 0x4d00, 64 * 1024, 64, SECT_4K) },
|
||||
{ "s25sl064a", INFO(0x010216, 0, 64 * 1024, 128, 0) },
|
||||
{ "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) },
|
||||
{ "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, 0) },
|
||||
{ "s25fl512s", INFO(0x010220, 0x4d00, 256 * 1024, 256, 0) },
|
||||
{ "s70fl01gs", INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) },
|
||||
{ "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024, 64, 0) },
|
||||
{ "s25sl12801", INFO(0x012018, 0x0301, 64 * 1024, 256, 0) },
|
||||
{ "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024, 64, 0) },
|
||||
@ -729,7 +747,10 @@ static const struct spi_device_id m25p_ids[] = {
|
||||
{ "m25pe80", INFO(0x208014, 0, 64 * 1024, 16, 0) },
|
||||
{ "m25pe16", INFO(0x208015, 0, 64 * 1024, 32, SECT_4K) },
|
||||
|
||||
{ "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) },
|
||||
{ "m25px32", INFO(0x207116, 0, 64 * 1024, 64, SECT_4K) },
|
||||
{ "m25px32-s0", INFO(0x207316, 0, 64 * 1024, 64, SECT_4K) },
|
||||
{ "m25px32-s1", INFO(0x206316, 0, 64 * 1024, 64, SECT_4K) },
|
||||
{ "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) },
|
||||
|
||||
/* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */
|
||||
{ "w25x10", INFO(0xef3011, 0, 64 * 1024, 2, SECT_4K) },
|
||||
@ -804,6 +825,8 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
||||
struct m25p *flash;
|
||||
struct flash_info *info;
|
||||
unsigned i;
|
||||
struct mtd_partition *parts = NULL;
|
||||
int nr_parts = 0;
|
||||
|
||||
/* Platform data helps sort out which chip type we have, as
|
||||
* well as how this board partitions it. If we don't have
|
||||
@ -868,9 +891,9 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
||||
* up with the software protection bits set
|
||||
*/
|
||||
|
||||
if (info->jedec_id >> 16 == 0x1f ||
|
||||
info->jedec_id >> 16 == 0x89 ||
|
||||
info->jedec_id >> 16 == 0xbf) {
|
||||
if (JEDEC_MFR(info->jedec_id) == CFI_MFR_ATMEL ||
|
||||
JEDEC_MFR(info->jedec_id) == CFI_MFR_INTEL ||
|
||||
JEDEC_MFR(info->jedec_id) == CFI_MFR_SST) {
|
||||
write_enable(flash);
|
||||
write_sr(flash, 0);
|
||||
}
|
||||
@ -888,7 +911,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
||||
flash->mtd.read = m25p80_read;
|
||||
|
||||
/* sst flash chips use AAI word program */
|
||||
if (info->jedec_id >> 16 == 0xbf)
|
||||
if (JEDEC_MFR(info->jedec_id) == CFI_MFR_SST)
|
||||
flash->mtd.write = sst_write;
|
||||
else
|
||||
flash->mtd.write = m25p80_write;
|
||||
@ -914,7 +937,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
||||
/* enable 4-byte addressing if the device exceeds 16MiB */
|
||||
if (flash->mtd.size > 0x1000000) {
|
||||
flash->addr_width = 4;
|
||||
set_4byte(flash, 1);
|
||||
set_4byte(flash, info->jedec_id, 1);
|
||||
} else
|
||||
flash->addr_width = 3;
|
||||
}
|
||||
@ -945,48 +968,41 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
||||
/* partitions should match sector boundaries; and it may be good to
|
||||
* use readonly partitions for writeprotected sectors (BP2..BP0).
|
||||
*/
|
||||
if (mtd_has_partitions()) {
|
||||
struct mtd_partition *parts = NULL;
|
||||
int nr_parts = 0;
|
||||
if (mtd_has_cmdlinepart()) {
|
||||
static const char *part_probes[]
|
||||
= { "cmdlinepart", NULL, };
|
||||
|
||||
if (mtd_has_cmdlinepart()) {
|
||||
static const char *part_probes[]
|
||||
= { "cmdlinepart", NULL, };
|
||||
nr_parts = parse_mtd_partitions(&flash->mtd,
|
||||
part_probes, &parts, 0);
|
||||
}
|
||||
|
||||
nr_parts = parse_mtd_partitions(&flash->mtd,
|
||||
part_probes, &parts, 0);
|
||||
}
|
||||
|
||||
if (nr_parts <= 0 && data && data->parts) {
|
||||
parts = data->parts;
|
||||
nr_parts = data->nr_parts;
|
||||
}
|
||||
if (nr_parts <= 0 && data && data->parts) {
|
||||
parts = data->parts;
|
||||
nr_parts = data->nr_parts;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_OF_PARTS
|
||||
if (nr_parts <= 0 && spi->dev.of_node) {
|
||||
nr_parts = of_mtd_parse_partitions(&spi->dev,
|
||||
spi->dev.of_node, &parts);
|
||||
}
|
||||
if (nr_parts <= 0 && spi->dev.of_node) {
|
||||
nr_parts = of_mtd_parse_partitions(&spi->dev,
|
||||
spi->dev.of_node, &parts);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (nr_parts > 0) {
|
||||
for (i = 0; i < nr_parts; i++) {
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
|
||||
"{.name = %s, .offset = 0x%llx, "
|
||||
".size = 0x%llx (%lldKiB) }\n",
|
||||
i, parts[i].name,
|
||||
(long long)parts[i].offset,
|
||||
(long long)parts[i].size,
|
||||
(long long)(parts[i].size >> 10));
|
||||
}
|
||||
flash->partitioned = 1;
|
||||
return add_mtd_partitions(&flash->mtd, parts, nr_parts);
|
||||
if (nr_parts > 0) {
|
||||
for (i = 0; i < nr_parts; i++) {
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
|
||||
"{.name = %s, .offset = 0x%llx, "
|
||||
".size = 0x%llx (%lldKiB) }\n",
|
||||
i, parts[i].name,
|
||||
(long long)parts[i].offset,
|
||||
(long long)parts[i].size,
|
||||
(long long)(parts[i].size >> 10));
|
||||
}
|
||||
} else if (data && data->nr_parts)
|
||||
dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
|
||||
data->nr_parts, data->name);
|
||||
flash->partitioned = 1;
|
||||
}
|
||||
|
||||
return add_mtd_device(&flash->mtd) == 1 ? -ENODEV : 0;
|
||||
return mtd_device_register(&flash->mtd, parts, nr_parts) == 1 ?
|
||||
-ENODEV : 0;
|
||||
}
|
||||
|
||||
|
||||
@ -996,10 +1012,7 @@ static int __devexit m25p_remove(struct spi_device *spi)
|
||||
int status;
|
||||
|
||||
/* Clean up MTD stuff. */
|
||||
if (mtd_has_partitions() && flash->partitioned)
|
||||
status = del_mtd_partitions(&flash->mtd);
|
||||
else
|
||||
status = del_mtd_device(&flash->mtd);
|
||||
status = mtd_device_unregister(&flash->mtd);
|
||||
if (status == 0) {
|
||||
kfree(flash->command);
|
||||
kfree(flash);
|
||||
|
@ -220,7 +220,7 @@ static int __init ms02nv_init_one(ulong addr)
|
||||
mtd->writesize = 1;
|
||||
|
||||
ret = -EIO;
|
||||
if (add_mtd_device(mtd)) {
|
||||
if (mtd_device_register(mtd, NULL, 0)) {
|
||||
printk(KERN_ERR
|
||||
"ms02-nv: Unable to register MTD device, aborting!\n");
|
||||
goto err_out_csr_res;
|
||||
@ -262,7 +262,7 @@ static void __exit ms02nv_remove_one(void)
|
||||
|
||||
root_ms02nv_mtd = mp->next;
|
||||
|
||||
del_mtd_device(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
|
||||
release_resource(mp->resource.csr);
|
||||
kfree(mp->resource.csr);
|
||||
|
@ -637,6 +637,8 @@ add_dataflash_otp(struct spi_device *spi, char *name,
|
||||
struct flash_platform_data *pdata = spi->dev.platform_data;
|
||||
char *otp_tag = "";
|
||||
int err = 0;
|
||||
struct mtd_partition *parts;
|
||||
int nr_parts = 0;
|
||||
|
||||
priv = kzalloc(sizeof *priv, GFP_KERNEL);
|
||||
if (!priv)
|
||||
@ -675,33 +677,25 @@ add_dataflash_otp(struct spi_device *spi, char *name,
|
||||
pagesize, otp_tag);
|
||||
dev_set_drvdata(&spi->dev, priv);
|
||||
|
||||
if (mtd_has_partitions()) {
|
||||
struct mtd_partition *parts;
|
||||
int nr_parts = 0;
|
||||
if (mtd_has_cmdlinepart()) {
|
||||
static const char *part_probes[] = { "cmdlinepart", NULL, };
|
||||
|
||||
if (mtd_has_cmdlinepart()) {
|
||||
static const char *part_probes[]
|
||||
= { "cmdlinepart", NULL, };
|
||||
nr_parts = parse_mtd_partitions(device, part_probes, &parts,
|
||||
0);
|
||||
}
|
||||
|
||||
nr_parts = parse_mtd_partitions(device,
|
||||
part_probes, &parts, 0);
|
||||
}
|
||||
if (nr_parts <= 0 && pdata && pdata->parts) {
|
||||
parts = pdata->parts;
|
||||
nr_parts = pdata->nr_parts;
|
||||
}
|
||||
|
||||
if (nr_parts <= 0 && pdata && pdata->parts) {
|
||||
parts = pdata->parts;
|
||||
nr_parts = pdata->nr_parts;
|
||||
}
|
||||
if (nr_parts > 0) {
|
||||
priv->partitioned = 1;
|
||||
err = mtd_device_register(device, parts, nr_parts);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (nr_parts > 0) {
|
||||
priv->partitioned = 1;
|
||||
err = add_mtd_partitions(device, parts, nr_parts);
|
||||
goto out;
|
||||
}
|
||||
} else if (pdata && pdata->nr_parts)
|
||||
dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
|
||||
pdata->nr_parts, device->name);
|
||||
|
||||
if (add_mtd_device(device) == 1)
|
||||
if (mtd_device_register(device, NULL, 0) == 1)
|
||||
err = -ENODEV;
|
||||
|
||||
out:
|
||||
@ -939,10 +933,7 @@ static int __devexit dataflash_remove(struct spi_device *spi)
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", dev_name(&spi->dev));
|
||||
|
||||
if (mtd_has_partitions() && flash->partitioned)
|
||||
status = del_mtd_partitions(&flash->mtd);
|
||||
else
|
||||
status = del_mtd_device(&flash->mtd);
|
||||
status = mtd_device_unregister(&flash->mtd);
|
||||
if (status == 0) {
|
||||
dev_set_drvdata(&spi->dev, NULL);
|
||||
kfree(flash);
|
||||
|
@ -104,7 +104,7 @@ static int ram_write(struct mtd_info *mtd, loff_t to, size_t len,
|
||||
static void __exit cleanup_mtdram(void)
|
||||
{
|
||||
if (mtd_info) {
|
||||
del_mtd_device(mtd_info);
|
||||
mtd_device_unregister(mtd_info);
|
||||
vfree(mtd_info->priv);
|
||||
kfree(mtd_info);
|
||||
}
|
||||
@ -133,9 +133,8 @@ int mtdram_init_device(struct mtd_info *mtd, void *mapped_address,
|
||||
mtd->read = ram_read;
|
||||
mtd->write = ram_write;
|
||||
|
||||
if (add_mtd_device(mtd)) {
|
||||
if (mtd_device_register(mtd, NULL, 0))
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ static void unregister_devices(void)
|
||||
struct phram_mtd_list *this, *safe;
|
||||
|
||||
list_for_each_entry_safe(this, safe, &phram_list, list) {
|
||||
del_mtd_device(&this->mtd);
|
||||
mtd_device_unregister(&this->mtd);
|
||||
iounmap(this->mtd.priv);
|
||||
kfree(this->mtd.name);
|
||||
kfree(this);
|
||||
@ -153,7 +153,7 @@ static int register_device(char *name, unsigned long start, unsigned long len)
|
||||
new->mtd.writesize = 1;
|
||||
|
||||
ret = -EAGAIN;
|
||||
if (add_mtd_device(&new->mtd)) {
|
||||
if (mtd_device_register(&new->mtd, NULL, 0)) {
|
||||
pr_err("Failed to register new device\n");
|
||||
goto out2;
|
||||
}
|
||||
|
@ -798,7 +798,7 @@ static int __init init_pmc551(void)
|
||||
mtd->writesize = 1;
|
||||
mtd->owner = THIS_MODULE;
|
||||
|
||||
if (add_mtd_device(mtd)) {
|
||||
if (mtd_device_register(mtd, NULL, 0)) {
|
||||
printk(KERN_NOTICE "pmc551: Failed to register new device\n");
|
||||
pci_iounmap(PCI_Device, priv->start);
|
||||
kfree(mtd->priv);
|
||||
@ -806,7 +806,7 @@ static int __init init_pmc551(void)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Keep a reference as the add_mtd_device worked */
|
||||
/* Keep a reference as the mtd_device_register worked */
|
||||
pci_dev_get(PCI_Device);
|
||||
|
||||
printk(KERN_NOTICE "Registered pmc551 memory device.\n");
|
||||
@ -856,7 +856,7 @@ static void __exit cleanup_pmc551(void)
|
||||
pci_dev_put(priv->dev);
|
||||
|
||||
kfree(mtd->priv);
|
||||
del_mtd_device(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
kfree(mtd);
|
||||
found++;
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ static int register_device(char *name, unsigned long start, unsigned long length
|
||||
(*curmtd)->mtdinfo->erasesize = SLRAM_BLK_SZ;
|
||||
(*curmtd)->mtdinfo->writesize = 1;
|
||||
|
||||
if (add_mtd_device((*curmtd)->mtdinfo)) {
|
||||
if (mtd_device_register((*curmtd)->mtdinfo, NULL, 0)) {
|
||||
E("slram: Failed to register new device\n");
|
||||
iounmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start);
|
||||
kfree((*curmtd)->mtdinfo->priv);
|
||||
@ -231,7 +231,7 @@ static void unregister_devices(void)
|
||||
|
||||
while (slram_mtdlist) {
|
||||
nextitem = slram_mtdlist->next;
|
||||
del_mtd_device(slram_mtdlist->mtdinfo);
|
||||
mtd_device_unregister(slram_mtdlist->mtdinfo);
|
||||
iounmap(((slram_priv_t *)slram_mtdlist->mtdinfo->priv)->start);
|
||||
kfree(slram_mtdlist->mtdinfo->priv);
|
||||
kfree(slram_mtdlist->mtdinfo);
|
||||
|
@ -66,7 +66,7 @@ struct flash_info {
|
||||
|
||||
#define to_sst25l_flash(x) container_of(x, struct sst25l_flash, mtd)
|
||||
|
||||
static struct flash_info __initdata sst25l_flash_info[] = {
|
||||
static struct flash_info __devinitdata sst25l_flash_info[] = {
|
||||
{"sst25lf020a", 0xbf43, 256, 1024, 4096},
|
||||
{"sst25lf040a", 0xbf44, 256, 2048, 4096},
|
||||
};
|
||||
@ -381,6 +381,8 @@ static int __devinit sst25l_probe(struct spi_device *spi)
|
||||
struct sst25l_flash *flash;
|
||||
struct flash_platform_data *data;
|
||||
int ret, i;
|
||||
struct mtd_partition *parts = NULL;
|
||||
int nr_parts = 0;
|
||||
|
||||
flash_info = sst25l_match_device(spi);
|
||||
if (!flash_info)
|
||||
@ -420,46 +422,37 @@ static int __devinit sst25l_probe(struct spi_device *spi)
|
||||
flash->mtd.erasesize, flash->mtd.erasesize / 1024,
|
||||
flash->mtd.numeraseregions);
|
||||
|
||||
if (mtd_has_partitions()) {
|
||||
struct mtd_partition *parts = NULL;
|
||||
int nr_parts = 0;
|
||||
|
||||
if (mtd_has_cmdlinepart()) {
|
||||
static const char *part_probes[] =
|
||||
{"cmdlinepart", NULL};
|
||||
if (mtd_has_cmdlinepart()) {
|
||||
static const char *part_probes[] = {"cmdlinepart", NULL};
|
||||
|
||||
nr_parts = parse_mtd_partitions(&flash->mtd,
|
||||
part_probes,
|
||||
&parts, 0);
|
||||
}
|
||||
|
||||
if (nr_parts <= 0 && data && data->parts) {
|
||||
parts = data->parts;
|
||||
nr_parts = data->nr_parts;
|
||||
}
|
||||
|
||||
if (nr_parts > 0) {
|
||||
for (i = 0; i < nr_parts; i++) {
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
|
||||
"{.name = %s, .offset = 0x%llx, "
|
||||
".size = 0x%llx (%lldKiB) }\n",
|
||||
i, parts[i].name,
|
||||
(long long)parts[i].offset,
|
||||
(long long)parts[i].size,
|
||||
(long long)(parts[i].size >> 10));
|
||||
}
|
||||
|
||||
flash->partitioned = 1;
|
||||
return add_mtd_partitions(&flash->mtd,
|
||||
parts, nr_parts);
|
||||
}
|
||||
|
||||
} else if (data && data->nr_parts) {
|
||||
dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
|
||||
data->nr_parts, data->name);
|
||||
nr_parts = parse_mtd_partitions(&flash->mtd,
|
||||
part_probes,
|
||||
&parts, 0);
|
||||
}
|
||||
|
||||
ret = add_mtd_device(&flash->mtd);
|
||||
if (nr_parts <= 0 && data && data->parts) {
|
||||
parts = data->parts;
|
||||
nr_parts = data->nr_parts;
|
||||
}
|
||||
|
||||
if (nr_parts > 0) {
|
||||
for (i = 0; i < nr_parts; i++) {
|
||||
DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = "
|
||||
"{.name = %s, .offset = 0x%llx, "
|
||||
".size = 0x%llx (%lldKiB) }\n",
|
||||
i, parts[i].name,
|
||||
(long long)parts[i].offset,
|
||||
(long long)parts[i].size,
|
||||
(long long)(parts[i].size >> 10));
|
||||
}
|
||||
|
||||
flash->partitioned = 1;
|
||||
return mtd_device_register(&flash->mtd, parts,
|
||||
nr_parts);
|
||||
}
|
||||
|
||||
ret = mtd_device_register(&flash->mtd, NULL, 0);
|
||||
if (ret == 1) {
|
||||
kfree(flash);
|
||||
dev_set_drvdata(&spi->dev, NULL);
|
||||
@ -469,15 +462,12 @@ static int __devinit sst25l_probe(struct spi_device *spi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __exit sst25l_remove(struct spi_device *spi)
|
||||
static int __devexit sst25l_remove(struct spi_device *spi)
|
||||
{
|
||||
struct sst25l_flash *flash = dev_get_drvdata(&spi->dev);
|
||||
int ret;
|
||||
|
||||
if (mtd_has_partitions() && flash->partitioned)
|
||||
ret = del_mtd_partitions(&flash->mtd);
|
||||
else
|
||||
ret = del_mtd_device(&flash->mtd);
|
||||
ret = mtd_device_unregister(&flash->mtd);
|
||||
if (ret == 0)
|
||||
kfree(flash);
|
||||
return ret;
|
||||
@ -490,7 +480,7 @@ static struct spi_driver sst25l_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = sst25l_probe,
|
||||
.remove = __exit_p(sst25l_remove),
|
||||
.remove = __devexit_p(sst25l_remove),
|
||||
};
|
||||
|
||||
static int __init sst25l_init(void)
|
||||
|
@ -313,12 +313,7 @@ static int chip_ready(struct map_info *map, struct flchip *chip, int mode)
|
||||
if (ret) {
|
||||
/* Oops. something got wrong. */
|
||||
/* Resume and pretend we weren't here. */
|
||||
map_write(map, CMD(LPDDR_RESUME),
|
||||
map->pfow_base + PFOW_COMMAND_CODE);
|
||||
map_write(map, CMD(LPDDR_START_EXECUTION),
|
||||
map->pfow_base + PFOW_COMMAND_EXECUTE);
|
||||
chip->state = FL_ERASING;
|
||||
chip->oldstate = FL_READY;
|
||||
put_chip(map, chip);
|
||||
printk(KERN_ERR "%s: suspend operation failed."
|
||||
"State may be wrong \n", map->name);
|
||||
return -EIO;
|
||||
@ -383,7 +378,6 @@ static void put_chip(struct map_info *map, struct flchip *chip)
|
||||
|
||||
switch (chip->oldstate) {
|
||||
case FL_ERASING:
|
||||
chip->state = chip->oldstate;
|
||||
map_write(map, CMD(LPDDR_RESUME),
|
||||
map->pfow_base + PFOW_COMMAND_CODE);
|
||||
map_write(map, CMD(LPDDR_START_EXECUTION),
|
||||
|
@ -82,7 +82,6 @@ config MTD_PHYSMAP_OF
|
||||
config MTD_PMC_MSP_EVM
|
||||
tristate "CFI Flash device mapped on PMC-Sierra MSP"
|
||||
depends on PMC_MSP && MTD_CFI
|
||||
select MTD_PARTITIONS
|
||||
help
|
||||
This provides a 'mapping' driver which supports the way
|
||||
in which user-programmable flash chips are connected on the
|
||||
@ -122,7 +121,7 @@ config MTD_SC520CDP
|
||||
|
||||
config MTD_NETSC520
|
||||
tristate "CFI Flash device mapped on AMD NetSc520"
|
||||
depends on X86 && MTD_CFI && MTD_PARTITIONS
|
||||
depends on X86 && MTD_CFI
|
||||
help
|
||||
This enables access routines for the flash chips on the AMD NetSc520
|
||||
demonstration board. If you have one of these boards and would like
|
||||
@ -131,7 +130,6 @@ config MTD_NETSC520
|
||||
config MTD_TS5500
|
||||
tristate "JEDEC Flash device mapped on Technologic Systems TS-5500"
|
||||
depends on X86
|
||||
select MTD_PARTITIONS
|
||||
select MTD_JEDECPROBE
|
||||
select MTD_CFI_AMDSTD
|
||||
help
|
||||
@ -149,7 +147,7 @@ config MTD_TS5500
|
||||
|
||||
config MTD_SBC_GXX
|
||||
tristate "CFI Flash device mapped on Arcom SBC-GXx boards"
|
||||
depends on X86 && MTD_CFI_INTELEXT && MTD_PARTITIONS && MTD_COMPLEX_MAPPINGS
|
||||
depends on X86 && MTD_CFI_INTELEXT && MTD_COMPLEX_MAPPINGS
|
||||
help
|
||||
This provides a driver for the on-board flash of Arcom Control
|
||||
Systems' SBC-GXn family of boards, formerly known as SBC-MediaGX.
|
||||
@ -161,7 +159,6 @@ config MTD_SBC_GXX
|
||||
config MTD_PXA2XX
|
||||
tristate "CFI Flash device mapped on Intel XScale PXA2xx based boards"
|
||||
depends on (PXA25x || PXA27x) && MTD_CFI_INTELEXT
|
||||
select MTD_PARTITIONS
|
||||
help
|
||||
This provides a driver for the NOR flash attached to a PXA2xx chip.
|
||||
|
||||
@ -185,7 +182,7 @@ config MTD_VMAX
|
||||
|
||||
config MTD_SCx200_DOCFLASH
|
||||
tristate "Flash device mapped with DOCCS on NatSemi SCx200"
|
||||
depends on SCx200 && MTD_CFI && MTD_PARTITIONS
|
||||
depends on SCx200 && MTD_CFI
|
||||
help
|
||||
Enable support for a flash chip mapped using the DOCCS signal on a
|
||||
National Semiconductor SCx200 processor.
|
||||
@ -247,7 +244,7 @@ config MTD_TSUNAMI
|
||||
|
||||
config MTD_NETtel
|
||||
tristate "CFI flash device on SnapGear/SecureEdge"
|
||||
depends on X86 && MTD_PARTITIONS && MTD_JEDECPROBE
|
||||
depends on X86 && MTD_JEDECPROBE
|
||||
help
|
||||
Support for flash chips on NETtel/SecureEdge/SnapGear boards.
|
||||
|
||||
@ -269,7 +266,7 @@ config MTD_LANTIQ
|
||||
|
||||
config MTD_DILNETPC
|
||||
tristate "CFI Flash device mapped on DIL/Net PC"
|
||||
depends on X86 && MTD_PARTITIONS && MTD_CFI_INTELEXT && BROKEN
|
||||
depends on X86 && MTD_CFI_INTELEXT && BROKEN
|
||||
help
|
||||
MTD map driver for SSV DIL/Net PC Boards "DNP" and "ADNP".
|
||||
For details, see <http://www.ssv-embedded.de/ssv/pc104/p169.htm>
|
||||
@ -355,7 +352,7 @@ config MTD_CDB89712
|
||||
|
||||
config MTD_SA1100
|
||||
tristate "CFI Flash device mapped on StrongARM SA11x0"
|
||||
depends on MTD_CFI && ARCH_SA1100 && MTD_PARTITIONS
|
||||
depends on MTD_CFI && ARCH_SA1100
|
||||
help
|
||||
This enables access to the flash chips on most platforms based on
|
||||
the SA1100 and SA1110, including the Assabet and the Compaq iPAQ.
|
||||
@ -389,7 +386,7 @@ config MTD_IXP2000
|
||||
|
||||
config MTD_FORTUNET
|
||||
tristate "CFI Flash device mapped on the FortuNet board"
|
||||
depends on MTD_CFI && MTD_PARTITIONS && SA1100_FORTUNET
|
||||
depends on MTD_CFI && SA1100_FORTUNET
|
||||
help
|
||||
This enables access to the Flash on the FortuNet board. If you
|
||||
have such a board, say 'Y'.
|
||||
@ -461,7 +458,6 @@ config MTD_PCMCIA_ANONYMOUS
|
||||
config MTD_BFIN_ASYNC
|
||||
tristate "Blackfin BF533-STAMP Flash Chip Support"
|
||||
depends on BFIN533_STAMP && MTD_CFI && MTD_COMPLEX_MAPPINGS
|
||||
select MTD_PARTITIONS
|
||||
default y
|
||||
help
|
||||
Map driver which allows for simultaneous utilization of
|
||||
@ -473,7 +469,6 @@ config MTD_GPIO_ADDR
|
||||
tristate "GPIO-assisted Flash Chip Support"
|
||||
depends on GENERIC_GPIO || GPIOLIB
|
||||
depends on MTD_COMPLEX_MAPPINGS
|
||||
select MTD_PARTITIONS
|
||||
help
|
||||
Map driver which allows flashes to be partially physically addressed
|
||||
and assisted by GPIOs.
|
||||
@ -482,14 +477,13 @@ config MTD_GPIO_ADDR
|
||||
|
||||
config MTD_UCLINUX
|
||||
bool "Generic uClinux RAM/ROM filesystem support"
|
||||
depends on MTD_PARTITIONS && MTD_RAM=y && !MMU
|
||||
depends on MTD_RAM=y && !MMU
|
||||
help
|
||||
Map driver to support image based filesystems for uClinux.
|
||||
|
||||
config MTD_WRSBC8260
|
||||
tristate "Map driver for WindRiver PowerQUICC II MPC82xx board"
|
||||
depends on (SBC82xx || SBC8560)
|
||||
select MTD_PARTITIONS
|
||||
select MTD_MAP_BANK_WIDTH_4
|
||||
select MTD_MAP_BANK_WIDTH_1
|
||||
select MTD_CFI_I1
|
||||
@ -502,7 +496,6 @@ config MTD_WRSBC8260
|
||||
config MTD_DMV182
|
||||
tristate "Map driver for Dy-4 SVME/DMV-182 board."
|
||||
depends on DMV182
|
||||
select MTD_PARTITIONS
|
||||
select MTD_MAP_BANK_WIDTH_32
|
||||
select MTD_CFI_I8
|
||||
select MTD_CFI_AMDSTD
|
||||
|
@ -82,7 +82,7 @@ static void amd76xrom_cleanup(struct amd76xrom_window *window)
|
||||
if (map->rsrc.parent) {
|
||||
release_resource(&map->rsrc);
|
||||
}
|
||||
del_mtd_device(map->mtd);
|
||||
mtd_device_unregister(map->mtd);
|
||||
map_destroy(map->mtd);
|
||||
list_del(&map->list);
|
||||
kfree(map);
|
||||
@ -262,7 +262,7 @@ static int __devinit amd76xrom_init_one (struct pci_dev *pdev,
|
||||
|
||||
/* Now that the mtd devices is complete claim and export it */
|
||||
map->mtd->owner = THIS_MODULE;
|
||||
if (add_mtd_device(map->mtd)) {
|
||||
if (mtd_device_register(map->mtd, NULL, 0)) {
|
||||
map_destroy(map->mtd);
|
||||
map->mtd = NULL;
|
||||
goto out;
|
||||
|
@ -88,7 +88,7 @@ map:
|
||||
sram_mtd->owner = THIS_MODULE;
|
||||
sram_mtd->erasesize = 16;
|
||||
|
||||
if (add_mtd_device(sram_mtd)) {
|
||||
if (mtd_device_register(sram_mtd, NULL, 0)) {
|
||||
printk("NV-RAM device addition failed\n");
|
||||
err = -ENOMEM;
|
||||
goto out_probe;
|
||||
@ -111,7 +111,7 @@ out:
|
||||
static void __exit cleanup_autcpu12_maps(void)
|
||||
{
|
||||
if (sram_mtd) {
|
||||
del_mtd_device(sram_mtd);
|
||||
mtd_device_unregister(sram_mtd);
|
||||
map_destroy(sram_mtd);
|
||||
iounmap((void *)autcpu12_sram_map.virt);
|
||||
}
|
||||
|
@ -224,8 +224,8 @@ probe_ok:
|
||||
goto err_probe;
|
||||
}
|
||||
|
||||
return add_mtd_partitions(bcm963xx_mtd_info, parsed_parts,
|
||||
parsed_nr_parts);
|
||||
return mtd_device_register(bcm963xx_mtd_info, parsed_parts,
|
||||
parsed_nr_parts);
|
||||
|
||||
err_probe:
|
||||
iounmap(bcm963xx_map.virt);
|
||||
@ -235,7 +235,7 @@ err_probe:
|
||||
static int bcm963xx_remove(struct platform_device *pdev)
|
||||
{
|
||||
if (bcm963xx_mtd_info) {
|
||||
del_mtd_partitions(bcm963xx_mtd_info);
|
||||
mtd_device_unregister(bcm963xx_mtd_info);
|
||||
map_destroy(bcm963xx_mtd_info);
|
||||
}
|
||||
|
||||
|
@ -41,9 +41,7 @@ struct async_state {
|
||||
uint32_t flash_ambctl0, flash_ambctl1;
|
||||
uint32_t save_ambctl0, save_ambctl1;
|
||||
unsigned long irq_flags;
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
struct mtd_partition *parts;
|
||||
#endif
|
||||
};
|
||||
|
||||
static void switch_to_flash(struct async_state *state)
|
||||
@ -124,9 +122,7 @@ static void bfin_flash_copy_to(struct map_info *map, unsigned long to, const voi
|
||||
switch_back(state);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", NULL };
|
||||
#endif
|
||||
|
||||
static int __devinit bfin_flash_probe(struct platform_device *pdev)
|
||||
{
|
||||
@ -169,22 +165,17 @@ static int __devinit bfin_flash_probe(struct platform_device *pdev)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
ret = parse_mtd_partitions(state->mtd, part_probe_types, &pdata->parts, 0);
|
||||
if (ret > 0) {
|
||||
pr_devinit(KERN_NOTICE DRIVER_NAME ": Using commandline partition definition\n");
|
||||
add_mtd_partitions(state->mtd, pdata->parts, ret);
|
||||
mtd_device_register(state->mtd, pdata->parts, ret);
|
||||
state->parts = pdata->parts;
|
||||
|
||||
} else if (pdata->nr_parts) {
|
||||
pr_devinit(KERN_NOTICE DRIVER_NAME ": Using board partition definition\n");
|
||||
add_mtd_partitions(state->mtd, pdata->parts, pdata->nr_parts);
|
||||
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
mtd_device_register(state->mtd, pdata->parts, pdata->nr_parts);
|
||||
} else {
|
||||
pr_devinit(KERN_NOTICE DRIVER_NAME ": no partition info available, registering whole flash at once\n");
|
||||
add_mtd_device(state->mtd);
|
||||
mtd_device_register(state->mtd, NULL, 0);
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, state);
|
||||
@ -196,10 +187,8 @@ static int __devexit bfin_flash_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct async_state *state = platform_get_drvdata(pdev);
|
||||
gpio_free(state->enet_flash_pin);
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
del_mtd_partitions(state->mtd);
|
||||
mtd_device_unregister(state->mtd);
|
||||
kfree(state->parts);
|
||||
#endif
|
||||
map_destroy(state->mtd);
|
||||
kfree(state);
|
||||
return 0;
|
||||
|
@ -75,7 +75,7 @@ static int __init init_cdb89712_flash (void)
|
||||
|
||||
flash_mtd->owner = THIS_MODULE;
|
||||
|
||||
if (add_mtd_device(flash_mtd)) {
|
||||
if (mtd_device_register(flash_mtd, NULL, 0)) {
|
||||
printk("FLASH device addition failed\n");
|
||||
err = -ENOMEM;
|
||||
goto out_probe;
|
||||
@ -141,7 +141,7 @@ static int __init init_cdb89712_sram (void)
|
||||
sram_mtd->owner = THIS_MODULE;
|
||||
sram_mtd->erasesize = 16;
|
||||
|
||||
if (add_mtd_device(sram_mtd)) {
|
||||
if (mtd_device_register(sram_mtd, NULL, 0)) {
|
||||
printk("SRAM device addition failed\n");
|
||||
err = -ENOMEM;
|
||||
goto out_probe;
|
||||
@ -209,7 +209,7 @@ static int __init init_cdb89712_bootrom (void)
|
||||
bootrom_mtd->owner = THIS_MODULE;
|
||||
bootrom_mtd->erasesize = 0x10000;
|
||||
|
||||
if (add_mtd_device(bootrom_mtd)) {
|
||||
if (mtd_device_register(bootrom_mtd, NULL, 0)) {
|
||||
printk("BootROM device addition failed\n");
|
||||
err = -ENOMEM;
|
||||
goto out_probe;
|
||||
@ -249,21 +249,21 @@ static int __init init_cdb89712_maps(void)
|
||||
static void __exit cleanup_cdb89712_maps(void)
|
||||
{
|
||||
if (sram_mtd) {
|
||||
del_mtd_device(sram_mtd);
|
||||
mtd_device_unregister(sram_mtd);
|
||||
map_destroy(sram_mtd);
|
||||
iounmap((void *)cdb89712_sram_map.virt);
|
||||
release_resource (&cdb89712_sram_resource);
|
||||
}
|
||||
|
||||
if (flash_mtd) {
|
||||
del_mtd_device(flash_mtd);
|
||||
mtd_device_unregister(flash_mtd);
|
||||
map_destroy(flash_mtd);
|
||||
iounmap((void *)cdb89712_flash_map.virt);
|
||||
release_resource (&cdb89712_flash_resource);
|
||||
}
|
||||
|
||||
if (bootrom_mtd) {
|
||||
del_mtd_device(bootrom_mtd);
|
||||
mtd_device_unregister(bootrom_mtd);
|
||||
map_destroy(bootrom_mtd);
|
||||
iounmap((void *)cdb89712_bootrom_map.virt);
|
||||
release_resource (&cdb89712_bootrom_resource);
|
||||
|
@ -224,7 +224,7 @@ static void __exit clps_destroy_mtd(struct clps_info *clps, struct mtd_info *mtd
|
||||
{
|
||||
int i;
|
||||
|
||||
del_mtd_partitions(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
|
||||
if (mtd != clps[0].mtd)
|
||||
mtd_concat_destroy(mtd);
|
||||
@ -292,11 +292,11 @@ static void __init clps_locate_partitions(struct mtd_info *mtd)
|
||||
if (nr_parts == 0) {
|
||||
printk(KERN_NOTICE "clps flash: no partition info "
|
||||
"available, registering whole flash\n");
|
||||
add_mtd_device(mtd);
|
||||
mtd_device_register(mtd, NULL, 0);
|
||||
} else {
|
||||
printk(KERN_NOTICE "clps flash: using %s partition "
|
||||
"definition\n", part_type);
|
||||
add_mtd_partitions(mtd, parsed_parts, nr_parts);
|
||||
mtd_device_register(mtd, parsed_parts, nr_parts);
|
||||
}
|
||||
|
||||
/* Always succeeds. */
|
||||
|
@ -107,7 +107,7 @@ static int __init init_flagadm(void)
|
||||
mymtd = do_map_probe("cfi_probe", &flagadm_map);
|
||||
if (mymtd) {
|
||||
mymtd->owner = THIS_MODULE;
|
||||
add_mtd_partitions(mymtd, flagadm_parts, PARTITION_COUNT);
|
||||
mtd_device_register(mymtd, flagadm_parts, PARTITION_COUNT);
|
||||
printk(KERN_NOTICE "FlagaDM flash device initialized\n");
|
||||
return 0;
|
||||
}
|
||||
@ -119,7 +119,7 @@ static int __init init_flagadm(void)
|
||||
static void __exit cleanup_flagadm(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_partitions(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (flagadm_map.virt) {
|
||||
|
@ -94,7 +94,7 @@ static void ck804xrom_cleanup(struct ck804xrom_window *window)
|
||||
if (map->rsrc.parent)
|
||||
release_resource(&map->rsrc);
|
||||
|
||||
del_mtd_device(map->mtd);
|
||||
mtd_device_unregister(map->mtd);
|
||||
map_destroy(map->mtd);
|
||||
list_del(&map->list);
|
||||
kfree(map);
|
||||
@ -291,7 +291,7 @@ static int __devinit ck804xrom_init_one (struct pci_dev *pdev,
|
||||
|
||||
/* Now that the mtd devices is complete claim and export it */
|
||||
map->mtd->owner = THIS_MODULE;
|
||||
if (add_mtd_device(map->mtd)) {
|
||||
if (mtd_device_register(map->mtd, NULL, 0)) {
|
||||
map_destroy(map->mtd);
|
||||
map->mtd = NULL;
|
||||
goto out;
|
||||
|
@ -93,7 +93,7 @@ static int __init init_dbox2_flash(void)
|
||||
mymtd->owner = THIS_MODULE;
|
||||
|
||||
/* Create MTD devices for each partition. */
|
||||
add_mtd_partitions(mymtd, partition_info, NUM_PARTITIONS);
|
||||
mtd_device_register(mymtd, partition_info, NUM_PARTITIONS);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -105,7 +105,7 @@ static int __init init_dbox2_flash(void)
|
||||
static void __exit cleanup_dbox2_flash(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_partitions(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (dbox2_flash_map.virt) {
|
||||
|
@ -145,17 +145,13 @@ static struct map_info dc21285_map = {
|
||||
|
||||
|
||||
/* Partition stuff */
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static struct mtd_partition *dc21285_parts;
|
||||
static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
|
||||
#endif
|
||||
|
||||
static int __init init_dc21285(void)
|
||||
{
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
int nrparts;
|
||||
#endif
|
||||
|
||||
/* Determine bankwidth */
|
||||
switch (*CSR_SA110_CNTL & (3<<14)) {
|
||||
@ -204,13 +200,8 @@ static int __init init_dc21285(void)
|
||||
|
||||
dc21285_mtd->owner = THIS_MODULE;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
nrparts = parse_mtd_partitions(dc21285_mtd, probes, &dc21285_parts, 0);
|
||||
if (nrparts > 0)
|
||||
add_mtd_partitions(dc21285_mtd, dc21285_parts, nrparts);
|
||||
else
|
||||
#endif
|
||||
add_mtd_device(dc21285_mtd);
|
||||
mtd_device_register(dc21285_mtd, dc21285_parts, nrparts);
|
||||
|
||||
if(machine_is_ebsa285()) {
|
||||
/*
|
||||
@ -232,14 +223,9 @@ static int __init init_dc21285(void)
|
||||
|
||||
static void __exit cleanup_dc21285(void)
|
||||
{
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
if (dc21285_parts) {
|
||||
del_mtd_partitions(dc21285_mtd);
|
||||
mtd_device_unregister(dc21285_mtd);
|
||||
if (dc21285_parts)
|
||||
kfree(dc21285_parts);
|
||||
} else
|
||||
#endif
|
||||
del_mtd_device(dc21285_mtd);
|
||||
|
||||
map_destroy(dc21285_mtd);
|
||||
iounmap(dc21285_map.virt);
|
||||
}
|
||||
|
@ -450,7 +450,7 @@ static int __init init_dnpc(void)
|
||||
partition_info[2].mtdp = &lowlvl_parts[1];
|
||||
partition_info[3].mtdp = &lowlvl_parts[3];
|
||||
|
||||
add_mtd_partitions(mymtd, partition_info, NUM_PARTITIONS);
|
||||
mtd_device_register(mymtd, partition_info, NUM_PARTITIONS);
|
||||
|
||||
/*
|
||||
** now create a virtual MTD device by concatenating the for partitions
|
||||
@ -463,7 +463,8 @@ static int __init init_dnpc(void)
|
||||
** we do not supply mtd pointers in higlvl_partition_info, so
|
||||
** add_mtd_partitions() will register the devices.
|
||||
*/
|
||||
add_mtd_partitions(merged_mtd, higlvl_partition_info, NUM_HIGHLVL_PARTITIONS);
|
||||
mtd_device_register(merged_mtd, higlvl_partition_info,
|
||||
NUM_HIGHLVL_PARTITIONS);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -472,12 +473,12 @@ static int __init init_dnpc(void)
|
||||
static void __exit cleanup_dnpc(void)
|
||||
{
|
||||
if(merged_mtd) {
|
||||
del_mtd_partitions(merged_mtd);
|
||||
mtd_device_unregister(merged_mtd);
|
||||
mtd_concat_destroy(merged_mtd);
|
||||
}
|
||||
|
||||
if (mymtd) {
|
||||
del_mtd_partitions(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (dnpc_map.virt) {
|
||||
|
@ -120,7 +120,7 @@ static int __init init_svme182(void)
|
||||
this_mtd->size >> 20, FLASH_BASE_ADDR);
|
||||
|
||||
this_mtd->owner = THIS_MODULE;
|
||||
add_mtd_partitions(this_mtd, partitions, num_parts);
|
||||
mtd_device_register(this_mtd, partitions, num_parts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -129,7 +129,7 @@ static void __exit cleanup_svme182(void)
|
||||
{
|
||||
if (this_mtd)
|
||||
{
|
||||
del_mtd_partitions(this_mtd);
|
||||
mtd_device_unregister(this_mtd);
|
||||
map_destroy(this_mtd);
|
||||
}
|
||||
|
||||
|
@ -15,10 +15,7 @@
|
||||
#include <asm/io.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/map.h>
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
#include <linux/mtd/partitions.h>
|
||||
#endif
|
||||
|
||||
#define WINDOW_ADDR 0x00000000 /* physical properties of flash */
|
||||
#define WINDOW_SIZE 0x01000000
|
||||
@ -40,8 +37,6 @@ struct map_info edb7312nor_map = {
|
||||
.phys = WINDOW_ADDR,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
|
||||
/*
|
||||
* MTD partitioning stuff
|
||||
*/
|
||||
@ -66,8 +61,6 @@ static struct mtd_partition static_partitions[3] =
|
||||
|
||||
static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
|
||||
|
||||
#endif
|
||||
|
||||
static int mtd_parts_nb = 0;
|
||||
static struct mtd_partition *mtd_parts = 0;
|
||||
|
||||
@ -96,27 +89,24 @@ static int __init init_edb7312nor(void)
|
||||
if (mymtd) {
|
||||
mymtd->owner = THIS_MODULE;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
mtd_parts_nb = parse_mtd_partitions(mymtd, probes, &mtd_parts, MTDID);
|
||||
if (mtd_parts_nb > 0)
|
||||
part_type = "detected";
|
||||
part_type = "detected";
|
||||
|
||||
if (mtd_parts_nb == 0)
|
||||
{
|
||||
if (mtd_parts_nb == 0) {
|
||||
mtd_parts = static_partitions;
|
||||
mtd_parts_nb = ARRAY_SIZE(static_partitions);
|
||||
part_type = "static";
|
||||
}
|
||||
#endif
|
||||
add_mtd_device(mymtd);
|
||||
|
||||
if (mtd_parts_nb == 0)
|
||||
printk(KERN_NOTICE MSG_PREFIX "no partition info available\n");
|
||||
printk(KERN_NOTICE MSG_PREFIX "no partition info available\n");
|
||||
else
|
||||
{
|
||||
printk(KERN_NOTICE MSG_PREFIX
|
||||
"using %s partition definition\n", part_type);
|
||||
add_mtd_partitions(mymtd, mtd_parts, mtd_parts_nb);
|
||||
}
|
||||
/* Register the whole device first. */
|
||||
mtd_device_register(mymtd, NULL, 0);
|
||||
mtd_device_register(mymtd, mtd_parts, mtd_parts_nb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -127,7 +117,7 @@ static int __init init_edb7312nor(void)
|
||||
static void __exit cleanup_edb7312nor(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_device(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (edb7312nor_map.virt) {
|
||||
|
@ -128,7 +128,7 @@ static void esb2rom_cleanup(struct esb2rom_window *window)
|
||||
list_for_each_entry_safe(map, scratch, &window->maps, list) {
|
||||
if (map->rsrc.parent)
|
||||
release_resource(&map->rsrc);
|
||||
del_mtd_device(map->mtd);
|
||||
mtd_device_unregister(map->mtd);
|
||||
map_destroy(map->mtd);
|
||||
list_del(&map->list);
|
||||
kfree(map);
|
||||
@ -352,7 +352,7 @@ static int __devinit esb2rom_init_one(struct pci_dev *pdev,
|
||||
|
||||
/* Now that the mtd devices is complete claim and export it */
|
||||
map->mtd->owner = THIS_MODULE;
|
||||
if (add_mtd_device(map->mtd)) {
|
||||
if (mtd_device_register(map->mtd, NULL, 0)) {
|
||||
map_destroy(map->mtd);
|
||||
map->mtd = NULL;
|
||||
goto out;
|
||||
|
@ -243,8 +243,9 @@ static int __init init_fortunet(void)
|
||||
&map_regions[ix].map_info);
|
||||
}
|
||||
map_regions[ix].mymtd->owner = THIS_MODULE;
|
||||
add_mtd_partitions(map_regions[ix].mymtd,
|
||||
map_regions[ix].parts,map_regions_parts[ix]);
|
||||
mtd_device_register(map_regions[ix].mymtd,
|
||||
map_regions[ix].parts,
|
||||
map_regions_parts[ix]);
|
||||
}
|
||||
}
|
||||
if(iy)
|
||||
@ -261,7 +262,7 @@ static void __exit cleanup_fortunet(void)
|
||||
{
|
||||
if( map_regions[ix].mymtd )
|
||||
{
|
||||
del_mtd_partitions( map_regions[ix].mymtd );
|
||||
mtd_device_unregister(map_regions[ix].mymtd);
|
||||
map_destroy( map_regions[ix].mymtd );
|
||||
}
|
||||
iounmap((void *)map_regions[ix].map_info.virt);
|
||||
|
@ -155,9 +155,7 @@ static void gf_copy_to(struct map_info *map, unsigned long to, const void *from,
|
||||
memcpy_toio(map->virt + (to % state->win_size), from, len);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", NULL };
|
||||
#endif
|
||||
|
||||
/**
|
||||
* gpio_flash_probe() - setup a mapping for a GPIO assisted flash
|
||||
@ -189,7 +187,7 @@ static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", NULL };
|
||||
*/
|
||||
static int __devinit gpio_flash_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret;
|
||||
int nr_parts;
|
||||
size_t i, arr_size;
|
||||
struct physmap_flash_data *pdata;
|
||||
struct resource *memory;
|
||||
@ -254,24 +252,21 @@ static int __devinit gpio_flash_probe(struct platform_device *pdev)
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
ret = parse_mtd_partitions(state->mtd, part_probe_types, &pdata->parts, 0);
|
||||
if (ret > 0) {
|
||||
nr_parts = parse_mtd_partitions(state->mtd, part_probe_types,
|
||||
&pdata->parts, 0);
|
||||
if (nr_parts > 0) {
|
||||
pr_devinit(KERN_NOTICE PFX "Using commandline partition definition\n");
|
||||
add_mtd_partitions(state->mtd, pdata->parts, ret);
|
||||
kfree(pdata->parts);
|
||||
|
||||
} else if (pdata->nr_parts) {
|
||||
pr_devinit(KERN_NOTICE PFX "Using board partition definition\n");
|
||||
add_mtd_partitions(state->mtd, pdata->parts, pdata->nr_parts);
|
||||
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
nr_parts = pdata->nr_parts;
|
||||
} else {
|
||||
pr_devinit(KERN_NOTICE PFX "no partition info available, registering whole flash at once\n");
|
||||
add_mtd_device(state->mtd);
|
||||
nr_parts = 0;
|
||||
}
|
||||
|
||||
mtd_device_register(state->mtd, pdata->parts, nr_parts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -282,9 +277,7 @@ static int __devexit gpio_flash_remove(struct platform_device *pdev)
|
||||
do {
|
||||
gpio_free(state->gpio_addrs[i]);
|
||||
} while (++i < state->gpio_count);
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
del_mtd_partitions(state->mtd);
|
||||
#endif
|
||||
mtd_device_unregister(state->mtd);
|
||||
map_destroy(state->mtd);
|
||||
kfree(state);
|
||||
return 0;
|
||||
|
@ -92,18 +92,16 @@ static int __init h720x_mtd_init(void)
|
||||
if (mymtd) {
|
||||
mymtd->owner = THIS_MODULE;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
nr_mtd_parts = parse_mtd_partitions(mymtd, probes, &mtd_parts, 0);
|
||||
if (nr_mtd_parts > 0)
|
||||
part_type = "command line";
|
||||
#endif
|
||||
if (nr_mtd_parts <= 0) {
|
||||
mtd_parts = h720x_partitions;
|
||||
nr_mtd_parts = NUM_PARTITIONS;
|
||||
part_type = "builtin";
|
||||
}
|
||||
printk(KERN_INFO "Using %s partition table\n", part_type);
|
||||
add_mtd_partitions(mymtd, mtd_parts, nr_mtd_parts);
|
||||
mtd_device_register(mymtd, mtd_parts, nr_mtd_parts);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -118,7 +116,7 @@ static void __exit h720x_mtd_cleanup(void)
|
||||
{
|
||||
|
||||
if (mymtd) {
|
||||
del_mtd_partitions(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ static void ichxrom_cleanup(struct ichxrom_window *window)
|
||||
list_for_each_entry_safe(map, scratch, &window->maps, list) {
|
||||
if (map->rsrc.parent)
|
||||
release_resource(&map->rsrc);
|
||||
del_mtd_device(map->mtd);
|
||||
mtd_device_unregister(map->mtd);
|
||||
map_destroy(map->mtd);
|
||||
list_del(&map->list);
|
||||
kfree(map);
|
||||
@ -287,7 +287,7 @@ static int __devinit ichxrom_init_one (struct pci_dev *pdev,
|
||||
|
||||
/* Now that the mtd devices is complete claim and export it */
|
||||
map->mtd->owner = THIS_MODULE;
|
||||
if (add_mtd_device(map->mtd)) {
|
||||
if (mtd_device_register(map->mtd, NULL, 0)) {
|
||||
map_destroy(map->mtd);
|
||||
map->mtd = NULL;
|
||||
goto out;
|
||||
|
@ -15,10 +15,7 @@
|
||||
#include <asm/io.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/map.h>
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
#include <linux/mtd/partitions.h>
|
||||
#endif
|
||||
|
||||
#define WINDOW_ADDR0 0x00000000 /* physical properties of flash */
|
||||
#define WINDOW_SIZE0 0x00800000
|
||||
@ -49,8 +46,6 @@ static struct map_info impa7_map[NUM_FLASHBANKS] = {
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
|
||||
/*
|
||||
* MTD partitioning stuff
|
||||
*/
|
||||
@ -66,8 +61,6 @@ static struct mtd_partition static_partitions[] =
|
||||
static int mtd_parts_nb[NUM_FLASHBANKS];
|
||||
static struct mtd_partition *mtd_parts[NUM_FLASHBANKS];
|
||||
|
||||
#endif
|
||||
|
||||
static const char *probes[] = { "cmdlinepart", NULL };
|
||||
|
||||
static int __init init_impa7(void)
|
||||
@ -104,7 +97,6 @@ static int __init init_impa7(void)
|
||||
if (impa7_mtd[i]) {
|
||||
impa7_mtd[i]->owner = THIS_MODULE;
|
||||
devicesfound++;
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
mtd_parts_nb[i] = parse_mtd_partitions(impa7_mtd[i],
|
||||
probes,
|
||||
&mtd_parts[i],
|
||||
@ -120,12 +112,8 @@ static int __init init_impa7(void)
|
||||
printk(KERN_NOTICE MSG_PREFIX
|
||||
"using %s partition definition\n",
|
||||
part_type);
|
||||
add_mtd_partitions(impa7_mtd[i],
|
||||
mtd_parts[i], mtd_parts_nb[i]);
|
||||
#else
|
||||
add_mtd_device(impa7_mtd[i]);
|
||||
|
||||
#endif
|
||||
mtd_device_register(impa7_mtd[i],
|
||||
mtd_parts[i], mtd_parts_nb[i]);
|
||||
}
|
||||
else
|
||||
iounmap((void *)impa7_map[i].virt);
|
||||
@ -138,11 +126,7 @@ static void __exit cleanup_impa7(void)
|
||||
int i;
|
||||
for (i=0; i<NUM_FLASHBANKS; i++) {
|
||||
if (impa7_mtd[i]) {
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
del_mtd_partitions(impa7_mtd[i]);
|
||||
#else
|
||||
del_mtd_device(impa7_mtd[i]);
|
||||
#endif
|
||||
mtd_device_unregister(impa7_mtd[i]);
|
||||
map_destroy(impa7_mtd[i]);
|
||||
iounmap((void *)impa7_map[i].virt);
|
||||
impa7_map[i].virt = 0;
|
||||
|
@ -66,33 +66,18 @@ struct vr_nor_mtd {
|
||||
|
||||
static void __devexit vr_nor_destroy_partitions(struct vr_nor_mtd *p)
|
||||
{
|
||||
if (p->nr_parts > 0) {
|
||||
#if defined(CONFIG_MTD_PARTITIONS) || defined(CONFIG_MTD_PARTITIONS_MODULE)
|
||||
del_mtd_partitions(p->info);
|
||||
#endif
|
||||
} else
|
||||
del_mtd_device(p->info);
|
||||
mtd_device_unregister(p->info);
|
||||
}
|
||||
|
||||
static int __devinit vr_nor_init_partitions(struct vr_nor_mtd *p)
|
||||
{
|
||||
int err = 0;
|
||||
#if defined(CONFIG_MTD_PARTITIONS) || defined(CONFIG_MTD_PARTITIONS_MODULE)
|
||||
struct mtd_partition *parts;
|
||||
static const char *part_probes[] = { "cmdlinepart", NULL };
|
||||
#endif
|
||||
|
||||
/* register the flash bank */
|
||||
#if defined(CONFIG_MTD_PARTITIONS) || defined(CONFIG_MTD_PARTITIONS_MODULE)
|
||||
/* partition the flash bank */
|
||||
p->nr_parts = parse_mtd_partitions(p->info, part_probes, &parts, 0);
|
||||
if (p->nr_parts > 0)
|
||||
err = add_mtd_partitions(p->info, parts, p->nr_parts);
|
||||
#endif
|
||||
if (p->nr_parts <= 0)
|
||||
err = add_mtd_device(p->info);
|
||||
|
||||
return err;
|
||||
return mtd_device_register(p->info, parts, p->nr_parts);
|
||||
}
|
||||
|
||||
static void __devexit vr_nor_destroy_mtd_setup(struct vr_nor_mtd *p)
|
||||
|
@ -119,7 +119,7 @@ static int ixp2000_flash_remove(struct platform_device *dev)
|
||||
return 0;
|
||||
|
||||
if (info->mtd) {
|
||||
del_mtd_partitions(info->mtd);
|
||||
mtd_device_unregister(info->mtd);
|
||||
map_destroy(info->mtd);
|
||||
}
|
||||
if (info->map.map_priv_1)
|
||||
@ -230,7 +230,7 @@ static int ixp2000_flash_probe(struct platform_device *dev)
|
||||
|
||||
err = parse_mtd_partitions(info->mtd, probes, &info->partitions, 0);
|
||||
if (err > 0) {
|
||||
err = add_mtd_partitions(info->mtd, info->partitions, err);
|
||||
err = mtd_device_register(info->mtd, info->partitions, err);
|
||||
if(err)
|
||||
dev_err(&dev->dev, "Could not parse partitions\n");
|
||||
}
|
||||
|
@ -162,7 +162,7 @@ static int ixp4xx_flash_remove(struct platform_device *dev)
|
||||
return 0;
|
||||
|
||||
if (info->mtd) {
|
||||
del_mtd_partitions(info->mtd);
|
||||
mtd_device_unregister(info->mtd);
|
||||
map_destroy(info->mtd);
|
||||
}
|
||||
if (info->map.virt)
|
||||
@ -252,10 +252,8 @@ static int ixp4xx_flash_probe(struct platform_device *dev)
|
||||
/* Use the fast version */
|
||||
info->map.write = ixp4xx_write16;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
nr_parts = parse_mtd_partitions(info->mtd, probes, &info->partitions,
|
||||
dev->resource->start);
|
||||
#endif
|
||||
if (nr_parts > 0) {
|
||||
part_type = "dynamic";
|
||||
} else {
|
||||
@ -263,18 +261,16 @@ static int ixp4xx_flash_probe(struct platform_device *dev)
|
||||
nr_parts = plat->nr_parts;
|
||||
part_type = "static";
|
||||
}
|
||||
if (nr_parts == 0) {
|
||||
if (nr_parts == 0)
|
||||
printk(KERN_NOTICE "IXP4xx flash: no partition info "
|
||||
"available, registering whole flash\n");
|
||||
err = add_mtd_device(info->mtd);
|
||||
} else {
|
||||
else
|
||||
printk(KERN_NOTICE "IXP4xx flash: using %s partition "
|
||||
"definition\n", part_type);
|
||||
err = add_mtd_partitions(info->mtd, info->partitions, nr_parts);
|
||||
|
||||
if(err)
|
||||
printk(KERN_ERR "Could not parse partitions\n");
|
||||
}
|
||||
err = mtd_device_register(info->mtd, info->partitions, nr_parts);
|
||||
if (err)
|
||||
printk(KERN_ERR "Could not parse partitions\n");
|
||||
|
||||
if (err)
|
||||
goto Error;
|
||||
|
@ -138,7 +138,7 @@ static int __init init_l440gx(void)
|
||||
if (mymtd) {
|
||||
mymtd->owner = THIS_MODULE;
|
||||
|
||||
add_mtd_device(mymtd);
|
||||
mtd_device_register(mymtd, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -148,7 +148,7 @@ static int __init init_l440gx(void)
|
||||
|
||||
static void __exit cleanup_l440gx(void)
|
||||
{
|
||||
del_mtd_device(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
|
||||
iounmap(l440gx_map.virt);
|
||||
|
@ -112,18 +112,9 @@ static int latch_addr_flash_remove(struct platform_device *dev)
|
||||
latch_addr_data = dev->dev.platform_data;
|
||||
|
||||
if (info->mtd != NULL) {
|
||||
if (mtd_has_partitions()) {
|
||||
if (info->nr_parts) {
|
||||
del_mtd_partitions(info->mtd);
|
||||
kfree(info->parts);
|
||||
} else if (latch_addr_data->nr_parts) {
|
||||
del_mtd_partitions(info->mtd);
|
||||
} else {
|
||||
del_mtd_device(info->mtd);
|
||||
}
|
||||
} else {
|
||||
del_mtd_device(info->mtd);
|
||||
}
|
||||
if (info->nr_parts)
|
||||
kfree(info->parts);
|
||||
mtd_device_unregister(info->mtd);
|
||||
map_destroy(info->mtd);
|
||||
}
|
||||
|
||||
@ -215,23 +206,21 @@ static int __devinit latch_addr_flash_probe(struct platform_device *dev)
|
||||
}
|
||||
info->mtd->owner = THIS_MODULE;
|
||||
|
||||
if (mtd_has_partitions()) {
|
||||
|
||||
err = parse_mtd_partitions(info->mtd,
|
||||
(const char **)part_probe_types,
|
||||
&info->parts, 0);
|
||||
if (err > 0) {
|
||||
add_mtd_partitions(info->mtd, info->parts, err);
|
||||
return 0;
|
||||
}
|
||||
if (latch_addr_data->nr_parts) {
|
||||
pr_notice("Using latch-addr-flash partition information\n");
|
||||
add_mtd_partitions(info->mtd, latch_addr_data->parts,
|
||||
latch_addr_data->nr_parts);
|
||||
return 0;
|
||||
}
|
||||
err = parse_mtd_partitions(info->mtd, (const char **)part_probe_types,
|
||||
&info->parts, 0);
|
||||
if (err > 0) {
|
||||
mtd_device_register(info->mtd, info->parts, err);
|
||||
return 0;
|
||||
}
|
||||
add_mtd_device(info->mtd);
|
||||
if (latch_addr_data->nr_parts) {
|
||||
pr_notice("Using latch-addr-flash partition information\n");
|
||||
mtd_device_register(info->mtd,
|
||||
latch_addr_data->parts,
|
||||
latch_addr_data->nr_parts);
|
||||
return 0;
|
||||
}
|
||||
|
||||
mtd_device_register(info->mtd, NULL, 0);
|
||||
return 0;
|
||||
|
||||
iounmap:
|
||||
|
@ -69,8 +69,8 @@ static int __init init_mbx(void)
|
||||
mymtd = do_map_probe("jedec_probe", &mbx_map);
|
||||
if (mymtd) {
|
||||
mymtd->owner = THIS_MODULE;
|
||||
add_mtd_device(mymtd);
|
||||
add_mtd_partitions(mymtd, partition_info, NUM_PARTITIONS);
|
||||
mtd_device_register(mymtd, NULL, 0);
|
||||
mtd_device_register(mymtd, partition_info, NUM_PARTITIONS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ static int __init init_mbx(void)
|
||||
static void __exit cleanup_mbx(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_device(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (mbx_map.virt) {
|
||||
|
@ -116,14 +116,14 @@ static int __init init_netsc520(void)
|
||||
}
|
||||
|
||||
mymtd->owner = THIS_MODULE;
|
||||
add_mtd_partitions( mymtd, partition_info, NUM_PARTITIONS );
|
||||
mtd_device_register(mymtd, partition_info, NUM_PARTITIONS);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit cleanup_netsc520(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_partitions(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (netsc520_map.virt) {
|
||||
|
@ -383,13 +383,13 @@ static int __init nettel_init(void)
|
||||
/* No BIOS regions when AMD boot */
|
||||
num_intel_partitions -= 2;
|
||||
}
|
||||
rc = add_mtd_partitions(intel_mtd, nettel_intel_partitions,
|
||||
num_intel_partitions);
|
||||
rc = mtd_device_register(intel_mtd, nettel_intel_partitions,
|
||||
num_intel_partitions);
|
||||
#endif
|
||||
|
||||
if (amd_mtd) {
|
||||
rc = add_mtd_partitions(amd_mtd, nettel_amd_partitions,
|
||||
num_amd_partitions);
|
||||
rc = mtd_device_register(amd_mtd, nettel_amd_partitions,
|
||||
num_amd_partitions);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_CFI_INTELEXT
|
||||
@ -419,7 +419,7 @@ static void __exit nettel_cleanup(void)
|
||||
unregister_reboot_notifier(&nettel_notifier_block);
|
||||
#endif
|
||||
if (amd_mtd) {
|
||||
del_mtd_partitions(amd_mtd);
|
||||
mtd_device_unregister(amd_mtd);
|
||||
map_destroy(amd_mtd);
|
||||
}
|
||||
if (nettel_mmcrp) {
|
||||
@ -432,7 +432,7 @@ static void __exit nettel_cleanup(void)
|
||||
}
|
||||
#ifdef CONFIG_MTD_CFI_INTELEXT
|
||||
if (intel_mtd) {
|
||||
del_mtd_partitions(intel_mtd);
|
||||
mtd_device_unregister(intel_mtd);
|
||||
map_destroy(intel_mtd);
|
||||
}
|
||||
if (nettel_intel_map.virt) {
|
||||
|
@ -175,7 +175,7 @@ void cleanup_oct5066(void)
|
||||
int i;
|
||||
for (i=0; i<2; i++) {
|
||||
if (oct5066_mtd[i]) {
|
||||
del_mtd_device(oct5066_mtd[i]);
|
||||
mtd_device_unregister(oct5066_mtd[i]);
|
||||
map_destroy(oct5066_mtd[i]);
|
||||
}
|
||||
}
|
||||
@ -220,7 +220,7 @@ static int __init init_oct5066(void)
|
||||
oct5066_mtd[i] = do_map_probe("map_rom", &oct5066_map[i]);
|
||||
if (oct5066_mtd[i]) {
|
||||
oct5066_mtd[i]->owner = THIS_MODULE;
|
||||
add_mtd_device(oct5066_mtd[i]);
|
||||
mtd_device_register(oct5066_mtd[i], NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -313,7 +313,7 @@ mtd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
|
||||
goto release;
|
||||
|
||||
mtd->owner = THIS_MODULE;
|
||||
add_mtd_device(mtd);
|
||||
mtd_device_register(mtd, NULL, 0);
|
||||
|
||||
pci_set_drvdata(dev, mtd);
|
||||
|
||||
@ -336,7 +336,7 @@ mtd_pci_remove(struct pci_dev *dev)
|
||||
struct mtd_info *mtd = pci_get_drvdata(dev);
|
||||
struct map_pci_info *map = mtd->priv;
|
||||
|
||||
del_mtd_device(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
map_destroy(mtd);
|
||||
map->exit(dev, map);
|
||||
kfree(map);
|
||||
|
@ -630,7 +630,7 @@ static int pcmciamtd_config(struct pcmcia_device *link)
|
||||
dev->pcmcia_map.copy_to = pcmcia_copy_to;
|
||||
}
|
||||
|
||||
if(add_mtd_device(mtd)) {
|
||||
if (mtd_device_register(mtd, NULL, 0)) {
|
||||
map_destroy(mtd);
|
||||
dev->mtd_info = NULL;
|
||||
dev_err(&dev->p_dev->dev,
|
||||
@ -669,7 +669,7 @@ static void pcmciamtd_detach(struct pcmcia_device *link)
|
||||
DEBUG(3, "link=0x%p", link);
|
||||
|
||||
if(dev->mtd_info) {
|
||||
del_mtd_device(dev->mtd_info);
|
||||
mtd_device_unregister(dev->mtd_info);
|
||||
dev_info(&dev->p_dev->dev, "mtd%d: Removing\n",
|
||||
dev->mtd_info->index);
|
||||
map_destroy(dev->mtd_info);
|
||||
|
@ -27,10 +27,8 @@ struct physmap_flash_info {
|
||||
struct mtd_info *mtd[MAX_RESOURCES];
|
||||
struct mtd_info *cmtd;
|
||||
struct map_info map[MAX_RESOURCES];
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
int nr_parts;
|
||||
struct mtd_partition *parts;
|
||||
#endif
|
||||
};
|
||||
|
||||
static int physmap_flash_remove(struct platform_device *dev)
|
||||
@ -47,18 +45,9 @@ static int physmap_flash_remove(struct platform_device *dev)
|
||||
physmap_data = dev->dev.platform_data;
|
||||
|
||||
if (info->cmtd) {
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
if (info->nr_parts || physmap_data->nr_parts) {
|
||||
del_mtd_partitions(info->cmtd);
|
||||
|
||||
if (info->nr_parts)
|
||||
kfree(info->parts);
|
||||
} else {
|
||||
del_mtd_device(info->cmtd);
|
||||
}
|
||||
#else
|
||||
del_mtd_device(info->cmtd);
|
||||
#endif
|
||||
mtd_device_unregister(info->cmtd);
|
||||
if (info->nr_parts)
|
||||
kfree(info->parts);
|
||||
if (info->cmtd != info->mtd[0])
|
||||
mtd_concat_destroy(info->cmtd);
|
||||
}
|
||||
@ -92,10 +81,8 @@ static const char *rom_probe_types[] = {
|
||||
"qinfo_probe",
|
||||
"map_rom",
|
||||
NULL };
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", "afs",
|
||||
NULL };
|
||||
#endif
|
||||
|
||||
static int physmap_flash_probe(struct platform_device *dev)
|
||||
{
|
||||
@ -188,24 +175,23 @@ static int physmap_flash_probe(struct platform_device *dev)
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
err = parse_mtd_partitions(info->cmtd, part_probe_types,
|
||||
&info->parts, 0);
|
||||
&info->parts, 0);
|
||||
if (err > 0) {
|
||||
add_mtd_partitions(info->cmtd, info->parts, err);
|
||||
mtd_device_register(info->cmtd, info->parts, err);
|
||||
info->nr_parts = err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (physmap_data->nr_parts) {
|
||||
printk(KERN_NOTICE "Using physmap partition information\n");
|
||||
add_mtd_partitions(info->cmtd, physmap_data->parts,
|
||||
physmap_data->nr_parts);
|
||||
mtd_device_register(info->cmtd, physmap_data->parts,
|
||||
physmap_data->nr_parts);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
add_mtd_device(info->cmtd);
|
||||
mtd_device_register(info->cmtd, NULL, 0);
|
||||
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
@ -269,14 +255,12 @@ void physmap_configure(unsigned long addr, unsigned long size,
|
||||
physmap_flash_data.set_vpp = set_vpp;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
void physmap_set_partitions(struct mtd_partition *parts, int num_parts)
|
||||
{
|
||||
physmap_flash_data.nr_parts = num_parts;
|
||||
physmap_flash_data.parts = parts;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int __init physmap_init(void)
|
||||
{
|
||||
|
@ -34,16 +34,12 @@ struct of_flash_list {
|
||||
|
||||
struct of_flash {
|
||||
struct mtd_info *cmtd;
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
struct mtd_partition *parts;
|
||||
#endif
|
||||
int list_size; /* number of elements in of_flash_list */
|
||||
struct of_flash_list list[0];
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
#define OF_FLASH_PARTS(info) ((info)->parts)
|
||||
|
||||
static int parse_obsolete_partitions(struct platform_device *dev,
|
||||
struct of_flash *info,
|
||||
struct device_node *dp)
|
||||
@ -89,10 +85,6 @@ static int parse_obsolete_partitions(struct platform_device *dev,
|
||||
|
||||
return nr_parts;
|
||||
}
|
||||
#else /* MTD_PARTITIONS */
|
||||
#define OF_FLASH_PARTS(info) (0)
|
||||
#define parse_partitions(info, dev) (0)
|
||||
#endif /* MTD_PARTITIONS */
|
||||
|
||||
static int of_flash_remove(struct platform_device *dev)
|
||||
{
|
||||
@ -105,17 +97,14 @@ static int of_flash_remove(struct platform_device *dev)
|
||||
dev_set_drvdata(&dev->dev, NULL);
|
||||
|
||||
if (info->cmtd != info->list[0].mtd) {
|
||||
del_mtd_device(info->cmtd);
|
||||
mtd_device_unregister(info->cmtd);
|
||||
mtd_concat_destroy(info->cmtd);
|
||||
}
|
||||
|
||||
if (info->cmtd) {
|
||||
if (OF_FLASH_PARTS(info)) {
|
||||
del_mtd_partitions(info->cmtd);
|
||||
if (OF_FLASH_PARTS(info))
|
||||
kfree(OF_FLASH_PARTS(info));
|
||||
} else {
|
||||
del_mtd_device(info->cmtd);
|
||||
}
|
||||
mtd_device_unregister(info->cmtd);
|
||||
}
|
||||
|
||||
for (i = 0; i < info->list_size; i++) {
|
||||
@ -172,7 +161,6 @@ static struct mtd_info * __devinit obsolete_probe(struct platform_device *dev,
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
/* When partitions are set we look for a linux,part-probe property which
|
||||
specifies the list of partition probers to use. If none is given then the
|
||||
default is use. These take precedence over other device tree
|
||||
@ -212,14 +200,11 @@ static void __devinit of_free_probes(const char **probes)
|
||||
if (probes != part_probe_types_def)
|
||||
kfree(probes);
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct of_device_id of_flash_match[];
|
||||
static int __devinit of_flash_probe(struct platform_device *dev)
|
||||
{
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
const char **part_probe_types;
|
||||
#endif
|
||||
const struct of_device_id *match;
|
||||
struct device_node *dp = dev->dev.of_node;
|
||||
struct resource res;
|
||||
@ -346,7 +331,6 @@ static int __devinit of_flash_probe(struct platform_device *dev)
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
part_probe_types = of_get_probes(dp);
|
||||
err = parse_mtd_partitions(info->cmtd, part_probe_types,
|
||||
&info->parts, 0);
|
||||
@ -356,13 +340,11 @@ static int __devinit of_flash_probe(struct platform_device *dev)
|
||||
}
|
||||
of_free_probes(part_probe_types);
|
||||
|
||||
#ifdef CONFIG_MTD_OF_PARTS
|
||||
if (err == 0) {
|
||||
err = of_mtd_parse_partitions(&dev->dev, dp, &info->parts);
|
||||
if (err < 0)
|
||||
goto err_out;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (err == 0) {
|
||||
err = parse_obsolete_partitions(dev, info, dp);
|
||||
@ -370,11 +352,7 @@ static int __devinit of_flash_probe(struct platform_device *dev)
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
if (err > 0)
|
||||
add_mtd_partitions(info->cmtd, info->parts, err);
|
||||
else
|
||||
#endif
|
||||
add_mtd_device(info->cmtd);
|
||||
mtd_device_register(info->cmtd, info->parts, err);
|
||||
|
||||
kfree(mtd_list);
|
||||
|
||||
|
@ -94,14 +94,11 @@ static int platram_remove(struct platform_device *pdev)
|
||||
return 0;
|
||||
|
||||
if (info->mtd) {
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
mtd_device_unregister(info->mtd);
|
||||
if (info->partitions) {
|
||||
del_mtd_partitions(info->mtd);
|
||||
if (info->free_partitions)
|
||||
kfree(info->partitions);
|
||||
}
|
||||
#endif
|
||||
del_mtd_device(info->mtd);
|
||||
map_destroy(info->mtd);
|
||||
}
|
||||
|
||||
@ -231,7 +228,6 @@ static int platram_probe(struct platform_device *pdev)
|
||||
/* check to see if there are any available partitions, or wether
|
||||
* to add this device whole */
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
if (!pdata->nr_partitions) {
|
||||
/* try to probe using the supplied probe type */
|
||||
if (pdata->probes) {
|
||||
@ -239,24 +235,22 @@ static int platram_probe(struct platform_device *pdev)
|
||||
&info->partitions, 0);
|
||||
info->free_partitions = 1;
|
||||
if (err > 0)
|
||||
err = add_mtd_partitions(info->mtd,
|
||||
err = mtd_device_register(info->mtd,
|
||||
info->partitions, err);
|
||||
}
|
||||
}
|
||||
/* use the static mapping */
|
||||
else
|
||||
err = add_mtd_partitions(info->mtd, pdata->partitions,
|
||||
pdata->nr_partitions);
|
||||
#endif /* CONFIG_MTD_PARTITIONS */
|
||||
|
||||
if (add_mtd_device(info->mtd)) {
|
||||
dev_err(&pdev->dev, "add_mtd_device() failed\n");
|
||||
err = -ENOMEM;
|
||||
}
|
||||
|
||||
err = mtd_device_register(info->mtd, pdata->partitions,
|
||||
pdata->nr_partitions);
|
||||
if (!err)
|
||||
dev_info(&pdev->dev, "registered mtd device\n");
|
||||
|
||||
/* add the whole device. */
|
||||
err = mtd_device_register(info->mtd, NULL, 0);
|
||||
if (err)
|
||||
dev_err(&pdev->dev, "failed to register the entire device\n");
|
||||
|
||||
return err;
|
||||
|
||||
exit_free:
|
||||
|
@ -173,7 +173,7 @@ static int __init init_msp_flash(void)
|
||||
msp_flash[i] = do_map_probe("cfi_probe", &msp_maps[i]);
|
||||
if (msp_flash[i]) {
|
||||
msp_flash[i]->owner = THIS_MODULE;
|
||||
add_mtd_partitions(msp_flash[i], msp_parts[i], pcnt);
|
||||
mtd_device_register(msp_flash[i], msp_parts[i], pcnt);
|
||||
} else {
|
||||
printk(KERN_ERR "map probe failed for flash\n");
|
||||
ret = -ENXIO;
|
||||
@ -188,7 +188,7 @@ static int __init init_msp_flash(void)
|
||||
|
||||
cleanup_loop:
|
||||
while (i--) {
|
||||
del_mtd_partitions(msp_flash[i]);
|
||||
mtd_device_unregister(msp_flash[i]);
|
||||
map_destroy(msp_flash[i]);
|
||||
kfree(msp_maps[i].name);
|
||||
iounmap(msp_maps[i].virt);
|
||||
@ -207,7 +207,7 @@ static void __exit cleanup_msp_flash(void)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < fcnt; i++) {
|
||||
del_mtd_partitions(msp_flash[i]);
|
||||
mtd_device_unregister(msp_flash[i]);
|
||||
map_destroy(msp_flash[i]);
|
||||
iounmap((void *)msp_maps[i].virt);
|
||||
|
||||
|
@ -104,23 +104,18 @@ static int __devinit pxa2xx_flash_probe(struct platform_device *pdev)
|
||||
}
|
||||
info->mtd->owner = THIS_MODULE;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
ret = parse_mtd_partitions(info->mtd, probes, &parts, 0);
|
||||
|
||||
if (ret > 0) {
|
||||
info->nr_parts = ret;
|
||||
info->parts = parts;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (info->nr_parts) {
|
||||
add_mtd_partitions(info->mtd, info->parts,
|
||||
info->nr_parts);
|
||||
} else {
|
||||
if (!info->nr_parts)
|
||||
printk("Registering %s as whole device\n",
|
||||
info->map.name);
|
||||
add_mtd_device(info->mtd);
|
||||
}
|
||||
|
||||
mtd_device_register(info->mtd, info->parts, info->nr_parts);
|
||||
|
||||
platform_set_drvdata(pdev, info);
|
||||
return 0;
|
||||
@ -132,12 +127,7 @@ static int __devexit pxa2xx_flash_remove(struct platform_device *dev)
|
||||
|
||||
platform_set_drvdata(dev, NULL);
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
if (info->nr_parts)
|
||||
del_mtd_partitions(info->mtd);
|
||||
else
|
||||
#endif
|
||||
del_mtd_device(info->mtd);
|
||||
mtd_device_unregister(info->mtd);
|
||||
|
||||
map_destroy(info->mtd);
|
||||
iounmap(info->map.virt);
|
||||
|
@ -25,10 +25,8 @@
|
||||
struct rbtx4939_flash_info {
|
||||
struct mtd_info *mtd;
|
||||
struct map_info map;
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
int nr_parts;
|
||||
struct mtd_partition *parts;
|
||||
#endif
|
||||
};
|
||||
|
||||
static int rbtx4939_flash_remove(struct platform_device *dev)
|
||||
@ -41,28 +39,18 @@ static int rbtx4939_flash_remove(struct platform_device *dev)
|
||||
platform_set_drvdata(dev, NULL);
|
||||
|
||||
if (info->mtd) {
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
struct rbtx4939_flash_data *pdata = dev->dev.platform_data;
|
||||
|
||||
if (info->nr_parts) {
|
||||
del_mtd_partitions(info->mtd);
|
||||
if (info->nr_parts)
|
||||
kfree(info->parts);
|
||||
} else if (pdata->nr_parts)
|
||||
del_mtd_partitions(info->mtd);
|
||||
else
|
||||
del_mtd_device(info->mtd);
|
||||
#else
|
||||
del_mtd_device(info->mtd);
|
||||
#endif
|
||||
mtd_device_unregister(info->mtd);
|
||||
map_destroy(info->mtd);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *rom_probe_types[] = { "cfi_probe", "jedec_probe", NULL };
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static const char *part_probe_types[] = { "cmdlinepart", NULL };
|
||||
#endif
|
||||
|
||||
static int rbtx4939_flash_probe(struct platform_device *dev)
|
||||
{
|
||||
@ -120,23 +108,21 @@ static int rbtx4939_flash_probe(struct platform_device *dev)
|
||||
if (err)
|
||||
goto err_out;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
err = parse_mtd_partitions(info->mtd, part_probe_types,
|
||||
&info->parts, 0);
|
||||
if (err > 0) {
|
||||
add_mtd_partitions(info->mtd, info->parts, err);
|
||||
mtd_device_register(info->mtd, info->parts, err);
|
||||
info->nr_parts = err;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (pdata->nr_parts) {
|
||||
pr_notice("Using rbtx4939 partition information\n");
|
||||
add_mtd_partitions(info->mtd, pdata->parts, pdata->nr_parts);
|
||||
mtd_device_register(info->mtd, pdata->parts, pdata->nr_parts);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
add_mtd_device(info->mtd);
|
||||
mtd_device_register(info->mtd, NULL, 0);
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
|
@ -36,7 +36,7 @@ static int __init init_rpxlite(void)
|
||||
mymtd = do_map_probe("cfi_probe", &rpxlite_map);
|
||||
if (mymtd) {
|
||||
mymtd->owner = THIS_MODULE;
|
||||
add_mtd_device(mymtd);
|
||||
mtd_device_register(mymtd, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ static int __init init_rpxlite(void)
|
||||
static void __exit cleanup_rpxlite(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_device(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (rpxlite_map.virt) {
|
||||
|
@ -226,12 +226,7 @@ static void sa1100_destroy(struct sa_info *info, struct flash_platform_data *pla
|
||||
int i;
|
||||
|
||||
if (info->mtd) {
|
||||
if (info->nr_parts == 0)
|
||||
del_mtd_device(info->mtd);
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
else
|
||||
del_mtd_partitions(info->mtd);
|
||||
#endif
|
||||
mtd_device_unregister(info->mtd);
|
||||
if (info->mtd != info->subdev[0].mtd)
|
||||
mtd_concat_destroy(info->mtd);
|
||||
}
|
||||
@ -363,28 +358,24 @@ static int __devinit sa1100_mtd_probe(struct platform_device *pdev)
|
||||
/*
|
||||
* Partition selection stuff.
|
||||
*/
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
nr_parts = parse_mtd_partitions(info->mtd, part_probes, &parts, 0);
|
||||
if (nr_parts > 0) {
|
||||
info->parts = parts;
|
||||
part_type = "dynamic";
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
} else {
|
||||
parts = plat->parts;
|
||||
nr_parts = plat->nr_parts;
|
||||
part_type = "static";
|
||||
}
|
||||
|
||||
if (nr_parts == 0) {
|
||||
if (nr_parts == 0)
|
||||
printk(KERN_NOTICE "SA1100 flash: no partition info "
|
||||
"available, registering whole flash\n");
|
||||
add_mtd_device(info->mtd);
|
||||
} else {
|
||||
else
|
||||
printk(KERN_NOTICE "SA1100 flash: using %s partition "
|
||||
"definition\n", part_type);
|
||||
add_mtd_partitions(info->mtd, parts, nr_parts);
|
||||
}
|
||||
|
||||
mtd_device_register(info->mtd, parts, nr_parts);
|
||||
|
||||
info->nr_parts = nr_parts;
|
||||
|
||||
|
@ -182,7 +182,7 @@ static struct mtd_info *all_mtd;
|
||||
static void cleanup_sbc_gxx(void)
|
||||
{
|
||||
if( all_mtd ) {
|
||||
del_mtd_partitions( all_mtd );
|
||||
mtd_device_unregister(all_mtd);
|
||||
map_destroy( all_mtd );
|
||||
}
|
||||
|
||||
@ -223,7 +223,7 @@ static int __init init_sbc_gxx(void)
|
||||
all_mtd->owner = THIS_MODULE;
|
||||
|
||||
/* Create MTD devices for each partition. */
|
||||
add_mtd_partitions(all_mtd, partition_info, NUM_PARTITIONS );
|
||||
mtd_device_register(all_mtd, partition_info, NUM_PARTITIONS);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -266,10 +266,10 @@ static int __init init_sc520cdp(void)
|
||||
/* Combine the two flash banks into a single MTD device & register it: */
|
||||
merged_mtd = mtd_concat_create(mymtd, 2, "SC520CDP Flash Banks #0 and #1");
|
||||
if(merged_mtd)
|
||||
add_mtd_device(merged_mtd);
|
||||
mtd_device_register(merged_mtd, NULL, 0);
|
||||
}
|
||||
if(devices_found == 3) /* register the third (DIL-Flash) device */
|
||||
add_mtd_device(mymtd[2]);
|
||||
mtd_device_register(mymtd[2], NULL, 0);
|
||||
return(devices_found ? 0 : -ENXIO);
|
||||
}
|
||||
|
||||
@ -278,11 +278,11 @@ static void __exit cleanup_sc520cdp(void)
|
||||
int i;
|
||||
|
||||
if (merged_mtd) {
|
||||
del_mtd_device(merged_mtd);
|
||||
mtd_device_unregister(merged_mtd);
|
||||
mtd_concat_destroy(merged_mtd);
|
||||
}
|
||||
if (mymtd[2])
|
||||
del_mtd_device(mymtd[2]);
|
||||
mtd_device_unregister(mymtd[2]);
|
||||
|
||||
for (i = 0; i < NUM_FLASH_BANKS; i++) {
|
||||
if (mymtd[i])
|
||||
|
@ -180,7 +180,7 @@ scb2_flash_probe(struct pci_dev *dev, const struct pci_device_id *ent)
|
||||
|
||||
scb2_mtd->owner = THIS_MODULE;
|
||||
if (scb2_fixup_mtd(scb2_mtd) < 0) {
|
||||
del_mtd_device(scb2_mtd);
|
||||
mtd_device_unregister(scb2_mtd);
|
||||
map_destroy(scb2_mtd);
|
||||
iounmap(scb2_ioaddr);
|
||||
if (!region_fail)
|
||||
@ -192,7 +192,7 @@ scb2_flash_probe(struct pci_dev *dev, const struct pci_device_id *ent)
|
||||
(unsigned long long)scb2_mtd->size,
|
||||
(unsigned long long)(SCB2_WINDOW - scb2_mtd->size));
|
||||
|
||||
add_mtd_device(scb2_mtd);
|
||||
mtd_device_register(scb2_mtd, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -207,7 +207,7 @@ scb2_flash_remove(struct pci_dev *dev)
|
||||
if (scb2_mtd->lock)
|
||||
scb2_mtd->lock(scb2_mtd, 0, scb2_mtd->size);
|
||||
|
||||
del_mtd_device(scb2_mtd);
|
||||
mtd_device_unregister(scb2_mtd);
|
||||
map_destroy(scb2_mtd);
|
||||
|
||||
iounmap(scb2_ioaddr);
|
||||
|
@ -44,7 +44,6 @@ static struct resource docmem = {
|
||||
|
||||
static struct mtd_info *mymtd;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static struct mtd_partition partition_info[] = {
|
||||
{
|
||||
.name = "DOCCS Boot kernel",
|
||||
@ -68,8 +67,6 @@ static struct mtd_partition partition_info[] = {
|
||||
},
|
||||
};
|
||||
#define NUM_PARTITIONS ARRAY_SIZE(partition_info)
|
||||
#endif
|
||||
|
||||
|
||||
static struct map_info scx200_docflash_map = {
|
||||
.name = "NatSemi SCx200 DOCCS Flash",
|
||||
@ -198,24 +195,17 @@ static int __init init_scx200_docflash(void)
|
||||
|
||||
mymtd->owner = THIS_MODULE;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
partition_info[3].offset = mymtd->size-partition_info[3].size;
|
||||
partition_info[2].size = partition_info[3].offset-partition_info[2].offset;
|
||||
add_mtd_partitions(mymtd, partition_info, NUM_PARTITIONS);
|
||||
#else
|
||||
add_mtd_device(mymtd);
|
||||
#endif
|
||||
mtd_device_register(mymtd, partition_info, NUM_PARTITIONS);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit cleanup_scx200_docflash(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
del_mtd_partitions(mymtd);
|
||||
#else
|
||||
del_mtd_device(mymtd);
|
||||
#endif
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
if (scx200_docflash_map.virt) {
|
||||
|
@ -89,7 +89,7 @@ static int __init init_soleng_maps(void)
|
||||
eprom_mtd = do_map_probe("map_rom", &soleng_eprom_map);
|
||||
if (eprom_mtd) {
|
||||
eprom_mtd->owner = THIS_MODULE;
|
||||
add_mtd_device(eprom_mtd);
|
||||
mtd_device_register(eprom_mtd, NULL, 0);
|
||||
}
|
||||
|
||||
nr_parts = parse_mtd_partitions(flash_mtd, probes, &parsed_parts, 0);
|
||||
@ -104,9 +104,9 @@ static int __init init_soleng_maps(void)
|
||||
#endif /* CONFIG_MTD_SUPERH_RESERVE */
|
||||
|
||||
if (nr_parts > 0)
|
||||
add_mtd_partitions(flash_mtd, parsed_parts, nr_parts);
|
||||
mtd_device_register(flash_mtd, parsed_parts, nr_parts);
|
||||
else
|
||||
add_mtd_device(flash_mtd);
|
||||
mtd_device_register(flash_mtd, NULL, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -114,14 +114,14 @@ static int __init init_soleng_maps(void)
|
||||
static void __exit cleanup_soleng_maps(void)
|
||||
{
|
||||
if (eprom_mtd) {
|
||||
del_mtd_device(eprom_mtd);
|
||||
mtd_device_unregister(eprom_mtd);
|
||||
map_destroy(eprom_mtd);
|
||||
}
|
||||
|
||||
if (parsed_parts)
|
||||
del_mtd_partitions(flash_mtd);
|
||||
mtd_device_unregister(flash_mtd);
|
||||
else
|
||||
del_mtd_device(flash_mtd);
|
||||
mtd_device_unregister(flash_mtd);
|
||||
map_destroy(flash_mtd);
|
||||
}
|
||||
|
||||
|
@ -101,7 +101,7 @@ int uflash_devinit(struct platform_device *op, struct device_node *dp)
|
||||
|
||||
up->mtd->owner = THIS_MODULE;
|
||||
|
||||
add_mtd_device(up->mtd);
|
||||
mtd_device_register(up->mtd, NULL, 0);
|
||||
|
||||
dev_set_drvdata(&op->dev, up);
|
||||
|
||||
@ -126,7 +126,7 @@ static int __devexit uflash_remove(struct platform_device *op)
|
||||
struct uflash_dev *up = dev_get_drvdata(&op->dev);
|
||||
|
||||
if (up->mtd) {
|
||||
del_mtd_device(up->mtd);
|
||||
mtd_device_unregister(up->mtd);
|
||||
map_destroy(up->mtd);
|
||||
}
|
||||
if (up->map.virt) {
|
||||
|
@ -62,7 +62,6 @@ static void __iomem *start_scan_addr;
|
||||
* "struct map_desc *_io_desc" for the corresponding machine.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
/* Currently, TQM8xxL has up to 8MiB flash */
|
||||
static unsigned long tqm8xxl_max_flash_size = 0x00800000;
|
||||
|
||||
@ -107,7 +106,6 @@ static struct mtd_partition tqm8xxl_fs_partitions[] = {
|
||||
//.size = MTDPART_SIZ_FULL,
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
static int __init init_tqm_mtd(void)
|
||||
{
|
||||
@ -188,7 +186,6 @@ static int __init init_tqm_mtd(void)
|
||||
goto error_mem;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
/*
|
||||
* Select Static partition definitions
|
||||
*/
|
||||
@ -201,21 +198,14 @@ static int __init init_tqm_mtd(void)
|
||||
part_banks[1].nums = ARRAY_SIZE(tqm8xxl_fs_partitions);
|
||||
|
||||
for(idx = 0; idx < num_banks ; idx++) {
|
||||
if (part_banks[idx].nums == 0) {
|
||||
if (part_banks[idx].nums == 0)
|
||||
printk(KERN_NOTICE "TQM flash%d: no partition info available, registering whole flash at once\n", idx);
|
||||
add_mtd_device(mtd_banks[idx]);
|
||||
} else {
|
||||
else
|
||||
printk(KERN_NOTICE "TQM flash%d: Using %s partition definition\n",
|
||||
idx, part_banks[idx].type);
|
||||
add_mtd_partitions(mtd_banks[idx], part_banks[idx].mtd_part,
|
||||
part_banks[idx].nums);
|
||||
}
|
||||
mtd_device_register(mtd_banks[idx], part_banks[idx].mtd_part,
|
||||
part_banks[idx].nums);
|
||||
}
|
||||
#else
|
||||
printk(KERN_NOTICE "TQM flash: registering %d whole flash banks at once\n", num_banks);
|
||||
for(idx = 0 ; idx < num_banks ; idx++)
|
||||
add_mtd_device(mtd_banks[idx]);
|
||||
#endif
|
||||
return 0;
|
||||
error_mem:
|
||||
for(idx = 0 ; idx < FLASH_BANK_MAX ; idx++) {
|
||||
@ -237,7 +227,7 @@ static void __exit cleanup_tqm_mtd(void)
|
||||
for(idx = 0 ; idx < num_banks ; idx++) {
|
||||
/* destroy mtd_info previously allocated */
|
||||
if (mtd_banks[idx]) {
|
||||
del_mtd_partitions(mtd_banks[idx]);
|
||||
mtd_device_unregister(mtd_banks[idx]);
|
||||
map_destroy(mtd_banks[idx]);
|
||||
}
|
||||
/* release map_info not used anymore */
|
||||
|
@ -89,7 +89,7 @@ static int __init init_ts5500_map(void)
|
||||
}
|
||||
|
||||
mymtd->owner = THIS_MODULE;
|
||||
add_mtd_partitions(mymtd, ts5500_partitions, NUM_PARTITIONS);
|
||||
mtd_device_register(mymtd, ts5500_partitions, NUM_PARTITIONS);
|
||||
|
||||
return 0;
|
||||
|
||||
@ -102,7 +102,7 @@ err2:
|
||||
static void __exit cleanup_ts5500_map(void)
|
||||
{
|
||||
if (mymtd) {
|
||||
del_mtd_partitions(mymtd);
|
||||
mtd_device_unregister(mymtd);
|
||||
map_destroy(mymtd);
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ static void __exit cleanup_tsunami_flash(void)
|
||||
struct mtd_info *mtd;
|
||||
mtd = tsunami_flash_mtd;
|
||||
if (mtd) {
|
||||
del_mtd_device(mtd);
|
||||
mtd_device_unregister(mtd);
|
||||
map_destroy(mtd);
|
||||
}
|
||||
tsunami_flash_mtd = 0;
|
||||
@ -97,7 +97,7 @@ static int __init init_tsunami_flash(void)
|
||||
}
|
||||
if (tsunami_flash_mtd) {
|
||||
tsunami_flash_mtd->owner = THIS_MODULE;
|
||||
add_mtd_device(tsunami_flash_mtd);
|
||||
mtd_device_register(tsunami_flash_mtd, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
return -ENXIO;
|
||||
|
@ -89,11 +89,7 @@ static int __init uclinux_mtd_init(void)
|
||||
mtd->priv = mapp;
|
||||
|
||||
uclinux_ram_mtdinfo = mtd;
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
add_mtd_partitions(mtd, uclinux_romfs, NUM_PARTITIONS);
|
||||
#else
|
||||
add_mtd_device(mtd);
|
||||
#endif
|
||||
mtd_device_register(mtd, uclinux_romfs, NUM_PARTITIONS);
|
||||
|
||||
return(0);
|
||||
}
|
||||
@ -103,11 +99,7 @@ static int __init uclinux_mtd_init(void)
|
||||
static void __exit uclinux_mtd_cleanup(void)
|
||||
{
|
||||
if (uclinux_ram_mtdinfo) {
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
del_mtd_partitions(uclinux_ram_mtdinfo);
|
||||
#else
|
||||
del_mtd_device(uclinux_ram_mtdinfo);
|
||||
#endif
|
||||
mtd_device_unregister(uclinux_ram_mtdinfo);
|
||||
map_destroy(uclinux_ram_mtdinfo);
|
||||
uclinux_ram_mtdinfo = NULL;
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ static void __exit cleanup_vmax301(void)
|
||||
|
||||
for (i=0; i<2; i++) {
|
||||
if (vmax_mtd[i]) {
|
||||
del_mtd_device(vmax_mtd[i]);
|
||||
mtd_device_unregister(vmax_mtd[i]);
|
||||
map_destroy(vmax_mtd[i]);
|
||||
}
|
||||
}
|
||||
@ -176,7 +176,7 @@ static int __init init_vmax301(void)
|
||||
vmax_mtd[i] = do_map_probe("map_rom", &vmax_map[i]);
|
||||
if (vmax_mtd[i]) {
|
||||
vmax_mtd[i]->owner = THIS_MODULE;
|
||||
add_mtd_device(vmax_mtd[i]);
|
||||
mtd_device_register(vmax_mtd[i], NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -563,7 +563,7 @@ static void vmu_queryblocks(struct mapleq *mq)
|
||||
goto fail_cache_create;
|
||||
part_cur->pcache = pcache;
|
||||
|
||||
error = add_mtd_device(mtd_cur);
|
||||
error = mtd_device_register(mtd_cur, NULL, 0);
|
||||
if (error)
|
||||
goto fail_mtd_register;
|
||||
|
||||
@ -709,7 +709,7 @@ static void __devexit vmu_disconnect(struct maple_device *mdev)
|
||||
for (x = 0; x < card->partitions; x++) {
|
||||
mpart = ((card->mtd)[x]).priv;
|
||||
mpart->mdev = NULL;
|
||||
del_mtd_device(&((card->mtd)[x]));
|
||||
mtd_device_unregister(&((card->mtd)[x]));
|
||||
kfree(((card->parts)[x]).name);
|
||||
}
|
||||
kfree(card->parts);
|
||||
|
@ -132,17 +132,20 @@ static int __init init_sbc82xx_flash(void)
|
||||
nr_parts = parse_mtd_partitions(sbcmtd[i], part_probes,
|
||||
&sbcmtd_parts[i], 0);
|
||||
if (nr_parts > 0) {
|
||||
add_mtd_partitions (sbcmtd[i], sbcmtd_parts[i], nr_parts);
|
||||
mtd_device_register(sbcmtd[i], sbcmtd_parts[i],
|
||||
nr_parts);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* No partitioning detected. Use default */
|
||||
if (i == 2) {
|
||||
add_mtd_device(sbcmtd[i]);
|
||||
mtd_device_register(sbcmtd[i], NULL, 0);
|
||||
} else if (i == bigflash) {
|
||||
add_mtd_partitions (sbcmtd[i], bigflash_parts, ARRAY_SIZE(bigflash_parts));
|
||||
mtd_device_register(sbcmtd[i], bigflash_parts,
|
||||
ARRAY_SIZE(bigflash_parts));
|
||||
} else {
|
||||
add_mtd_partitions (sbcmtd[i], smallflash_parts, ARRAY_SIZE(smallflash_parts));
|
||||
mtd_device_register(sbcmtd[i], smallflash_parts,
|
||||
ARRAY_SIZE(smallflash_parts));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -157,9 +160,9 @@ static void __exit cleanup_sbc82xx_flash(void)
|
||||
continue;
|
||||
|
||||
if (i<2 || sbcmtd_parts[i])
|
||||
del_mtd_partitions(sbcmtd[i]);
|
||||
mtd_device_unregister(sbcmtd[i]);
|
||||
else
|
||||
del_mtd_device(sbcmtd[i]);
|
||||
mtd_device_unregister(sbcmtd[i]);
|
||||
|
||||
kfree(sbcmtd_parts[i]);
|
||||
map_destroy(sbcmtd[i]);
|
||||
|
@ -221,15 +221,33 @@ static int blktrans_open(struct block_device *bdev, fmode_t mode)
|
||||
kref_get(&dev->ref);
|
||||
__module_get(dev->tr->owner);
|
||||
|
||||
if (dev->mtd) {
|
||||
ret = dev->tr->open ? dev->tr->open(dev) : 0;
|
||||
__get_mtd_device(dev->mtd);
|
||||
if (!dev->mtd)
|
||||
goto unlock;
|
||||
|
||||
if (dev->tr->open) {
|
||||
ret = dev->tr->open(dev);
|
||||
if (ret)
|
||||
goto error_put;
|
||||
}
|
||||
|
||||
ret = __get_mtd_device(dev->mtd);
|
||||
if (ret)
|
||||
goto error_release;
|
||||
|
||||
unlock:
|
||||
mutex_unlock(&dev->lock);
|
||||
blktrans_dev_put(dev);
|
||||
return ret;
|
||||
|
||||
error_release:
|
||||
if (dev->tr->release)
|
||||
dev->tr->release(dev);
|
||||
error_put:
|
||||
module_put(dev->tr->owner);
|
||||
kref_put(&dev->ref, blktrans_dev_release);
|
||||
mutex_unlock(&dev->lock);
|
||||
blktrans_dev_put(dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int blktrans_release(struct gendisk *disk, fmode_t mode)
|
||||
|
@ -166,10 +166,23 @@ static int mtd_close(struct inode *inode, struct file *file)
|
||||
return 0;
|
||||
} /* mtd_close */
|
||||
|
||||
/* FIXME: This _really_ needs to die. In 2.5, we should lock the
|
||||
userspace buffer down and use it directly with readv/writev.
|
||||
*/
|
||||
#define MAX_KMALLOC_SIZE 0x20000
|
||||
/* Back in June 2001, dwmw2 wrote:
|
||||
*
|
||||
* FIXME: This _really_ needs to die. In 2.5, we should lock the
|
||||
* userspace buffer down and use it directly with readv/writev.
|
||||
*
|
||||
* The implementation below, using mtd_kmalloc_up_to, mitigates
|
||||
* allocation failures when the system is under low-memory situations
|
||||
* or if memory is highly fragmented at the cost of reducing the
|
||||
* performance of the requested transfer due to a smaller buffer size.
|
||||
*
|
||||
* A more complex but more memory-efficient implementation based on
|
||||
* get_user_pages and iovecs to cover extents of those pages is a
|
||||
* longer-term goal, as intimated by dwmw2 above. However, for the
|
||||
* write case, this requires yet more complex head and tail transfer
|
||||
* handling when those head and tail offsets and sizes are such that
|
||||
* alignment requirements are not met in the NAND subdriver.
|
||||
*/
|
||||
|
||||
static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t *ppos)
|
||||
{
|
||||
@ -179,6 +192,7 @@ static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t
|
||||
size_t total_retlen=0;
|
||||
int ret=0;
|
||||
int len;
|
||||
size_t size = count;
|
||||
char *kbuf;
|
||||
|
||||
DEBUG(MTD_DEBUG_LEVEL0,"MTD_read\n");
|
||||
@ -189,23 +203,12 @@ static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t
|
||||
if (!count)
|
||||
return 0;
|
||||
|
||||
/* FIXME: Use kiovec in 2.5 to lock down the user's buffers
|
||||
and pass them directly to the MTD functions */
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
kbuf=kmalloc(MAX_KMALLOC_SIZE, GFP_KERNEL);
|
||||
else
|
||||
kbuf=kmalloc(count, GFP_KERNEL);
|
||||
|
||||
kbuf = mtd_kmalloc_up_to(mtd, &size);
|
||||
if (!kbuf)
|
||||
return -ENOMEM;
|
||||
|
||||
while (count) {
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
len = MAX_KMALLOC_SIZE;
|
||||
else
|
||||
len = count;
|
||||
len = min_t(size_t, count, size);
|
||||
|
||||
switch (mfi->mode) {
|
||||
case MTD_MODE_OTP_FACTORY:
|
||||
@ -268,6 +271,7 @@ static ssize_t mtd_write(struct file *file, const char __user *buf, size_t count
|
||||
{
|
||||
struct mtd_file_info *mfi = file->private_data;
|
||||
struct mtd_info *mtd = mfi->mtd;
|
||||
size_t size = count;
|
||||
char *kbuf;
|
||||
size_t retlen;
|
||||
size_t total_retlen=0;
|
||||
@ -285,20 +289,12 @@ static ssize_t mtd_write(struct file *file, const char __user *buf, size_t count
|
||||
if (!count)
|
||||
return 0;
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
kbuf=kmalloc(MAX_KMALLOC_SIZE, GFP_KERNEL);
|
||||
else
|
||||
kbuf=kmalloc(count, GFP_KERNEL);
|
||||
|
||||
kbuf = mtd_kmalloc_up_to(mtd, &size);
|
||||
if (!kbuf)
|
||||
return -ENOMEM;
|
||||
|
||||
while (count) {
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
len = MAX_KMALLOC_SIZE;
|
||||
else
|
||||
len = count;
|
||||
len = min_t(size_t, count, size);
|
||||
|
||||
if (copy_from_user(kbuf, buf, len)) {
|
||||
kfree(kbuf);
|
||||
@ -512,7 +508,6 @@ static int shrink_ecclayout(const struct nand_ecclayout *from,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
static int mtd_blkpg_ioctl(struct mtd_info *mtd,
|
||||
struct blkpg_ioctl_arg __user *arg)
|
||||
{
|
||||
@ -548,8 +543,6 @@ static int mtd_blkpg_ioctl(struct mtd_info *mtd,
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static int mtd_ioctl(struct file *file, u_int cmd, u_long arg)
|
||||
{
|
||||
@ -941,7 +934,6 @@ static int mtd_ioctl(struct file *file, u_int cmd, u_long arg)
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
case BLKPG:
|
||||
{
|
||||
ret = mtd_blkpg_ioctl(mtd,
|
||||
@ -955,7 +947,6 @@ static int mtd_ioctl(struct file *file, u_int cmd, u_long arg)
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
ret = -ENOTTY;
|
||||
|
@ -319,7 +319,7 @@ concat_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops)
|
||||
if (!(mtd->flags & MTD_WRITEABLE))
|
||||
return -EROFS;
|
||||
|
||||
ops->retlen = 0;
|
||||
ops->retlen = ops->oobretlen = 0;
|
||||
|
||||
for (i = 0; i < concat->num_subdev; i++) {
|
||||
struct mtd_info *subdev = concat->subdev[i];
|
||||
@ -334,7 +334,7 @@ concat_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops)
|
||||
devops.len = subdev->size - to;
|
||||
|
||||
err = subdev->write_oob(subdev, to, &devops);
|
||||
ops->retlen += devops.retlen;
|
||||
ops->retlen += devops.oobretlen;
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ptrace.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/major.h>
|
||||
@ -37,6 +38,7 @@
|
||||
#include <linux/gfp.h>
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include "mtdcore.h"
|
||||
/*
|
||||
@ -391,7 +393,7 @@ fail_locked:
|
||||
* if the requested device does not appear to be present in the list.
|
||||
*/
|
||||
|
||||
int del_mtd_device (struct mtd_info *mtd)
|
||||
int del_mtd_device(struct mtd_info *mtd)
|
||||
{
|
||||
int ret;
|
||||
struct mtd_notifier *not;
|
||||
@ -426,6 +428,50 @@ out_error:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* mtd_device_register - register an MTD device.
|
||||
*
|
||||
* @master: the MTD device to register
|
||||
* @parts: the partitions to register - only valid if nr_parts > 0
|
||||
* @nr_parts: the number of partitions in parts. If zero then the full MTD
|
||||
* device is registered
|
||||
*
|
||||
* Register an MTD device with the system and optionally, a number of
|
||||
* partitions. If nr_parts is 0 then the whole device is registered, otherwise
|
||||
* only the partitions are registered. To register both the full device *and*
|
||||
* the partitions, call mtd_device_register() twice, once with nr_parts == 0
|
||||
* and once equal to the number of partitions.
|
||||
*/
|
||||
int mtd_device_register(struct mtd_info *master,
|
||||
const struct mtd_partition *parts,
|
||||
int nr_parts)
|
||||
{
|
||||
return parts ? add_mtd_partitions(master, parts, nr_parts) :
|
||||
add_mtd_device(master);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtd_device_register);
|
||||
|
||||
/**
|
||||
* mtd_device_unregister - unregister an existing MTD device.
|
||||
*
|
||||
* @master: the MTD device to unregister. This will unregister both the master
|
||||
* and any partitions if registered.
|
||||
*/
|
||||
int mtd_device_unregister(struct mtd_info *master)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = del_mtd_partitions(master);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (!device_is_registered(&master->dev))
|
||||
return 0;
|
||||
|
||||
return del_mtd_device(master);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mtd_device_unregister);
|
||||
|
||||
/**
|
||||
* register_mtd_user - register a 'user' of MTD devices.
|
||||
* @new: pointer to notifier info structure
|
||||
@ -443,7 +489,7 @@ void register_mtd_user (struct mtd_notifier *new)
|
||||
|
||||
list_add(&new->list, &mtd_notifiers);
|
||||
|
||||
__module_get(THIS_MODULE);
|
||||
__module_get(THIS_MODULE);
|
||||
|
||||
mtd_for_each_device(mtd)
|
||||
new->add(mtd);
|
||||
@ -532,7 +578,6 @@ int __get_mtd_device(struct mtd_info *mtd)
|
||||
return -ENODEV;
|
||||
|
||||
if (mtd->get_device) {
|
||||
|
||||
err = mtd->get_device(mtd);
|
||||
|
||||
if (err) {
|
||||
@ -570,21 +615,13 @@ struct mtd_info *get_mtd_device_nm(const char *name)
|
||||
if (!mtd)
|
||||
goto out_unlock;
|
||||
|
||||
if (!try_module_get(mtd->owner))
|
||||
err = __get_mtd_device(mtd);
|
||||
if (err)
|
||||
goto out_unlock;
|
||||
|
||||
if (mtd->get_device) {
|
||||
err = mtd->get_device(mtd);
|
||||
if (err)
|
||||
goto out_put;
|
||||
}
|
||||
|
||||
mtd->usecount++;
|
||||
mutex_unlock(&mtd_table_mutex);
|
||||
return mtd;
|
||||
|
||||
out_put:
|
||||
module_put(mtd->owner);
|
||||
out_unlock:
|
||||
mutex_unlock(&mtd_table_mutex);
|
||||
return ERR_PTR(err);
|
||||
@ -638,8 +675,54 @@ int default_mtd_writev(struct mtd_info *mtd, const struct kvec *vecs,
|
||||
return ret;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(add_mtd_device);
|
||||
EXPORT_SYMBOL_GPL(del_mtd_device);
|
||||
/**
|
||||
* mtd_kmalloc_up_to - allocate a contiguous buffer up to the specified size
|
||||
* @size: A pointer to the ideal or maximum size of the allocation. Points
|
||||
* to the actual allocation size on success.
|
||||
*
|
||||
* This routine attempts to allocate a contiguous kernel buffer up to
|
||||
* the specified size, backing off the size of the request exponentially
|
||||
* until the request succeeds or until the allocation size falls below
|
||||
* the system page size. This attempts to make sure it does not adversely
|
||||
* impact system performance, so when allocating more than one page, we
|
||||
* ask the memory allocator to avoid re-trying, swapping, writing back
|
||||
* or performing I/O.
|
||||
*
|
||||
* Note, this function also makes sure that the allocated buffer is aligned to
|
||||
* the MTD device's min. I/O unit, i.e. the "mtd->writesize" value.
|
||||
*
|
||||
* This is called, for example by mtd_{read,write} and jffs2_scan_medium,
|
||||
* to handle smaller (i.e. degraded) buffer allocations under low- or
|
||||
* fragmented-memory situations where such reduced allocations, from a
|
||||
* requested ideal, are allowed.
|
||||
*
|
||||
* Returns a pointer to the allocated buffer on success; otherwise, NULL.
|
||||
*/
|
||||
void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size)
|
||||
{
|
||||
gfp_t flags = __GFP_NOWARN | __GFP_WAIT |
|
||||
__GFP_NORETRY | __GFP_NO_KSWAPD;
|
||||
size_t min_alloc = max_t(size_t, mtd->writesize, PAGE_SIZE);
|
||||
void *kbuf;
|
||||
|
||||
*size = min_t(size_t, *size, KMALLOC_MAX_SIZE);
|
||||
|
||||
while (*size > min_alloc) {
|
||||
kbuf = kmalloc(*size, flags);
|
||||
if (kbuf)
|
||||
return kbuf;
|
||||
|
||||
*size >>= 1;
|
||||
*size = ALIGN(*size, mtd->writesize);
|
||||
}
|
||||
|
||||
/*
|
||||
* For the last resort allocation allow 'kmalloc()' to do all sorts of
|
||||
* things (write-back, dropping caches, etc) by using GFP_KERNEL.
|
||||
*/
|
||||
return kmalloc(*size, GFP_KERNEL);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(get_mtd_device);
|
||||
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
||||
EXPORT_SYMBOL_GPL(__get_mtd_device);
|
||||
@ -648,6 +731,7 @@ EXPORT_SYMBOL_GPL(__put_mtd_device);
|
||||
EXPORT_SYMBOL_GPL(register_mtd_user);
|
||||
EXPORT_SYMBOL_GPL(unregister_mtd_user);
|
||||
EXPORT_SYMBOL_GPL(default_mtd_writev);
|
||||
EXPORT_SYMBOL_GPL(mtd_kmalloc_up_to);
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
|
||||
@ -656,44 +740,32 @@ EXPORT_SYMBOL_GPL(default_mtd_writev);
|
||||
|
||||
static struct proc_dir_entry *proc_mtd;
|
||||
|
||||
static inline int mtd_proc_info(char *buf, struct mtd_info *this)
|
||||
{
|
||||
return sprintf(buf, "mtd%d: %8.8llx %8.8x \"%s\"\n", this->index,
|
||||
(unsigned long long)this->size,
|
||||
this->erasesize, this->name);
|
||||
}
|
||||
|
||||
static int mtd_read_proc (char *page, char **start, off_t off, int count,
|
||||
int *eof, void *data_unused)
|
||||
static int mtd_proc_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct mtd_info *mtd;
|
||||
int len, l;
|
||||
off_t begin = 0;
|
||||
|
||||
seq_puts(m, "dev: size erasesize name\n");
|
||||
mutex_lock(&mtd_table_mutex);
|
||||
|
||||
len = sprintf(page, "dev: size erasesize name\n");
|
||||
mtd_for_each_device(mtd) {
|
||||
l = mtd_proc_info(page + len, mtd);
|
||||
len += l;
|
||||
if (len+begin > off+count)
|
||||
goto done;
|
||||
if (len+begin < off) {
|
||||
begin += len;
|
||||
len = 0;
|
||||
}
|
||||
}
|
||||
|
||||
*eof = 1;
|
||||
|
||||
done:
|
||||
seq_printf(m, "mtd%d: %8.8llx %8.8x \"%s\"\n",
|
||||
mtd->index, (unsigned long long)mtd->size,
|
||||
mtd->erasesize, mtd->name);
|
||||
}
|
||||
mutex_unlock(&mtd_table_mutex);
|
||||
if (off >= len+begin)
|
||||
return 0;
|
||||
*start = page + (off-begin);
|
||||
return ((count < begin+len-off) ? count : begin+len-off);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mtd_proc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, mtd_proc_show, NULL);
|
||||
}
|
||||
|
||||
static const struct file_operations mtd_proc_ops = {
|
||||
.open = mtd_proc_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = single_release,
|
||||
};
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
|
||||
/*====================================================================*/
|
||||
@ -734,8 +806,7 @@ static int __init init_mtd(void)
|
||||
goto err_bdi3;
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
if ((proc_mtd = create_proc_entry( "mtd", 0, NULL )))
|
||||
proc_mtd->read_proc = mtd_read_proc;
|
||||
proc_mtd = proc_create("mtd", 0, NULL, &mtd_proc_ops);
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
return 0;
|
||||
|
||||
@ -753,7 +824,7 @@ err_reg:
|
||||
static void __exit cleanup_mtd(void)
|
||||
{
|
||||
#ifdef CONFIG_PROC_FS
|
||||
if (proc_mtd)
|
||||
if (proc_mtd)
|
||||
remove_proc_entry( "mtd", NULL);
|
||||
#endif /* CONFIG_PROC_FS */
|
||||
class_unregister(&mtd_class);
|
||||
|
@ -10,6 +10,12 @@
|
||||
extern struct mutex mtd_table_mutex;
|
||||
extern struct mtd_info *__mtd_next_device(int i);
|
||||
|
||||
extern int add_mtd_device(struct mtd_info *mtd);
|
||||
extern int del_mtd_device(struct mtd_info *mtd);
|
||||
extern int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *,
|
||||
int);
|
||||
extern int del_mtd_partitions(struct mtd_info *);
|
||||
|
||||
#define mtd_for_each_device(mtd) \
|
||||
for ((mtd) = __mtd_next_device(0); \
|
||||
(mtd) != NULL; \
|
||||
|
@ -31,6 +31,8 @@
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#include "mtdcore.h"
|
||||
|
||||
/* Our partition linked list */
|
||||
static LIST_HEAD(mtd_partitions);
|
||||
static DEFINE_MUTEX(mtd_partitions_mutex);
|
||||
@ -376,7 +378,6 @@ int del_mtd_partitions(struct mtd_info *master)
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(del_mtd_partitions);
|
||||
|
||||
static struct mtd_part *allocate_partition(struct mtd_info *master,
|
||||
const struct mtd_partition *part, int partno,
|
||||
@ -671,7 +672,6 @@ int add_mtd_partitions(struct mtd_info *master,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(add_mtd_partitions);
|
||||
|
||||
static DEFINE_SPINLOCK(part_parser_lock);
|
||||
static LIST_HEAD(part_parsers);
|
||||
@ -722,11 +722,8 @@ int parse_mtd_partitions(struct mtd_info *master, const char **types,
|
||||
parser = get_partition_parser(*types);
|
||||
if (!parser && !request_module("%s", *types))
|
||||
parser = get_partition_parser(*types);
|
||||
if (!parser) {
|
||||
printk(KERN_NOTICE "%s partition parsing not available\n",
|
||||
*types);
|
||||
if (!parser)
|
||||
continue;
|
||||
}
|
||||
ret = (*parser->parse_fn)(master, pparts, origin);
|
||||
if (ret > 0) {
|
||||
printk(KERN_NOTICE "%d %s partitions found on MTD device %s\n",
|
||||
|
@ -1450,7 +1450,13 @@ static void mtdswap_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)
|
||||
}
|
||||
|
||||
oinfo = mtd->ecclayout;
|
||||
if (!mtd->oobsize || !oinfo || oinfo->oobavail < MTDSWAP_OOBSIZE) {
|
||||
if (!oinfo) {
|
||||
printk(KERN_ERR "%s: mtd%d does not have OOB\n",
|
||||
MTDSWAP_PREFIX, mtd->index);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mtd->oobsize || oinfo->oobavail < MTDSWAP_OOBSIZE) {
|
||||
printk(KERN_ERR "%s: Not enough free bytes in OOB, "
|
||||
"%d available, %zu needed.\n",
|
||||
MTDSWAP_PREFIX, oinfo->oobavail, MTDSWAP_OOBSIZE);
|
||||
|
@ -92,7 +92,7 @@ config MTD_NAND_EDB7312
|
||||
|
||||
config MTD_NAND_H1900
|
||||
tristate "iPAQ H1900 flash"
|
||||
depends on ARCH_PXA && MTD_PARTITIONS
|
||||
depends on ARCH_PXA
|
||||
help
|
||||
This enables the driver for the iPAQ h1900 flash.
|
||||
|
||||
@ -419,7 +419,6 @@ config MTD_NAND_TMIO
|
||||
|
||||
config MTD_NAND_NANDSIM
|
||||
tristate "Support for NAND Flash Simulator"
|
||||
depends on MTD_PARTITIONS
|
||||
help
|
||||
The simulator may simulate various NAND flash chips for the
|
||||
MTD nand layer.
|
||||
@ -513,7 +512,7 @@ config MTD_NAND_SOCRATES
|
||||
|
||||
config MTD_NAND_NUC900
|
||||
tristate "Support for NAND on Nuvoton NUC9xx/w90p910 evaluation boards."
|
||||
depends on ARCH_W90X900 && MTD_PARTITIONS
|
||||
depends on ARCH_W90X900
|
||||
help
|
||||
This enables the driver for the NAND Flash on evaluation board based
|
||||
on w90p910 / NUC9xx.
|
||||
|
@ -120,7 +120,7 @@ static void alauda_delete(struct kref *kref)
|
||||
struct alauda *al = container_of(kref, struct alauda, kref);
|
||||
|
||||
if (al->mtd) {
|
||||
del_mtd_device(al->mtd);
|
||||
mtd_device_unregister(al->mtd);
|
||||
kfree(al->mtd);
|
||||
}
|
||||
usb_put_dev(al->dev);
|
||||
@ -592,7 +592,7 @@ static int alauda_init_media(struct alauda *al)
|
||||
mtd->priv = al;
|
||||
mtd->owner = THIS_MODULE;
|
||||
|
||||
err = add_mtd_device(mtd);
|
||||
err = mtd_device_register(mtd, NULL, 0);
|
||||
if (err) {
|
||||
err = -ENFILE;
|
||||
goto error;
|
||||
|
@ -235,8 +235,8 @@ static int __devinit ams_delta_init(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
/* Register the partitions */
|
||||
add_mtd_partitions(ams_delta_mtd, partition_info,
|
||||
ARRAY_SIZE(partition_info));
|
||||
mtd_device_register(ams_delta_mtd, partition_info,
|
||||
ARRAY_SIZE(partition_info));
|
||||
|
||||
goto out;
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
@ -494,11 +495,8 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
|
||||
struct resource *regs;
|
||||
struct resource *mem;
|
||||
int res;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
struct mtd_partition *partitions = NULL;
|
||||
int num_partitions = 0;
|
||||
#endif
|
||||
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!mem) {
|
||||
@ -656,7 +654,6 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
|
||||
goto err_scan_tail;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
#ifdef CONFIG_MTD_CMDLINE_PARTS
|
||||
mtd->name = "atmel_nand";
|
||||
num_partitions = parse_mtd_partitions(mtd, part_probes,
|
||||
@ -672,17 +669,11 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
|
||||
goto err_no_partitions;
|
||||
}
|
||||
|
||||
res = add_mtd_partitions(mtd, partitions, num_partitions);
|
||||
#else
|
||||
res = add_mtd_device(mtd);
|
||||
#endif
|
||||
|
||||
res = mtd_device_register(mtd, partitions, num_partitions);
|
||||
if (!res)
|
||||
return res;
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
err_no_partitions:
|
||||
#endif
|
||||
nand_release(mtd);
|
||||
err_scan_tail:
|
||||
err_scan_ident:
|
||||
|
@ -581,7 +581,8 @@ static int __init au1xxx_nand_init(void)
|
||||
}
|
||||
|
||||
/* Register the partitions */
|
||||
add_mtd_partitions(au1550_mtd, partition_info, ARRAY_SIZE(partition_info));
|
||||
mtd_device_register(au1550_mtd, partition_info,
|
||||
ARRAY_SIZE(partition_info));
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -185,20 +185,20 @@ static int __init autcpu12_init(void)
|
||||
/* Register the partitions */
|
||||
switch (autcpu12_mtd->size) {
|
||||
case SZ_16M:
|
||||
add_mtd_partitions(autcpu12_mtd, partition_info16k,
|
||||
NUM_PARTITIONS16K);
|
||||
mtd_device_register(autcpu12_mtd, partition_info16k,
|
||||
NUM_PARTITIONS16K);
|
||||
break;
|
||||
case SZ_32M:
|
||||
add_mtd_partitions(autcpu12_mtd, partition_info32k,
|
||||
NUM_PARTITIONS32K);
|
||||
mtd_device_register(autcpu12_mtd, partition_info32k,
|
||||
NUM_PARTITIONS32K);
|
||||
break;
|
||||
case SZ_64M:
|
||||
add_mtd_partitions(autcpu12_mtd, partition_info64k,
|
||||
NUM_PARTITIONS64K);
|
||||
mtd_device_register(autcpu12_mtd, partition_info64k,
|
||||
NUM_PARTITIONS64K);
|
||||
break;
|
||||
case SZ_128M:
|
||||
add_mtd_partitions(autcpu12_mtd, partition_info128k,
|
||||
NUM_PARTITIONS128K);
|
||||
mtd_device_register(autcpu12_mtd, partition_info128k,
|
||||
NUM_PARTITIONS128K);
|
||||
break;
|
||||
default:
|
||||
printk("Unsupported SmartMedia device\n");
|
||||
|
@ -52,9 +52,7 @@
|
||||
static const __devinitconst char gBanner[] = KERN_INFO \
|
||||
"BCM UMI MTD NAND Driver: 1.00\n";
|
||||
|
||||
#ifdef CONFIG_MTD_PARTITIONS
|
||||
const char *part_probes[] = { "cmdlinepart", NULL };
|
||||
#endif
|
||||
|
||||
#if NAND_ECC_BCH
|
||||
static uint8_t scan_ff_pattern[] = { 0xff };
|
||||
@ -509,7 +507,7 @@ static int __devinit bcm_umi_nand_probe(struct platform_device *pdev)
|
||||
kfree(board_mtd);
|
||||
return -EIO;
|
||||
}
|
||||
add_mtd_partitions(board_mtd, partition_info, nr_partitions);
|
||||
mtd_device_register(board_mtd, partition_info, nr_partitions);
|
||||
}
|
||||
|
||||
/* Return happy */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user