X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmtd%2Fdevices%2Fdocprobe.c;fp=drivers%2Fmtd%2Fdevices%2Fdocprobe.c;h=13178b9dd00aa1db3a72a3a9a87100efff547029;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=78872c3f3760d63f191deed477a7307bb5d4c505;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c index 78872c3f3..13178b9dd 100644 --- a/drivers/mtd/devices/docprobe.c +++ b/drivers/mtd/devices/docprobe.c @@ -40,6 +40,7 @@ */ #define DOC_SINGLE_DRIVER +#include #include #include #include @@ -230,10 +231,6 @@ static inline int __init doccheck(void __iomem *potential, unsigned long physadr static int docfound; -extern void DoC2k_init(struct mtd_info *); -extern void DoCMil_init(struct mtd_info *); -extern void DoCMilPlus_init(struct mtd_info *); - static void __init DoC_Probe(unsigned long physadr) { void __iomem *docptr; @@ -242,6 +239,8 @@ static void __init DoC_Probe(unsigned long physadr) int ChipID; char namebuf[15]; char *name = namebuf; + char *im_funcname = NULL; + char *im_modname = NULL; void (*initroutine)(struct mtd_info *) = NULL; docptr = ioremap(physadr, DOC_IOREMAP_LEN); @@ -279,33 +278,41 @@ static void __init DoC_Probe(unsigned long physadr) switch(ChipID) { case DOC_ChipID_Doc2kTSOP: name="2000 TSOP"; - initroutine = symbol_request(DoC2k_init); + im_funcname = "DoC2k_init"; + im_modname = "doc2000"; break; case DOC_ChipID_Doc2k: name="2000"; - initroutine = symbol_request(DoC2k_init); + im_funcname = "DoC2k_init"; + im_modname = "doc2000"; break; case DOC_ChipID_DocMil: name="Millennium"; #ifdef DOC_SINGLE_DRIVER - initroutine = symbol_request(DoC2k_init); + im_funcname = "DoC2k_init"; + im_modname = "doc2000"; #else - initroutine = symbol_request(DoCMil_init); + im_funcname = "DoCMil_init"; + im_modname = "doc2001"; #endif /* DOC_SINGLE_DRIVER */ break; case DOC_ChipID_DocMilPlus16: case DOC_ChipID_DocMilPlus32: name="MillenniumPlus"; - initroutine = symbol_request(DoCMilPlus_init); + im_funcname = "DoCMilPlus_init"; + im_modname = "doc2001plus"; break; } + if (im_funcname) + initroutine = inter_module_get_request(im_funcname, im_modname); + if (initroutine) { (*initroutine)(mtd); - symbol_put_addr(initroutine); + inter_module_put(im_funcname); return; } printk(KERN_NOTICE "Cannot find driver for DiskOnChip %s at 0x%lX\n", name, physadr);