aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mtd/devices/Kconfig1
-rw-r--r--drivers/mtd/devices/Makefile7
-rw-r--r--drivers/mtd/devices/doc2000.c22
-rw-r--r--drivers/mtd/devices/doc2001.c22
-rw-r--r--drivers/mtd/devices/doc2001plus.c22
-rw-r--r--drivers/mtd/devices/docprobe.c8
6 files changed, 18 insertions, 64 deletions
diff --git a/drivers/mtd/devices/Kconfig b/drivers/mtd/devices/Kconfig
index 7fac438b5c32..6e9f880e2f98 100644
--- a/drivers/mtd/devices/Kconfig
+++ b/drivers/mtd/devices/Kconfig
@@ -209,7 +209,6 @@ config MTD_DOC2001PLUS
209config MTD_DOCPROBE 209config MTD_DOCPROBE
210 tristate 210 tristate
211 select MTD_DOCECC 211 select MTD_DOCECC
212 select OBSOLETE_INTERMODULE
213 212
214config MTD_DOCECC 213config MTD_DOCECC
215 tristate 214 tristate
diff --git a/drivers/mtd/devices/Makefile b/drivers/mtd/devices/Makefile
index b6573670316f..0f788d5c4bf8 100644
--- a/drivers/mtd/devices/Makefile
+++ b/drivers/mtd/devices/Makefile
@@ -3,13 +3,6 @@
3# 3#
4# $Id: Makefile.common,v 1.7 2004/12/22 17:51:15 joern Exp $ 4# $Id: Makefile.common,v 1.7 2004/12/22 17:51:15 joern Exp $
5 5
6# *** BIG UGLY NOTE ***
7#
8# The removal of get_module_symbol() and replacement with
9# inter_module_register() et al has introduced a link order dependency
10# here where previously there was none. We now have to ensure that
11# doc200[01].o are linked before docprobe.o
12
13obj-$(CONFIG_MTD_DOC2000) += doc2000.o 6obj-$(CONFIG_MTD_DOC2000) += doc2000.o
14obj-$(CONFIG_MTD_DOC2001) += doc2001.o 7obj-$(CONFIG_MTD_DOC2001) += doc2001.o
15obj-$(CONFIG_MTD_DOC2001PLUS) += doc2001plus.o 8obj-$(CONFIG_MTD_DOC2001PLUS) += doc2001plus.o
diff --git a/drivers/mtd/devices/doc2000.c b/drivers/mtd/devices/doc2000.c
index 23e7a5c7d2c1..40cc20f6d164 100644
--- a/drivers/mtd/devices/doc2000.c
+++ b/drivers/mtd/devices/doc2000.c
@@ -517,16 +517,9 @@ static int DoC2k_is_alias(struct DiskOnChip *doc1, struct DiskOnChip *doc2)
517 return retval; 517 return retval;
518} 518}
519 519
520static const char im_name[] = "DoC2k_init"; 520/* This routine is found from the docprobe code by symbol_get(),
521 521 * which will bump the use count of this module. */
522/* This routine is made available to other mtd code via 522void DoC2k_init(struct mtd_info *mtd)
523 * inter_module_register. It must only be accessed through
524 * inter_module_get which will bump the use count of this module. The
525 * addresses passed back in mtd are valid as long as the use count of
526 * this module is non-zero, i.e. between inter_module_get and
527 * inter_module_put. Keith Owens <kaos@ocs.com.au> 29 Oct 2000.
528 */
529static void DoC2k_init(struct mtd_info *mtd)
530{ 523{
531 struct DiskOnChip *this = mtd->priv; 524 struct DiskOnChip *this = mtd->priv;
532 struct DiskOnChip *old = NULL; 525 struct DiskOnChip *old = NULL;
@@ -623,6 +616,7 @@ static void DoC2k_init(struct mtd_info *mtd)
623 return; 616 return;
624 } 617 }
625} 618}
619EXPORT_SYMBOL_GPL(DoC2k_init);
626 620
627static int doc_read(struct mtd_info *mtd, loff_t from, size_t len, 621static int doc_read(struct mtd_info *mtd, loff_t from, size_t len,
628 size_t * retlen, u_char * buf) 622 size_t * retlen, u_char * buf)
@@ -1277,12 +1271,6 @@ static int doc_erase(struct mtd_info *mtd, struct erase_info *instr)
1277 * 1271 *
1278 ****************************************************************************/ 1272 ****************************************************************************/
1279 1273
1280static int __init init_doc2000(void)
1281{
1282 inter_module_register(im_name, THIS_MODULE, &DoC2k_init);
1283 return 0;
1284}
1285
1286static void __exit cleanup_doc2000(void) 1274static void __exit cleanup_doc2000(void)
1287{ 1275{
1288 struct mtd_info *mtd; 1276 struct mtd_info *mtd;
@@ -1298,11 +1286,9 @@ static void __exit cleanup_doc2000(void)
1298 kfree(this->chips); 1286 kfree(this->chips);
1299 kfree(mtd); 1287 kfree(mtd);
1300 } 1288 }
1301 inter_module_unregister(im_name);
1302} 1289}
1303 1290
1304module_exit(cleanup_doc2000); 1291module_exit(cleanup_doc2000);
1305module_init(init_doc2000);
1306 1292
1307MODULE_LICENSE("GPL"); 1293MODULE_LICENSE("GPL");
1308MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org> et al."); 1294MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org> et al.");
diff --git a/drivers/mtd/devices/doc2001.c b/drivers/mtd/devices/doc2001.c
index 681a9c73a2a3..18b536ca8546 100644
--- a/drivers/mtd/devices/doc2001.c
+++ b/drivers/mtd/devices/doc2001.c
@@ -324,16 +324,9 @@ static int DoCMil_is_alias(struct DiskOnChip *doc1, struct DiskOnChip *doc2)
324 return retval; 324 return retval;
325} 325}
326 326
327static const char im_name[] = "DoCMil_init"; 327/* This routine is found from the docprobe code by symbol_get(),
328 328 * which will bump the use count of this module. */
329/* This routine is made available to other mtd code via 329void DoCMil_init(struct mtd_info *mtd)
330 * inter_module_register. It must only be accessed through
331 * inter_module_get which will bump the use count of this module. The
332 * addresses passed back in mtd are valid as long as the use count of
333 * this module is non-zero, i.e. between inter_module_get and
334 * inter_module_put. Keith Owens <kaos@ocs.com.au> 29 Oct 2000.
335 */
336static void DoCMil_init(struct mtd_info *mtd)
337{ 330{
338 struct DiskOnChip *this = mtd->priv; 331 struct DiskOnChip *this = mtd->priv;
339 struct DiskOnChip *old = NULL; 332 struct DiskOnChip *old = NULL;
@@ -401,6 +394,7 @@ static void DoCMil_init(struct mtd_info *mtd)
401 return; 394 return;
402 } 395 }
403} 396}
397EXPORT_SYMBOL_GPL(DocMil_init);
404 398
405static int doc_read (struct mtd_info *mtd, loff_t from, size_t len, 399static int doc_read (struct mtd_info *mtd, loff_t from, size_t len,
406 size_t *retlen, u_char *buf) 400 size_t *retlen, u_char *buf)
@@ -856,12 +850,6 @@ int doc_erase (struct mtd_info *mtd, struct erase_info *instr)
856 * 850 *
857 ****************************************************************************/ 851 ****************************************************************************/
858 852
859static int __init init_doc2001(void)
860{
861 inter_module_register(im_name, THIS_MODULE, &DoCMil_init);
862 return 0;
863}
864
865static void __exit cleanup_doc2001(void) 853static void __exit cleanup_doc2001(void)
866{ 854{
867 struct mtd_info *mtd; 855 struct mtd_info *mtd;
@@ -877,11 +865,9 @@ static void __exit cleanup_doc2001(void)
877 kfree(this->chips); 865 kfree(this->chips);
878 kfree(mtd); 866 kfree(mtd);
879 } 867 }
880 inter_module_unregister(im_name);
881} 868}
882 869
883module_exit(cleanup_doc2001); 870module_exit(cleanup_doc2001);
884module_init(init_doc2001);
885 871
886MODULE_LICENSE("GPL"); 872MODULE_LICENSE("GPL");
887MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org> et al."); 873MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org> et al.");
diff --git a/drivers/mtd/devices/doc2001plus.c b/drivers/mtd/devices/doc2001plus.c
index 5f57f29efee4..c80a0efa3f35 100644
--- a/drivers/mtd/devices/doc2001plus.c
+++ b/drivers/mtd/devices/doc2001plus.c
@@ -447,16 +447,9 @@ static int DoCMilPlus_is_alias(struct DiskOnChip *doc1, struct DiskOnChip *doc2)
447 return retval; 447 return retval;
448} 448}
449 449
450static const char im_name[] = "DoCMilPlus_init"; 450/* This routine is found from the docprobe code by symbol_get(),
451 451 * which will bump the use count of this module. */
452/* This routine is made available to other mtd code via 452void DoCMilPlus_init(struct mtd_info *mtd)
453 * inter_module_register. It must only be accessed through
454 * inter_module_get which will bump the use count of this module. The
455 * addresses passed back in mtd are valid as long as the use count of
456 * this module is non-zero, i.e. between inter_module_get and
457 * inter_module_put. Keith Owens <kaos@ocs.com.au> 29 Oct 2000.
458 */
459static void DoCMilPlus_init(struct mtd_info *mtd)
460{ 453{
461 struct DiskOnChip *this = mtd->priv; 454 struct DiskOnChip *this = mtd->priv;
462 struct DiskOnChip *old = NULL; 455 struct DiskOnChip *old = NULL;
@@ -524,6 +517,7 @@ static void DoCMilPlus_init(struct mtd_info *mtd)
524 return; 517 return;
525 } 518 }
526} 519}
520EXPORT_SYMBOL_GPL(DocMilPlus_init);
527 521
528#if 0 522#if 0
529static int doc_dumpblk(struct mtd_info *mtd, loff_t from) 523static int doc_dumpblk(struct mtd_info *mtd, loff_t from)
@@ -1122,12 +1116,6 @@ int doc_erase(struct mtd_info *mtd, struct erase_info *instr)
1122 * 1116 *
1123 ****************************************************************************/ 1117 ****************************************************************************/
1124 1118
1125static int __init init_doc2001plus(void)
1126{
1127 inter_module_register(im_name, THIS_MODULE, &DoCMilPlus_init);
1128 return 0;
1129}
1130
1131static void __exit cleanup_doc2001plus(void) 1119static void __exit cleanup_doc2001plus(void)
1132{ 1120{
1133 struct mtd_info *mtd; 1121 struct mtd_info *mtd;
@@ -1143,11 +1131,9 @@ static void __exit cleanup_doc2001plus(void)
1143 kfree(this->chips); 1131 kfree(this->chips);
1144 kfree(mtd); 1132 kfree(mtd);
1145 } 1133 }
1146 inter_module_unregister(im_name);
1147} 1134}
1148 1135
1149module_exit(cleanup_doc2001plus); 1136module_exit(cleanup_doc2001plus);
1150module_init(init_doc2001plus);
1151 1137
1152MODULE_LICENSE("GPL"); 1138MODULE_LICENSE("GPL");
1153MODULE_AUTHOR("Greg Ungerer <gerg@snapgear.com> et al."); 1139MODULE_AUTHOR("Greg Ungerer <gerg@snapgear.com> et al.");
diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c
index 13178b9dd00a..b83afe01574c 100644
--- a/drivers/mtd/devices/docprobe.c
+++ b/drivers/mtd/devices/docprobe.c
@@ -308,11 +308,15 @@ static void __init DoC_Probe(unsigned long physadr)
308 } 308 }
309 309
310 if (im_funcname) 310 if (im_funcname)
311 initroutine = inter_module_get_request(im_funcname, im_modname); 311 initroutine = symbol_get(im_funcname);
312 if (!initroutine) {
313 request_module(in_modname);
314 initroutine = symbol_get(im_funcname);
315 }
312 316
313 if (initroutine) { 317 if (initroutine) {
314 (*initroutine)(mtd); 318 (*initroutine)(mtd);
315 inter_module_put(im_funcname); 319 symbol_put_addr(initroutine);
316 return; 320 return;
317 } 321 }
318 printk(KERN_NOTICE "Cannot find driver for DiskOnChip %s at 0x%lX\n", name, physadr); 322 printk(KERN_NOTICE "Cannot find driver for DiskOnChip %s at 0x%lX\n", name, physadr);