From b42a2098ebec7ece6ba075ee55f5c29061526a24 Mon Sep 17 00:00:00 2001
From: inmarket <andrewh@inmarket.com.au>
Date: Fri, 26 Sep 2014 16:29:52 +1000
Subject: Change to GDriver to support an initialisation parameter

---
 src/gdisp/driver.h            | 2 +-
 src/gdisp/gdisp_gdisp.c       | 9 +++++----
 src/gdriver/gdriver_gdriver.c | 4 ++--
 src/gdriver/sys_defs.h        | 5 +++--
 4 files changed, 11 insertions(+), 9 deletions(-)

(limited to 'src')

diff --git a/src/gdisp/driver.h b/src/gdisp/driver.h
index 98bf64fc..8d22135d 100644
--- a/src/gdisp/driver.h
+++ b/src/gdisp/driver.h
@@ -620,7 +620,7 @@ typedef struct GDISPVMT {
 	#ifdef __cplusplus
 	extern "C" {
 	#endif
-		bool_t _gdispInitDriver(GDriver *g, unsigned driverinstance, unsigned systeminstance);
+		bool_t _gdispInitDriver(GDriver *g, void *param, unsigned driverinstance, unsigned systeminstance);
 		void _gdispPostInitDriver(GDriver *g);
 		void _gdispDeInitDriver(GDriver *g);
 	#ifdef __cplusplus
diff --git a/src/gdisp/gdisp_gdisp.c b/src/gdisp/gdisp_gdisp.c
index 74cfb67e..1552cea6 100644
--- a/src/gdisp/gdisp_gdisp.c
+++ b/src/gdisp/gdisp_gdisp.c
@@ -572,7 +572,7 @@ void _gdispInit(void)
 			static const struct GDriverVMT const *	dclist[] = {GDISP_DRIVER_LIST};
 
 			for(i = 0; i < sizeof(dclist)/sizeof(dclist[0]); i++)
-				gdriverRegister(dclist[i]);
+				gdriverRegister(dclist[i], 0);
 		}
 	#elif GDISP_TOTAL_DISPLAYS > 1
 		{
@@ -580,13 +580,13 @@ void _gdispInit(void)
 			extern GDriverVMTList					GDISPVMT_OnlyOne;
 
 			for(i = 0; i < GDISP_TOTAL_DISPLAYS; i++)
-				gdriverRegister(GDISPVMT_OnlyOne);
+				gdriverRegister(GDISPVMT_OnlyOne, 0);
 		}
 	#else
 		{
 			extern GDriverVMTList					GDISPVMT_OnlyOne;
 
-			gdriverRegister(GDISPVMT_OnlyOne);
+			gdriverRegister(GDISPVMT_OnlyOne, 0);
 		}
 	#endif
 
@@ -620,9 +620,10 @@ void _gdispDeinit(void)
 	/* ToDo */
 }
 
-bool_t _gdispInitDriver(GDriver *g, unsigned driverinstance, unsigned systeminstance) {
+bool_t _gdispInitDriver(GDriver *g, void *param, unsigned driverinstance, unsigned systeminstance) {
 	#define		gd		((GDisplay *)g)
 	bool_t		ret;
+	(void)		param;
 
 	// Intialise fields
 	gd->systemdisplay = systeminstance;
diff --git a/src/gdriver/gdriver_gdriver.c b/src/gdriver/gdriver_gdriver.c
index 3c17fca0..d44d6f3c 100644
--- a/src/gdriver/gdriver_gdriver.c
+++ b/src/gdriver/gdriver_gdriver.c
@@ -27,7 +27,7 @@ void _gdriverDeinit(void) {
 }
 
 
-GDriver *gdriverRegister(const GDriverVMT *vmt) {
+GDriver *gdriverRegister(const GDriverVMT *vmt, void *param) {
 	GDriver *	pd;
 	GDriver *	dtail;
 	unsigned	dinstance, sinstance;
@@ -47,7 +47,7 @@ GDriver *gdriverRegister(const GDriverVMT *vmt) {
 		return 0;
     memset(pd, 0, vmt->objsize);
 	pd->vmt = vmt;
-	if (vmt->init && !vmt->init(pd, dinstance, sinstance)) {
+	if (vmt->init && !vmt->init(pd, param, dinstance, sinstance)) {
 		gfxFree(pd);
 		return 0;
 	}
diff --git a/src/gdriver/sys_defs.h b/src/gdriver/sys_defs.h
index d8de25fc..f7bf622e 100644
--- a/src/gdriver/sys_defs.h
+++ b/src/gdriver/sys_defs.h
@@ -67,7 +67,7 @@ typedef struct GDriverVMT {
 	uint16_t	type;																// @< What type of driver this is
 	uint16_t	flags;																// @< Flags for the driver. Meaning is specific to each driver type.
 	uint32_t	objsize;															// @< How big the runtime driver structure is
-	bool_t		(*init)(GDriver *driver, unsigned driverinstance, unsigned systeminstance);	// @< Initialise the driver. Returns TRUE if OK.
+	bool_t		(*init)(GDriver *driver, void *param, unsigned driverinstance, unsigned systeminstance);	// @< Initialise the driver. Returns TRUE if OK.
 																					//		driverinstance is the instance 0..n of this driver.
 																					//		systeminstance is the instance 0..n of this type of device.
 																					//      The memory allocated is cleared before this call.
@@ -102,8 +102,9 @@ extern "C" {
 	 * @return	The runtime driver structure or NULL if it fails.
 	 *
 	 * @param[in]	vmt		The driver's vmt
+	 * @param[in]	param	An arbitrary paramater passed to the driver init routine.
 	 */
-	GDriver *gdriverRegister(const GDriverVMT *vmt);
+	GDriver *gdriverRegister(const GDriverVMT *vmt, void *param);
 
 	/**
 	 * @brief	UnRegister a driver instance.
-- 
cgit v1.2.3