From 5e535429a9117b8b6219da0e0cb087f52c0c9597 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 8 May 2006 14:05:05 +0100 Subject: Remove inter_module_xxx() from DiskOnChip drivers. Finally putting it back how it was before Keith got at it -- yay :) Signed-off-by: David Woodhouse --- drivers/mtd/devices/docprobe.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'drivers/mtd/devices/docprobe.c') diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c index 13178b9dd00..b83afe01574 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) } if (im_funcname) - initroutine = inter_module_get_request(im_funcname, im_modname); + initroutine = symbol_get(im_funcname); + if (!initroutine) { + request_module(in_modname); + initroutine = symbol_get(im_funcname); + } if (initroutine) { (*initroutine)(mtd); - inter_module_put(im_funcname); + symbol_put_addr(initroutine); return; } printk(KERN_NOTICE "Cannot find driver for DiskOnChip %s at 0x%lX\n", name, physadr); -- cgit v1.2.3-70-g09d2 From 396674e58fb9d01b7768ccb8db181aea8ebead0e Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 8 May 2006 17:10:11 +0100 Subject: Fix non-modular case for DiskOnChip probe Signed-off-by: David Woodhouse --- drivers/mtd/devices/docprobe.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'drivers/mtd/devices/docprobe.c') diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c index b83afe01574..32f1d332f5b 100644 --- a/drivers/mtd/devices/docprobe.c +++ b/drivers/mtd/devices/docprobe.c @@ -231,6 +231,27 @@ static inline int __init doccheck(void __iomem *potential, unsigned long physadr static int docfound; +#ifdef CONFIG_DOC2000 +extern void DoC2k_init(struct mtd_info *); +#define doc2k_initfunc (&DoC2k_init) +#else +#define doc2k_initfunc NULL +#endif + +#ifdef CONFIG_DOC2001 +extern void DoCMil_init(struct mtd_info *); +#define docmil_initfunc (&DoCMil_init) +#else +#define docmil_initfunc NULL +#endif + +#ifdef CONFIG_DOC2001PLUS +extern void DoCMilPlus_init(struct mtd_info *); +#define docmplus_initfunc (&DoCMilPlus_init) +#else +#define docmplus_initfunc NULL +#endif + static void __init DoC_Probe(unsigned long physadr) { void __iomem *docptr; @@ -280,12 +301,14 @@ static void __init DoC_Probe(unsigned long physadr) name="2000 TSOP"; im_funcname = "DoC2k_init"; im_modname = "doc2000"; + initroutine = doc2k_initfunc; break; case DOC_ChipID_Doc2k: name="2000"; im_funcname = "DoC2k_init"; im_modname = "doc2000"; + initroutine = doc2k_initfunc; break; case DOC_ChipID_DocMil: @@ -293,9 +316,11 @@ static void __init DoC_Probe(unsigned long physadr) #ifdef DOC_SINGLE_DRIVER im_funcname = "DoC2k_init"; im_modname = "doc2000"; + initroutine = doc2k_initfunc; #else im_funcname = "DoCMil_init"; im_modname = "doc2001"; + initroutine = docmil_initfunc; #endif /* DOC_SINGLE_DRIVER */ break; @@ -304,16 +329,18 @@ static void __init DoC_Probe(unsigned long physadr) name="MillenniumPlus"; im_funcname = "DoCMilPlus_init"; im_modname = "doc2001plus"; + initroutine = docmplus_initfunc; break; } - if (im_funcname) +#ifdef CONFIG_MODULES + if (im_funcname && !initroutine) initroutine = symbol_get(im_funcname); - if (!initroutine) { - request_module(in_modname); + if (im_funcname && !initroutine) { + request_module(im_modname); initroutine = symbol_get(im_funcname); } - +#endif if (initroutine) { (*initroutine)(mtd); symbol_put_addr(initroutine); -- cgit v1.2.3-70-g09d2 From ce589a0328866228412ea0df2c834688da8f4700 Mon Sep 17 00:00:00 2001 From: Adrian Bunk Date: Tue, 16 May 2006 13:46:44 +0200 Subject: drivers/mtd/devices/docprobe.c: correct #if's On Mon, May 15, 2006 at 12:56:37AM -0700, Andrew Morton wrote: >... > Changes since 2.6.17-rc3-mm1: >... > git-mtd.patch >... > git trees >... If we correct the names of the config options, the code might actually work as intended... Signed-off-by: Adrian Bunk Signed-off-by: David Woodhouse --- drivers/mtd/devices/docprobe.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'drivers/mtd/devices/docprobe.c') diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c index 32f1d332f5b..42ec08416a6 100644 --- a/drivers/mtd/devices/docprobe.c +++ b/drivers/mtd/devices/docprobe.c @@ -231,21 +231,21 @@ static inline int __init doccheck(void __iomem *potential, unsigned long physadr static int docfound; -#ifdef CONFIG_DOC2000 +#ifdef CONFIG_MTD_DOC2000 extern void DoC2k_init(struct mtd_info *); #define doc2k_initfunc (&DoC2k_init) #else #define doc2k_initfunc NULL #endif -#ifdef CONFIG_DOC2001 +#ifdef CONFIG_MTD_DOC2001 extern void DoCMil_init(struct mtd_info *); #define docmil_initfunc (&DoCMil_init) #else #define docmil_initfunc NULL #endif -#ifdef CONFIG_DOC2001PLUS +#ifdef CONFIG_MTD_DOC2001PLUS extern void DoCMilPlus_init(struct mtd_info *); #define docmplus_initfunc (&DoCMilPlus_init) #else -- cgit v1.2.3-70-g09d2 From dcb6592d72923123e3e479134f9381e0133d7d9d Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Fri, 19 May 2006 18:06:34 -0700 Subject: git-mtd: symbol_get() fix drivers/mtd/devices/docprobe.c: In function `DoC_Probe': drivers/mtd/devices/docprobe.c:338: warning: assignment from incompatible pointer type drivers/mtd/devices/docprobe.c:341: warning: assignment from incompatible pointer type Cc: David Woodhouse Signed-off-by: Andrew Morton Signed-off-by: David Woodhouse --- drivers/mtd/devices/docprobe.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/mtd/devices/docprobe.c') diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c index 42ec08416a6..dce4c904b63 100644 --- a/drivers/mtd/devices/docprobe.c +++ b/drivers/mtd/devices/docprobe.c @@ -335,10 +335,10 @@ static void __init DoC_Probe(unsigned long physadr) #ifdef CONFIG_MODULES if (im_funcname && !initroutine) - initroutine = symbol_get(im_funcname); + initroutine = __symbol_get(im_funcname); if (im_funcname && !initroutine) { request_module(im_modname); - initroutine = symbol_get(im_funcname); + initroutine = __symbol_get(im_funcname); } #endif if (initroutine) { -- cgit v1.2.3-70-g09d2 From ecde26313076e5055dcd54d6537632275346203f Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 21 May 2006 18:38:51 +0100 Subject: [MTD] Use symbol_request() in old DiskOnChip probe code to find actual driver The previous code wouldn't work correctly on architectures which have a non-empty MODULE_SYMBOL_PREFIX, and this version is neater if slightly less optimal in the built-in case. Signed-off-by: David Woodhouse --- drivers/mtd/devices/docprobe.c | 47 +++++------------------------------------- 1 file changed, 5 insertions(+), 42 deletions(-) (limited to 'drivers/mtd/devices/docprobe.c') diff --git a/drivers/mtd/devices/docprobe.c b/drivers/mtd/devices/docprobe.c index dce4c904b63..593bb033a3f 100644 --- a/drivers/mtd/devices/docprobe.c +++ b/drivers/mtd/devices/docprobe.c @@ -231,26 +231,9 @@ static inline int __init doccheck(void __iomem *potential, unsigned long physadr static int docfound; -#ifdef CONFIG_MTD_DOC2000 extern void DoC2k_init(struct mtd_info *); -#define doc2k_initfunc (&DoC2k_init) -#else -#define doc2k_initfunc NULL -#endif - -#ifdef CONFIG_MTD_DOC2001 extern void DoCMil_init(struct mtd_info *); -#define docmil_initfunc (&DoCMil_init) -#else -#define docmil_initfunc NULL -#endif - -#ifdef CONFIG_MTD_DOC2001PLUS extern void DoCMilPlus_init(struct mtd_info *); -#define docmplus_initfunc (&DoCMilPlus_init) -#else -#define docmplus_initfunc NULL -#endif static void __init DoC_Probe(unsigned long physadr) { @@ -260,8 +243,6 @@ 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); @@ -299,48 +280,30 @@ static void __init DoC_Probe(unsigned long physadr) switch(ChipID) { case DOC_ChipID_Doc2kTSOP: name="2000 TSOP"; - im_funcname = "DoC2k_init"; - im_modname = "doc2000"; - initroutine = doc2k_initfunc; + initroutine = symbol_request(DoC2k_init); break; case DOC_ChipID_Doc2k: name="2000"; - im_funcname = "DoC2k_init"; - im_modname = "doc2000"; - initroutine = doc2k_initfunc; + initroutine = symbol_request(DoC2k_init); break; case DOC_ChipID_DocMil: name="Millennium"; #ifdef DOC_SINGLE_DRIVER - im_funcname = "DoC2k_init"; - im_modname = "doc2000"; - initroutine = doc2k_initfunc; + initroutine = symbol_request(DoC2k_init); #else - im_funcname = "DoCMil_init"; - im_modname = "doc2001"; - initroutine = docmil_initfunc; + initroutine = symbol_request(DoCMil_init); #endif /* DOC_SINGLE_DRIVER */ break; case DOC_ChipID_DocMilPlus16: case DOC_ChipID_DocMilPlus32: name="MillenniumPlus"; - im_funcname = "DoCMilPlus_init"; - im_modname = "doc2001plus"; - initroutine = docmplus_initfunc; + initroutine = symbol_request(DoCMilPlus_init); break; } -#ifdef CONFIG_MODULES - if (im_funcname && !initroutine) - initroutine = __symbol_get(im_funcname); - if (im_funcname && !initroutine) { - request_module(im_modname); - initroutine = __symbol_get(im_funcname); - } -#endif if (initroutine) { (*initroutine)(mtd); symbol_put_addr(initroutine); -- cgit v1.2.3-70-g09d2