wifi: add suport for WIFI_EXT_MODULE

Some wifi modules have dependencies on others (for SDIO, usually).
Use WIFI_EXT_MODULE_PATH to specify such dependencies

Change-Id: Ie8e746c1e69712be78d420d8e8ae8b015564a03d

Conflicts:

	wifi/wifi.c

Change-Id: I3fbc0065f76d91d170fb562159ea326caa4f3345
diff --git a/wifi/Android.mk b/wifi/Android.mk
index e1c0c48..c7bdc59 100644
--- a/wifi/Android.mk
+++ b/wifi/Android.mk
@@ -30,6 +30,15 @@
 ifdef WIFI_DRIVER_FW_PATH_PARAM
 LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_PARAM=\"$(WIFI_DRIVER_FW_PATH_PARAM)\"
 endif
+ifdef WIFI_EXT_MODULE_PATH
+LOCAL_CFLAGS += -DWIFI_EXT_MODULE_PATH=\"$(WIFI_EXT_MODULE_PATH)\"
+endif
+ifdef WIFI_EXT_MODULE_ARG
+LOCAL_CFLAGS += -DWIFI_EXT_MODULE_ARG=\"$(WIFI_EXT_MODULE_ARG)\"
+endif
+ifdef WIFI_EXT_MODULE_NAME
+LOCAL_CFLAGS += -DWIFI_EXT_MODULE_NAME=\"$(WIFI_EXT_MODULE_NAME)\"
+endif
 
 LOCAL_SRC_FILES += wifi/wifi.c
 
diff --git a/wifi/wifi.c b/wifi/wifi.c
index f1c80cf..57f6243 100644
--- a/wifi/wifi.c
+++ b/wifi/wifi.c
@@ -97,6 +97,18 @@
 #define WIFI_DRIVER_FW_PATH_P2P		NULL
 #endif
 
+#ifdef WIFI_EXT_MODULE_NAME
+static const char EXT_MODULE_NAME[] = WIFI_EXT_MODULE_NAME;
+#ifdef WIFI_EXT_MODULE_ARG
+static const char EXT_MODULE_ARG[] = WIFI_EXT_MODULE_ARG;
+#else
+static const char EXT_MODULE_ARG[] = "";
+#endif
+#endif
+#ifdef WIFI_EXT_MODULE_PATH
+static const char EXT_MODULE_PATH[] = WIFI_EXT_MODULE_PATH;
+#endif
+
 #ifndef WIFI_DRIVER_FW_PATH_PARAM
 #define WIFI_DRIVER_FW_PATH_PARAM	"/sys/module/wlan/parameters/fwpath"
 #endif
@@ -263,7 +275,6 @@
     char driver_status[PROPERTY_VALUE_MAX];
     int count = 100; /* wait at most 20 seconds for completion */
     char module_arg2[256];
-
 #ifdef SAMSUNG_WIFI
     char* type = get_samsung_wifi_type();
 
@@ -275,6 +286,13 @@
 
     if (insmod(DRIVER_MODULE_PATH, module_arg2) < 0) {
 #else
+
+#ifdef WIFI_EXT_MODULE_PATH
+    if (insmod(EXT_MODULE_PATH, EXT_MODULE_ARG) < 0)
+        return -1;
+    usleep(200000);
+#endif
+
     if (insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG) < 0) {
 #endif
 
@@ -327,6 +345,9 @@
         }
         usleep(500000); /* allow card removal */
         if (count) {
+#ifdef WIFI_EXT_MODULE_NAME
+            if (rmmod(EXT_MODULE_NAME) == 0)
+#endif
             return 0;
         }
         return -1;