diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 23:06:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 23:06:53 -0400 |
commit | 29a6ccca3869bbe33879dae0cd7df2a1559eff54 (patch) | |
tree | 2d9d355d8662ede95af7bc812d686dc4d5f37ff3 /drivers/mtd/devices | |
parent | 426048313dfa7d65dbd2379b1665755511f9544f (diff) | |
parent | 6a8a98b22b10f1560d5f90aded4a54234b9b2724 (diff) |
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
Diffstat (limited to 'drivers/mtd/devices')
-rw-r--r-- | drivers/mtd/devices/block2mtd.c | 4 | ||||
-rw-r--r-- | drivers/mtd/devices/doc2000.c | 4 | ||||
-rw-r--r-- | drivers/mtd/devices/doc2001.c | 4 | ||||
-rw-r--r-- | drivers/mtd/devices/doc2001plus.c | 4 | ||||
-rw-r--r-- | drivers/mtd/devices/lart.c | 9 | ||||
-rw-r--r-- | drivers/mtd/devices/m25p80.c | 109 | ||||
-rw-r--r-- | drivers/mtd/devices/ms02-nv.c | 4 | ||||
-rw-r--r-- | drivers/mtd/devices/mtd_dataflash.c | 45 | ||||
-rw-r--r-- | drivers/mtd/devices/mtdram.c | 5 | ||||
-rw-r--r-- | drivers/mtd/devices/phram.c | 4 | ||||
-rw-r--r-- | drivers/mtd/devices/pmc551.c | 6 | ||||
-rw-r--r-- | drivers/mtd/devices/slram.c | 4 | ||||
-rw-r--r-- | drivers/mtd/devices/sst25l.c | 68 |
13 files changed, 132 insertions, 138 deletions
diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c index 97183c8c9e33..b78f23169d4e 100644 --- a/drivers/mtd/devices/block2mtd.c +++ b/drivers/mtd/devices/block2mtd.c | |||
@@ -294,7 +294,7 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size) | |||
294 | dev->mtd.priv = dev; | 294 | dev->mtd.priv = dev; |
295 | dev->mtd.owner = THIS_MODULE; | 295 | dev->mtd.owner = THIS_MODULE; |
296 | 296 | ||
297 | if (add_mtd_device(&dev->mtd)) { | 297 | if (mtd_device_register(&dev->mtd, NULL, 0)) { |
298 | /* Device didn't get added, so free the entry */ | 298 | /* Device didn't get added, so free the entry */ |
299 | goto devinit_err; | 299 | goto devinit_err; |
300 | } | 300 | } |
@@ -465,7 +465,7 @@ static void __devexit block2mtd_exit(void) | |||
465 | list_for_each_safe(pos, next, &blkmtd_device_list) { | 465 | list_for_each_safe(pos, next, &blkmtd_device_list) { |
466 | struct block2mtd_dev *dev = list_entry(pos, typeof(*dev), list); | 466 | struct block2mtd_dev *dev = list_entry(pos, typeof(*dev), list); |
467 | block2mtd_sync(&dev->mtd); | 467 | block2mtd_sync(&dev->mtd); |
468 | del_mtd_device(&dev->mtd); | 468 | mtd_device_unregister(&dev->mtd); |
469 | INFO("mtd%d: [%s] removed", dev->mtd.index, | 469 | INFO("mtd%d: [%s] removed", dev->mtd.index, |
470 | dev->mtd.name + strlen("block2mtd: ")); | 470 | dev->mtd.name + strlen("block2mtd: ")); |
471 | list_del(&dev->list); | 471 | list_del(&dev->list); |
diff --git a/drivers/mtd/devices/doc2000.c b/drivers/mtd/devices/doc2000.c index 5bf5f460e132..f7fbf6025ef2 100644 --- a/drivers/mtd/devices/doc2000.c +++ b/drivers/mtd/devices/doc2000.c | |||
@@ -597,7 +597,7 @@ void DoC2k_init(struct mtd_info *mtd) | |||
597 | doc2klist = mtd; | 597 | doc2klist = mtd; |
598 | mtd->size = this->totlen; | 598 | mtd->size = this->totlen; |
599 | mtd->erasesize = this->erasesize; | 599 | mtd->erasesize = this->erasesize; |
600 | add_mtd_device(mtd); | 600 | mtd_device_register(mtd, NULL, 0); |
601 | return; | 601 | return; |
602 | } | 602 | } |
603 | } | 603 | } |
@@ -1185,7 +1185,7 @@ static void __exit cleanup_doc2000(void) | |||
1185 | this = mtd->priv; | 1185 | this = mtd->priv; |
1186 | doc2klist = this->nextdoc; | 1186 | doc2klist = this->nextdoc; |
1187 | 1187 | ||
1188 | del_mtd_device(mtd); | 1188 | mtd_device_unregister(mtd); |
1189 | 1189 | ||
1190 | iounmap(this->virtadr); | 1190 | iounmap(this->virtadr); |
1191 | kfree(this->chips); | 1191 | kfree(this->chips); |
diff --git a/drivers/mtd/devices/doc2001.c b/drivers/mtd/devices/doc2001.c index 0990f7803628..241192f05bc8 100644 --- a/drivers/mtd/devices/doc2001.c +++ b/drivers/mtd/devices/doc2001.c | |||
@@ -376,7 +376,7 @@ void DoCMil_init(struct mtd_info *mtd) | |||
376 | this->nextdoc = docmillist; | 376 | this->nextdoc = docmillist; |
377 | docmillist = mtd; | 377 | docmillist = mtd; |
378 | mtd->size = this->totlen; | 378 | mtd->size = this->totlen; |
379 | add_mtd_device(mtd); | 379 | mtd_device_register(mtd, NULL, 0); |
380 | return; | 380 | return; |
381 | } | 381 | } |
382 | } | 382 | } |
@@ -826,7 +826,7 @@ static void __exit cleanup_doc2001(void) | |||
826 | this = mtd->priv; | 826 | this = mtd->priv; |
827 | docmillist = this->nextdoc; | 827 | docmillist = this->nextdoc; |
828 | 828 | ||
829 | del_mtd_device(mtd); | 829 | mtd_device_unregister(mtd); |
830 | 830 | ||
831 | iounmap(this->virtadr); | 831 | iounmap(this->virtadr); |
832 | kfree(this->chips); | 832 | kfree(this->chips); |
diff --git a/drivers/mtd/devices/doc2001plus.c b/drivers/mtd/devices/doc2001plus.c index 8b36fa77a195..09ae0adc3ad0 100644 --- a/drivers/mtd/devices/doc2001plus.c +++ b/drivers/mtd/devices/doc2001plus.c | |||
@@ -499,7 +499,7 @@ void DoCMilPlus_init(struct mtd_info *mtd) | |||
499 | docmilpluslist = mtd; | 499 | docmilpluslist = mtd; |
500 | mtd->size = this->totlen; | 500 | mtd->size = this->totlen; |
501 | mtd->erasesize = this->erasesize; | 501 | mtd->erasesize = this->erasesize; |
502 | add_mtd_device(mtd); | 502 | mtd_device_register(mtd, NULL, 0); |
503 | return; | 503 | return; |
504 | } | 504 | } |
505 | } | 505 | } |
@@ -1091,7 +1091,7 @@ static void __exit cleanup_doc2001plus(void) | |||
1091 | this = mtd->priv; | 1091 | this = mtd->priv; |
1092 | docmilpluslist = this->nextdoc; | 1092 | docmilpluslist = this->nextdoc; |
1093 | 1093 | ||
1094 | del_mtd_device(mtd); | 1094 | mtd_device_unregister(mtd); |
1095 | 1095 | ||
1096 | iounmap(this->virtadr); | 1096 | iounmap(this->virtadr); |
1097 | kfree(this->chips); | 1097 | kfree(this->chips); |
diff --git a/drivers/mtd/devices/lart.c b/drivers/mtd/devices/lart.c index 4b829f97d56c..772a0ff89e0f 100644 --- a/drivers/mtd/devices/lart.c +++ b/drivers/mtd/devices/lart.c | |||
@@ -684,9 +684,10 @@ static int __init lart_flash_init (void) | |||
684 | #endif | 684 | #endif |
685 | 685 | ||
686 | #ifndef HAVE_PARTITIONS | 686 | #ifndef HAVE_PARTITIONS |
687 | result = add_mtd_device (&mtd); | 687 | result = mtd_device_register(&mtd, NULL, 0); |
688 | #else | 688 | #else |
689 | result = add_mtd_partitions (&mtd,lart_partitions, ARRAY_SIZE(lart_partitions)); | 689 | result = mtd_device_register(&mtd, lart_partitions, |
690 | ARRAY_SIZE(lart_partitions)); | ||
690 | #endif | 691 | #endif |
691 | 692 | ||
692 | return (result); | 693 | return (result); |
@@ -695,9 +696,9 @@ static int __init lart_flash_init (void) | |||
695 | static void __exit lart_flash_exit (void) | 696 | static void __exit lart_flash_exit (void) |
696 | { | 697 | { |
697 | #ifndef HAVE_PARTITIONS | 698 | #ifndef HAVE_PARTITIONS |
698 | del_mtd_device (&mtd); | 699 | mtd_device_unregister(&mtd); |
699 | #else | 700 | #else |
700 | del_mtd_partitions (&mtd); | 701 | mtd_device_unregister(&mtd); |
701 | #endif | 702 | #endif |
702 | } | 703 | } |
703 | 704 | ||
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 3fb981d4bb51..35180e475c4c 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/sched.h> | 27 | #include <linux/sched.h> |
28 | #include <linux/mod_devicetable.h> | 28 | #include <linux/mod_devicetable.h> |
29 | 29 | ||
30 | #include <linux/mtd/cfi.h> | ||
30 | #include <linux/mtd/mtd.h> | 31 | #include <linux/mtd/mtd.h> |
31 | #include <linux/mtd/partitions.h> | 32 | #include <linux/mtd/partitions.h> |
32 | 33 | ||
@@ -55,6 +56,9 @@ | |||
55 | #define OPCODE_EN4B 0xb7 /* Enter 4-byte mode */ | 56 | #define OPCODE_EN4B 0xb7 /* Enter 4-byte mode */ |
56 | #define OPCODE_EX4B 0xe9 /* Exit 4-byte mode */ | 57 | #define OPCODE_EX4B 0xe9 /* Exit 4-byte mode */ |
57 | 58 | ||
59 | /* Used for Spansion flashes only. */ | ||
60 | #define OPCODE_BRWR 0x17 /* Bank register write */ | ||
61 | |||
58 | /* Status Register bits. */ | 62 | /* Status Register bits. */ |
59 | #define SR_WIP 1 /* Write in progress */ | 63 | #define SR_WIP 1 /* Write in progress */ |
60 | #define SR_WEL 2 /* Write enable latch */ | 64 | #define SR_WEL 2 /* Write enable latch */ |
@@ -76,6 +80,8 @@ | |||
76 | #define FAST_READ_DUMMY_BYTE 0 | 80 | #define FAST_READ_DUMMY_BYTE 0 |
77 | #endif | 81 | #endif |
78 | 82 | ||
83 | #define JEDEC_MFR(_jedec_id) ((_jedec_id) >> 16) | ||
84 | |||
79 | /****************************************************************************/ | 85 | /****************************************************************************/ |
80 | 86 | ||
81 | struct m25p { | 87 | struct m25p { |
@@ -158,11 +164,18 @@ static inline int write_disable(struct m25p *flash) | |||
158 | /* | 164 | /* |
159 | * Enable/disable 4-byte addressing mode. | 165 | * Enable/disable 4-byte addressing mode. |
160 | */ | 166 | */ |
161 | static inline int set_4byte(struct m25p *flash, int enable) | 167 | static inline int set_4byte(struct m25p *flash, u32 jedec_id, int enable) |
162 | { | 168 | { |
163 | u8 code = enable ? OPCODE_EN4B : OPCODE_EX4B; | 169 | switch (JEDEC_MFR(jedec_id)) { |
164 | 170 | case CFI_MFR_MACRONIX: | |
165 | return spi_write_then_read(flash->spi, &code, 1, NULL, 0); | 171 | flash->command[0] = enable ? OPCODE_EN4B : OPCODE_EX4B; |
172 | return spi_write(flash->spi, flash->command, 1); | ||
173 | default: | ||
174 | /* Spansion style */ | ||
175 | flash->command[0] = OPCODE_BRWR; | ||
176 | flash->command[1] = enable << 7; | ||
177 | return spi_write(flash->spi, flash->command, 2); | ||
178 | } | ||
166 | } | 179 | } |
167 | 180 | ||
168 | /* | 181 | /* |
@@ -668,6 +681,7 @@ static const struct spi_device_id m25p_ids[] = { | |||
668 | /* Macronix */ | 681 | /* Macronix */ |
669 | { "mx25l4005a", INFO(0xc22013, 0, 64 * 1024, 8, SECT_4K) }, | 682 | { "mx25l4005a", INFO(0xc22013, 0, 64 * 1024, 8, SECT_4K) }, |
670 | { "mx25l8005", INFO(0xc22014, 0, 64 * 1024, 16, 0) }, | 683 | { "mx25l8005", INFO(0xc22014, 0, 64 * 1024, 16, 0) }, |
684 | { "mx25l1606e", INFO(0xc22015, 0, 64 * 1024, 32, SECT_4K) }, | ||
671 | { "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, 0) }, | 685 | { "mx25l3205d", INFO(0xc22016, 0, 64 * 1024, 64, 0) }, |
672 | { "mx25l6405d", INFO(0xc22017, 0, 64 * 1024, 128, 0) }, | 686 | { "mx25l6405d", INFO(0xc22017, 0, 64 * 1024, 128, 0) }, |
673 | { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, | 687 | { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) }, |
@@ -684,6 +698,10 @@ static const struct spi_device_id m25p_ids[] = { | |||
684 | { "s25sl032a", INFO(0x010215, 0, 64 * 1024, 64, 0) }, | 698 | { "s25sl032a", INFO(0x010215, 0, 64 * 1024, 64, 0) }, |
685 | { "s25sl032p", INFO(0x010215, 0x4d00, 64 * 1024, 64, SECT_4K) }, | 699 | { "s25sl032p", INFO(0x010215, 0x4d00, 64 * 1024, 64, SECT_4K) }, |
686 | { "s25sl064a", INFO(0x010216, 0, 64 * 1024, 128, 0) }, | 700 | { "s25sl064a", INFO(0x010216, 0, 64 * 1024, 128, 0) }, |
701 | { "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) }, | ||
702 | { "s25fl256s1", INFO(0x010219, 0x4d01, 64 * 1024, 512, 0) }, | ||
703 | { "s25fl512s", INFO(0x010220, 0x4d00, 256 * 1024, 256, 0) }, | ||
704 | { "s70fl01gs", INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) }, | ||
687 | { "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024, 64, 0) }, | 705 | { "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024, 64, 0) }, |
688 | { "s25sl12801", INFO(0x012018, 0x0301, 64 * 1024, 256, 0) }, | 706 | { "s25sl12801", INFO(0x012018, 0x0301, 64 * 1024, 256, 0) }, |
689 | { "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024, 64, 0) }, | 707 | { "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024, 64, 0) }, |
@@ -729,7 +747,10 @@ static const struct spi_device_id m25p_ids[] = { | |||
729 | { "m25pe80", INFO(0x208014, 0, 64 * 1024, 16, 0) }, | 747 | { "m25pe80", INFO(0x208014, 0, 64 * 1024, 16, 0) }, |
730 | { "m25pe16", INFO(0x208015, 0, 64 * 1024, 32, SECT_4K) }, | 748 | { "m25pe16", INFO(0x208015, 0, 64 * 1024, 32, SECT_4K) }, |
731 | 749 | ||
732 | { "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) }, | 750 | { "m25px32", INFO(0x207116, 0, 64 * 1024, 64, SECT_4K) }, |
751 | { "m25px32-s0", INFO(0x207316, 0, 64 * 1024, 64, SECT_4K) }, | ||
752 | { "m25px32-s1", INFO(0x206316, 0, 64 * 1024, 64, SECT_4K) }, | ||
753 | { "m25px64", INFO(0x207117, 0, 64 * 1024, 128, 0) }, | ||
733 | 754 | ||
734 | /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */ | 755 | /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */ |
735 | { "w25x10", INFO(0xef3011, 0, 64 * 1024, 2, SECT_4K) }, | 756 | { "w25x10", INFO(0xef3011, 0, 64 * 1024, 2, SECT_4K) }, |
@@ -804,6 +825,8 @@ static int __devinit m25p_probe(struct spi_device *spi) | |||
804 | struct m25p *flash; | 825 | struct m25p *flash; |
805 | struct flash_info *info; | 826 | struct flash_info *info; |
806 | unsigned i; | 827 | unsigned i; |
828 | struct mtd_partition *parts = NULL; | ||
829 | int nr_parts = 0; | ||
807 | 830 | ||
808 | /* Platform data helps sort out which chip type we have, as | 831 | /* Platform data helps sort out which chip type we have, as |
809 | * well as how this board partitions it. If we don't have | 832 | * 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) | |||
868 | * up with the software protection bits set | 891 | * up with the software protection bits set |
869 | */ | 892 | */ |
870 | 893 | ||
871 | if (info->jedec_id >> 16 == 0x1f || | 894 | if (JEDEC_MFR(info->jedec_id) == CFI_MFR_ATMEL || |
872 | info->jedec_id >> 16 == 0x89 || | 895 | JEDEC_MFR(info->jedec_id) == CFI_MFR_INTEL || |
873 | info->jedec_id >> 16 == 0xbf) { | 896 | JEDEC_MFR(info->jedec_id) == CFI_MFR_SST) { |
874 | write_enable(flash); | 897 | write_enable(flash); |
875 | write_sr(flash, 0); | 898 | write_sr(flash, 0); |
876 | } | 899 | } |
@@ -888,7 +911,7 @@ static int __devinit m25p_probe(struct spi_device *spi) | |||
888 | flash->mtd.read = m25p80_read; | 911 | flash->mtd.read = m25p80_read; |
889 | 912 | ||
890 | /* sst flash chips use AAI word program */ | 913 | /* sst flash chips use AAI word program */ |
891 | if (info->jedec_id >> 16 == 0xbf) | 914 | if (JEDEC_MFR(info->jedec_id) == CFI_MFR_SST) |
892 | flash->mtd.write = sst_write; | 915 | flash->mtd.write = sst_write; |
893 | else | 916 | else |
894 | flash->mtd.write = m25p80_write; | 917 | flash->mtd.write = m25p80_write; |
@@ -914,7 +937,7 @@ static int __devinit m25p_probe(struct spi_device *spi) | |||
914 | /* enable 4-byte addressing if the device exceeds 16MiB */ | 937 | /* enable 4-byte addressing if the device exceeds 16MiB */ |
915 | if (flash->mtd.size > 0x1000000) { | 938 | if (flash->mtd.size > 0x1000000) { |
916 | flash->addr_width = 4; | 939 | flash->addr_width = 4; |
917 | set_4byte(flash, 1); | 940 | set_4byte(flash, info->jedec_id, 1); |
918 | } else | 941 | } else |
919 | flash->addr_width = 3; | 942 | flash->addr_width = 3; |
920 | } | 943 | } |
@@ -945,48 +968,41 @@ static int __devinit m25p_probe(struct spi_device *spi) | |||
945 | /* partitions should match sector boundaries; and it may be good to | 968 | /* partitions should match sector boundaries; and it may be good to |
946 | * use readonly partitions for writeprotected sectors (BP2..BP0). | 969 | * use readonly partitions for writeprotected sectors (BP2..BP0). |
947 | */ | 970 | */ |
948 | if (mtd_has_partitions()) { | 971 | if (mtd_has_cmdlinepart()) { |
949 | struct mtd_partition *parts = NULL; | 972 | static const char *part_probes[] |
950 | int nr_parts = 0; | 973 | = { "cmdlinepart", NULL, }; |
951 | |||
952 | if (mtd_has_cmdlinepart()) { | ||
953 | static const char *part_probes[] | ||
954 | = { "cmdlinepart", NULL, }; | ||
955 | 974 | ||
956 | nr_parts = parse_mtd_partitions(&flash->mtd, | 975 | nr_parts = parse_mtd_partitions(&flash->mtd, |
957 | part_probes, &parts, 0); | 976 | part_probes, &parts, 0); |
958 | } | 977 | } |
959 | 978 | ||
960 | if (nr_parts <= 0 && data && data->parts) { | 979 | if (nr_parts <= 0 && data && data->parts) { |
961 | parts = data->parts; | 980 | parts = data->parts; |
962 | nr_parts = data->nr_parts; | 981 | nr_parts = data->nr_parts; |
963 | } | 982 | } |
964 | 983 | ||
965 | #ifdef CONFIG_MTD_OF_PARTS | 984 | #ifdef CONFIG_MTD_OF_PARTS |
966 | if (nr_parts <= 0 && spi->dev.of_node) { | 985 | if (nr_parts <= 0 && spi->dev.of_node) { |
967 | nr_parts = of_mtd_parse_partitions(&spi->dev, | 986 | nr_parts = of_mtd_parse_partitions(&spi->dev, |
968 | spi->dev.of_node, &parts); | 987 | spi->dev.of_node, &parts); |
969 | } | 988 | } |
970 | #endif | 989 | #endif |
971 | 990 | ||
972 | if (nr_parts > 0) { | 991 | if (nr_parts > 0) { |
973 | for (i = 0; i < nr_parts; i++) { | 992 | for (i = 0; i < nr_parts; i++) { |
974 | DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = " | 993 | DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = " |
975 | "{.name = %s, .offset = 0x%llx, " | 994 | "{.name = %s, .offset = 0x%llx, " |
976 | ".size = 0x%llx (%lldKiB) }\n", | 995 | ".size = 0x%llx (%lldKiB) }\n", |
977 | i, parts[i].name, | 996 | i, parts[i].name, |
978 | (long long)parts[i].offset, | 997 | (long long)parts[i].offset, |
979 | (long long)parts[i].size, | 998 | (long long)parts[i].size, |
980 | (long long)(parts[i].size >> 10)); | 999 | (long long)(parts[i].size >> 10)); |
981 | } | ||
982 | flash->partitioned = 1; | ||
983 | return add_mtd_partitions(&flash->mtd, parts, nr_parts); | ||
984 | } | 1000 | } |
985 | } else if (data && data->nr_parts) | 1001 | flash->partitioned = 1; |
986 | dev_warn(&spi->dev, "ignoring %d default partitions on %s\n", | 1002 | } |
987 | data->nr_parts, data->name); | ||
988 | 1003 | ||
989 | return add_mtd_device(&flash->mtd) == 1 ? -ENODEV : 0; | 1004 | return mtd_device_register(&flash->mtd, parts, nr_parts) == 1 ? |
1005 | -ENODEV : 0; | ||
990 | } | 1006 | } |
991 | 1007 | ||
992 | 1008 | ||
@@ -996,10 +1012,7 @@ static int __devexit m25p_remove(struct spi_device *spi) | |||
996 | int status; | 1012 | int status; |
997 | 1013 | ||
998 | /* Clean up MTD stuff. */ | 1014 | /* Clean up MTD stuff. */ |
999 | if (mtd_has_partitions() && flash->partitioned) | 1015 | status = mtd_device_unregister(&flash->mtd); |
1000 | status = del_mtd_partitions(&flash->mtd); | ||
1001 | else | ||
1002 | status = del_mtd_device(&flash->mtd); | ||
1003 | if (status == 0) { | 1016 | if (status == 0) { |
1004 | kfree(flash->command); | 1017 | kfree(flash->command); |
1005 | kfree(flash); | 1018 | kfree(flash); |
diff --git a/drivers/mtd/devices/ms02-nv.c b/drivers/mtd/devices/ms02-nv.c index 6a9a24a80a6d..8423fb6d4f26 100644 --- a/drivers/mtd/devices/ms02-nv.c +++ b/drivers/mtd/devices/ms02-nv.c | |||
@@ -220,7 +220,7 @@ static int __init ms02nv_init_one(ulong addr) | |||
220 | mtd->writesize = 1; | 220 | mtd->writesize = 1; |
221 | 221 | ||
222 | ret = -EIO; | 222 | ret = -EIO; |
223 | if (add_mtd_device(mtd)) { | 223 | if (mtd_device_register(mtd, NULL, 0)) { |
224 | printk(KERN_ERR | 224 | printk(KERN_ERR |
225 | "ms02-nv: Unable to register MTD device, aborting!\n"); | 225 | "ms02-nv: Unable to register MTD device, aborting!\n"); |
226 | goto err_out_csr_res; | 226 | goto err_out_csr_res; |
@@ -262,7 +262,7 @@ static void __exit ms02nv_remove_one(void) | |||
262 | 262 | ||
263 | root_ms02nv_mtd = mp->next; | 263 | root_ms02nv_mtd = mp->next; |
264 | 264 | ||
265 | del_mtd_device(mtd); | 265 | mtd_device_unregister(mtd); |
266 | 266 | ||
267 | release_resource(mp->resource.csr); | 267 | release_resource(mp->resource.csr); |
268 | kfree(mp->resource.csr); | 268 | kfree(mp->resource.csr); |
diff --git a/drivers/mtd/devices/mtd_dataflash.c b/drivers/mtd/devices/mtd_dataflash.c index c5015cc721d5..13749d458a31 100644 --- a/drivers/mtd/devices/mtd_dataflash.c +++ b/drivers/mtd/devices/mtd_dataflash.c | |||
@@ -637,6 +637,8 @@ add_dataflash_otp(struct spi_device *spi, char *name, | |||
637 | struct flash_platform_data *pdata = spi->dev.platform_data; | 637 | struct flash_platform_data *pdata = spi->dev.platform_data; |
638 | char *otp_tag = ""; | 638 | char *otp_tag = ""; |
639 | int err = 0; | 639 | int err = 0; |
640 | struct mtd_partition *parts; | ||
641 | int nr_parts = 0; | ||
640 | 642 | ||
641 | priv = kzalloc(sizeof *priv, GFP_KERNEL); | 643 | priv = kzalloc(sizeof *priv, GFP_KERNEL); |
642 | if (!priv) | 644 | if (!priv) |
@@ -675,33 +677,25 @@ add_dataflash_otp(struct spi_device *spi, char *name, | |||
675 | pagesize, otp_tag); | 677 | pagesize, otp_tag); |
676 | dev_set_drvdata(&spi->dev, priv); | 678 | dev_set_drvdata(&spi->dev, priv); |
677 | 679 | ||
678 | if (mtd_has_partitions()) { | 680 | if (mtd_has_cmdlinepart()) { |
679 | struct mtd_partition *parts; | 681 | static const char *part_probes[] = { "cmdlinepart", NULL, }; |
680 | int nr_parts = 0; | ||
681 | 682 | ||
682 | if (mtd_has_cmdlinepart()) { | 683 | nr_parts = parse_mtd_partitions(device, part_probes, &parts, |
683 | static const char *part_probes[] | 684 | 0); |
684 | = { "cmdlinepart", NULL, }; | 685 | } |
685 | |||
686 | nr_parts = parse_mtd_partitions(device, | ||
687 | part_probes, &parts, 0); | ||
688 | } | ||
689 | 686 | ||
690 | if (nr_parts <= 0 && pdata && pdata->parts) { | 687 | if (nr_parts <= 0 && pdata && pdata->parts) { |
691 | parts = pdata->parts; | 688 | parts = pdata->parts; |
692 | nr_parts = pdata->nr_parts; | 689 | nr_parts = pdata->nr_parts; |
693 | } | 690 | } |
694 | 691 | ||
695 | if (nr_parts > 0) { | 692 | if (nr_parts > 0) { |
696 | priv->partitioned = 1; | 693 | priv->partitioned = 1; |
697 | err = add_mtd_partitions(device, parts, nr_parts); | 694 | err = mtd_device_register(device, parts, nr_parts); |
698 | goto out; | 695 | goto out; |
699 | } | 696 | } |
700 | } else if (pdata && pdata->nr_parts) | ||
701 | dev_warn(&spi->dev, "ignoring %d default partitions on %s\n", | ||
702 | pdata->nr_parts, device->name); | ||
703 | 697 | ||
704 | if (add_mtd_device(device) == 1) | 698 | if (mtd_device_register(device, NULL, 0) == 1) |
705 | err = -ENODEV; | 699 | err = -ENODEV; |
706 | 700 | ||
707 | out: | 701 | out: |
@@ -939,10 +933,7 @@ static int __devexit dataflash_remove(struct spi_device *spi) | |||
939 | 933 | ||
940 | DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", dev_name(&spi->dev)); | 934 | DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", dev_name(&spi->dev)); |
941 | 935 | ||
942 | if (mtd_has_partitions() && flash->partitioned) | 936 | status = mtd_device_unregister(&flash->mtd); |
943 | status = del_mtd_partitions(&flash->mtd); | ||
944 | else | ||
945 | status = del_mtd_device(&flash->mtd); | ||
946 | if (status == 0) { | 937 | if (status == 0) { |
947 | dev_set_drvdata(&spi->dev, NULL); | 938 | dev_set_drvdata(&spi->dev, NULL); |
948 | kfree(flash); | 939 | kfree(flash); |
diff --git a/drivers/mtd/devices/mtdram.c b/drivers/mtd/devices/mtdram.c index 1483e18971ce..2562689ba6b4 100644 --- a/drivers/mtd/devices/mtdram.c +++ b/drivers/mtd/devices/mtdram.c | |||
@@ -104,7 +104,7 @@ static int ram_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
104 | static void __exit cleanup_mtdram(void) | 104 | static void __exit cleanup_mtdram(void) |
105 | { | 105 | { |
106 | if (mtd_info) { | 106 | if (mtd_info) { |
107 | del_mtd_device(mtd_info); | 107 | mtd_device_unregister(mtd_info); |
108 | vfree(mtd_info->priv); | 108 | vfree(mtd_info->priv); |
109 | kfree(mtd_info); | 109 | kfree(mtd_info); |
110 | } | 110 | } |
@@ -133,9 +133,8 @@ int mtdram_init_device(struct mtd_info *mtd, void *mapped_address, | |||
133 | mtd->read = ram_read; | 133 | mtd->read = ram_read; |
134 | mtd->write = ram_write; | 134 | mtd->write = ram_write; |
135 | 135 | ||
136 | if (add_mtd_device(mtd)) { | 136 | if (mtd_device_register(mtd, NULL, 0)) |
137 | return -EIO; | 137 | return -EIO; |
138 | } | ||
139 | 138 | ||
140 | return 0; | 139 | return 0; |
141 | } | 140 | } |
diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c index 8d28fa02a5a2..23423bd00b06 100644 --- a/drivers/mtd/devices/phram.c +++ b/drivers/mtd/devices/phram.c | |||
@@ -115,7 +115,7 @@ static void unregister_devices(void) | |||
115 | struct phram_mtd_list *this, *safe; | 115 | struct phram_mtd_list *this, *safe; |
116 | 116 | ||
117 | list_for_each_entry_safe(this, safe, &phram_list, list) { | 117 | list_for_each_entry_safe(this, safe, &phram_list, list) { |
118 | del_mtd_device(&this->mtd); | 118 | mtd_device_unregister(&this->mtd); |
119 | iounmap(this->mtd.priv); | 119 | iounmap(this->mtd.priv); |
120 | kfree(this->mtd.name); | 120 | kfree(this->mtd.name); |
121 | kfree(this); | 121 | kfree(this); |
@@ -153,7 +153,7 @@ static int register_device(char *name, unsigned long start, unsigned long len) | |||
153 | new->mtd.writesize = 1; | 153 | new->mtd.writesize = 1; |
154 | 154 | ||
155 | ret = -EAGAIN; | 155 | ret = -EAGAIN; |
156 | if (add_mtd_device(&new->mtd)) { | 156 | if (mtd_device_register(&new->mtd, NULL, 0)) { |
157 | pr_err("Failed to register new device\n"); | 157 | pr_err("Failed to register new device\n"); |
158 | goto out2; | 158 | goto out2; |
159 | } | 159 | } |
diff --git a/drivers/mtd/devices/pmc551.c b/drivers/mtd/devices/pmc551.c index 41b8cdcc64cb..ecff765579dd 100644 --- a/drivers/mtd/devices/pmc551.c +++ b/drivers/mtd/devices/pmc551.c | |||
@@ -798,7 +798,7 @@ static int __init init_pmc551(void) | |||
798 | mtd->writesize = 1; | 798 | mtd->writesize = 1; |
799 | mtd->owner = THIS_MODULE; | 799 | mtd->owner = THIS_MODULE; |
800 | 800 | ||
801 | if (add_mtd_device(mtd)) { | 801 | if (mtd_device_register(mtd, NULL, 0)) { |
802 | printk(KERN_NOTICE "pmc551: Failed to register new device\n"); | 802 | printk(KERN_NOTICE "pmc551: Failed to register new device\n"); |
803 | pci_iounmap(PCI_Device, priv->start); | 803 | pci_iounmap(PCI_Device, priv->start); |
804 | kfree(mtd->priv); | 804 | kfree(mtd->priv); |
@@ -806,7 +806,7 @@ static int __init init_pmc551(void) | |||
806 | break; | 806 | break; |
807 | } | 807 | } |
808 | 808 | ||
809 | /* Keep a reference as the add_mtd_device worked */ | 809 | /* Keep a reference as the mtd_device_register worked */ |
810 | pci_dev_get(PCI_Device); | 810 | pci_dev_get(PCI_Device); |
811 | 811 | ||
812 | printk(KERN_NOTICE "Registered pmc551 memory device.\n"); | 812 | printk(KERN_NOTICE "Registered pmc551 memory device.\n"); |
@@ -856,7 +856,7 @@ static void __exit cleanup_pmc551(void) | |||
856 | pci_dev_put(priv->dev); | 856 | pci_dev_put(priv->dev); |
857 | 857 | ||
858 | kfree(mtd->priv); | 858 | kfree(mtd->priv); |
859 | del_mtd_device(mtd); | 859 | mtd_device_unregister(mtd); |
860 | kfree(mtd); | 860 | kfree(mtd); |
861 | found++; | 861 | found++; |
862 | } | 862 | } |
diff --git a/drivers/mtd/devices/slram.c b/drivers/mtd/devices/slram.c index 592016a0668f..e585263161b9 100644 --- a/drivers/mtd/devices/slram.c +++ b/drivers/mtd/devices/slram.c | |||
@@ -210,7 +210,7 @@ static int register_device(char *name, unsigned long start, unsigned long length | |||
210 | (*curmtd)->mtdinfo->erasesize = SLRAM_BLK_SZ; | 210 | (*curmtd)->mtdinfo->erasesize = SLRAM_BLK_SZ; |
211 | (*curmtd)->mtdinfo->writesize = 1; | 211 | (*curmtd)->mtdinfo->writesize = 1; |
212 | 212 | ||
213 | if (add_mtd_device((*curmtd)->mtdinfo)) { | 213 | if (mtd_device_register((*curmtd)->mtdinfo, NULL, 0)) { |
214 | E("slram: Failed to register new device\n"); | 214 | E("slram: Failed to register new device\n"); |
215 | iounmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start); | 215 | iounmap(((slram_priv_t *)(*curmtd)->mtdinfo->priv)->start); |
216 | kfree((*curmtd)->mtdinfo->priv); | 216 | kfree((*curmtd)->mtdinfo->priv); |
@@ -231,7 +231,7 @@ static void unregister_devices(void) | |||
231 | 231 | ||
232 | while (slram_mtdlist) { | 232 | while (slram_mtdlist) { |
233 | nextitem = slram_mtdlist->next; | 233 | nextitem = slram_mtdlist->next; |
234 | del_mtd_device(slram_mtdlist->mtdinfo); | 234 | mtd_device_unregister(slram_mtdlist->mtdinfo); |
235 | iounmap(((slram_priv_t *)slram_mtdlist->mtdinfo->priv)->start); | 235 | iounmap(((slram_priv_t *)slram_mtdlist->mtdinfo->priv)->start); |
236 | kfree(slram_mtdlist->mtdinfo->priv); | 236 | kfree(slram_mtdlist->mtdinfo->priv); |
237 | kfree(slram_mtdlist->mtdinfo); | 237 | kfree(slram_mtdlist->mtdinfo); |
diff --git a/drivers/mtd/devices/sst25l.c b/drivers/mtd/devices/sst25l.c index c163e619abc9..1e2c430aaad2 100644 --- a/drivers/mtd/devices/sst25l.c +++ b/drivers/mtd/devices/sst25l.c | |||
@@ -66,7 +66,7 @@ struct flash_info { | |||
66 | 66 | ||
67 | #define to_sst25l_flash(x) container_of(x, struct sst25l_flash, mtd) | 67 | #define to_sst25l_flash(x) container_of(x, struct sst25l_flash, mtd) |
68 | 68 | ||
69 | static struct flash_info __initdata sst25l_flash_info[] = { | 69 | static struct flash_info __devinitdata sst25l_flash_info[] = { |
70 | {"sst25lf020a", 0xbf43, 256, 1024, 4096}, | 70 | {"sst25lf020a", 0xbf43, 256, 1024, 4096}, |
71 | {"sst25lf040a", 0xbf44, 256, 2048, 4096}, | 71 | {"sst25lf040a", 0xbf44, 256, 2048, 4096}, |
72 | }; | 72 | }; |
@@ -381,6 +381,8 @@ static int __devinit sst25l_probe(struct spi_device *spi) | |||
381 | struct sst25l_flash *flash; | 381 | struct sst25l_flash *flash; |
382 | struct flash_platform_data *data; | 382 | struct flash_platform_data *data; |
383 | int ret, i; | 383 | int ret, i; |
384 | struct mtd_partition *parts = NULL; | ||
385 | int nr_parts = 0; | ||
384 | 386 | ||
385 | flash_info = sst25l_match_device(spi); | 387 | flash_info = sst25l_match_device(spi); |
386 | if (!flash_info) | 388 | if (!flash_info) |
@@ -420,46 +422,37 @@ static int __devinit sst25l_probe(struct spi_device *spi) | |||
420 | flash->mtd.erasesize, flash->mtd.erasesize / 1024, | 422 | flash->mtd.erasesize, flash->mtd.erasesize / 1024, |
421 | flash->mtd.numeraseregions); | 423 | flash->mtd.numeraseregions); |
422 | 424 | ||
423 | if (mtd_has_partitions()) { | ||
424 | struct mtd_partition *parts = NULL; | ||
425 | int nr_parts = 0; | ||
426 | 425 | ||
427 | if (mtd_has_cmdlinepart()) { | 426 | if (mtd_has_cmdlinepart()) { |
428 | static const char *part_probes[] = | 427 | static const char *part_probes[] = {"cmdlinepart", NULL}; |
429 | {"cmdlinepart", NULL}; | ||
430 | 428 | ||
431 | nr_parts = parse_mtd_partitions(&flash->mtd, | 429 | nr_parts = parse_mtd_partitions(&flash->mtd, |
432 | part_probes, | 430 | part_probes, |
433 | &parts, 0); | 431 | &parts, 0); |
434 | } | 432 | } |
435 | 433 | ||
436 | if (nr_parts <= 0 && data && data->parts) { | 434 | if (nr_parts <= 0 && data && data->parts) { |
437 | parts = data->parts; | 435 | parts = data->parts; |
438 | nr_parts = data->nr_parts; | 436 | nr_parts = data->nr_parts; |
439 | } | 437 | } |
440 | 438 | ||
441 | if (nr_parts > 0) { | 439 | if (nr_parts > 0) { |
442 | for (i = 0; i < nr_parts; i++) { | 440 | for (i = 0; i < nr_parts; i++) { |
443 | DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = " | 441 | DEBUG(MTD_DEBUG_LEVEL2, "partitions[%d] = " |
444 | "{.name = %s, .offset = 0x%llx, " | 442 | "{.name = %s, .offset = 0x%llx, " |
445 | ".size = 0x%llx (%lldKiB) }\n", | 443 | ".size = 0x%llx (%lldKiB) }\n", |
446 | i, parts[i].name, | 444 | i, parts[i].name, |
447 | (long long)parts[i].offset, | 445 | (long long)parts[i].offset, |
448 | (long long)parts[i].size, | 446 | (long long)parts[i].size, |
449 | (long long)(parts[i].size >> 10)); | 447 | (long long)(parts[i].size >> 10)); |
450 | } | ||
451 | |||
452 | flash->partitioned = 1; | ||
453 | return add_mtd_partitions(&flash->mtd, | ||
454 | parts, nr_parts); | ||
455 | } | 448 | } |
456 | 449 | ||
457 | } else if (data && data->nr_parts) { | 450 | flash->partitioned = 1; |
458 | dev_warn(&spi->dev, "ignoring %d default partitions on %s\n", | 451 | return mtd_device_register(&flash->mtd, parts, |
459 | data->nr_parts, data->name); | 452 | nr_parts); |
460 | } | 453 | } |
461 | 454 | ||
462 | ret = add_mtd_device(&flash->mtd); | 455 | ret = mtd_device_register(&flash->mtd, NULL, 0); |
463 | if (ret == 1) { | 456 | if (ret == 1) { |
464 | kfree(flash); | 457 | kfree(flash); |
465 | dev_set_drvdata(&spi->dev, NULL); | 458 | dev_set_drvdata(&spi->dev, NULL); |
@@ -469,15 +462,12 @@ static int __devinit sst25l_probe(struct spi_device *spi) | |||
469 | return 0; | 462 | return 0; |
470 | } | 463 | } |
471 | 464 | ||
472 | static int __exit sst25l_remove(struct spi_device *spi) | 465 | static int __devexit sst25l_remove(struct spi_device *spi) |
473 | { | 466 | { |
474 | struct sst25l_flash *flash = dev_get_drvdata(&spi->dev); | 467 | struct sst25l_flash *flash = dev_get_drvdata(&spi->dev); |
475 | int ret; | 468 | int ret; |
476 | 469 | ||
477 | if (mtd_has_partitions() && flash->partitioned) | 470 | ret = mtd_device_unregister(&flash->mtd); |
478 | ret = del_mtd_partitions(&flash->mtd); | ||
479 | else | ||
480 | ret = del_mtd_device(&flash->mtd); | ||
481 | if (ret == 0) | 471 | if (ret == 0) |
482 | kfree(flash); | 472 | kfree(flash); |
483 | return ret; | 473 | return ret; |
@@ -490,7 +480,7 @@ static struct spi_driver sst25l_driver = { | |||
490 | .owner = THIS_MODULE, | 480 | .owner = THIS_MODULE, |
491 | }, | 481 | }, |
492 | .probe = sst25l_probe, | 482 | .probe = sst25l_probe, |
493 | .remove = __exit_p(sst25l_remove), | 483 | .remove = __devexit_p(sst25l_remove), |
494 | }; | 484 | }; |
495 | 485 | ||
496 | static int __init sst25l_init(void) | 486 | static int __init sst25l_init(void) |