Commit 396674e5 authored by David Woodhouse's avatar David Woodhouse

Fix non-modular case for DiskOnChip probe

Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent 5e535429
...@@ -231,6 +231,27 @@ static inline int __init doccheck(void __iomem *potential, unsigned long physadr ...@@ -231,6 +231,27 @@ static inline int __init doccheck(void __iomem *potential, unsigned long physadr
static int docfound; 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) static void __init DoC_Probe(unsigned long physadr)
{ {
void __iomem *docptr; void __iomem *docptr;
...@@ -280,12 +301,14 @@ static void __init DoC_Probe(unsigned long physadr) ...@@ -280,12 +301,14 @@ static void __init DoC_Probe(unsigned long physadr)
name="2000 TSOP"; name="2000 TSOP";
im_funcname = "DoC2k_init"; im_funcname = "DoC2k_init";
im_modname = "doc2000"; im_modname = "doc2000";
initroutine = doc2k_initfunc;
break; break;
case DOC_ChipID_Doc2k: case DOC_ChipID_Doc2k:
name="2000"; name="2000";
im_funcname = "DoC2k_init"; im_funcname = "DoC2k_init";
im_modname = "doc2000"; im_modname = "doc2000";
initroutine = doc2k_initfunc;
break; break;
case DOC_ChipID_DocMil: case DOC_ChipID_DocMil:
...@@ -293,9 +316,11 @@ static void __init DoC_Probe(unsigned long physadr) ...@@ -293,9 +316,11 @@ static void __init DoC_Probe(unsigned long physadr)
#ifdef DOC_SINGLE_DRIVER #ifdef DOC_SINGLE_DRIVER
im_funcname = "DoC2k_init"; im_funcname = "DoC2k_init";
im_modname = "doc2000"; im_modname = "doc2000";
initroutine = doc2k_initfunc;
#else #else
im_funcname = "DoCMil_init"; im_funcname = "DoCMil_init";
im_modname = "doc2001"; im_modname = "doc2001";
initroutine = docmil_initfunc;
#endif /* DOC_SINGLE_DRIVER */ #endif /* DOC_SINGLE_DRIVER */
break; break;
...@@ -304,16 +329,18 @@ static void __init DoC_Probe(unsigned long physadr) ...@@ -304,16 +329,18 @@ static void __init DoC_Probe(unsigned long physadr)
name="MillenniumPlus"; name="MillenniumPlus";
im_funcname = "DoCMilPlus_init"; im_funcname = "DoCMilPlus_init";
im_modname = "doc2001plus"; im_modname = "doc2001plus";
initroutine = docmplus_initfunc;
break; break;
} }
if (im_funcname) #ifdef CONFIG_MODULES
if (im_funcname && !initroutine)
initroutine = symbol_get(im_funcname); initroutine = symbol_get(im_funcname);
if (!initroutine) { if (im_funcname && !initroutine) {
request_module(in_modname); request_module(im_modname);
initroutine = symbol_get(im_funcname); initroutine = symbol_get(im_funcname);
} }
#endif
if (initroutine) { if (initroutine) {
(*initroutine)(mtd); (*initroutine)(mtd);
symbol_put_addr(initroutine); symbol_put_addr(initroutine);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment