Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

Fix non-modular case for DiskOnChip probe

parent 5e535429
Loading
Loading
Loading
Loading
+31 −4
Original line number Original line Diff line number Diff line
@@ -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)
			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)
#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)
			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);