summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2011-07-19 15:59:13 -0700
committerDmitry Shmidt <dimitrysh@google.com>2011-07-19 15:59:13 -0700
commit29a4d4d74b512e450a7d2ae97d4222c24a13b87e (patch)
tree2464789bc103c7da8be2f18b4ac7f78e65d3c422
parent437fee8c60ef8f573c1a1816bffc67dfe306500d (diff)
downloadlibhardware_legacy-29a4d4d74b512e450a7d2ae97d4222c24a13b87e.tar.gz
wifi: Add wifi_change_fw_path()
Change-Id: I1c4afe43457a295c0ffe0a865c6c331109dce614 Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
-rw-r--r--include/hardware_legacy/wifi.h5
-rw-r--r--wifi/Android.mk3
-rw-r--r--wifi/wifi.c26
3 files changed, 34 insertions, 0 deletions
diff --git a/include/hardware_legacy/wifi.h b/include/hardware_legacy/wifi.h
index fe48553..e83e6ba 100644
--- a/include/hardware_legacy/wifi.h
+++ b/include/hardware_legacy/wifi.h
@@ -180,6 +180,11 @@ const char *get_dhcp_error_string();
#define WIFI_GET_FW_PATH_P2P 2
const char *wifi_get_fw_path(int fw_type);
+/**
+ * Change the path to firmware for the wlan driver
+ */
+int wifi_change_fw_path(const char *fwpath);
+
#if __cplusplus
}; // extern "C"
#endif
diff --git a/wifi/Android.mk b/wifi/Android.mk
index 8455d26..b4a6a7c 100644
--- a/wifi/Android.mk
+++ b/wifi/Android.mk
@@ -24,6 +24,9 @@ endif
ifdef WIFI_DRIVER_FW_PATH_P2P
LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_P2P=\"$(WIFI_DRIVER_FW_PATH_P2P)\"
endif
+ifdef WIFI_DRIVER_FW_PATH_PARAM
+LOCAL_CFLAGS += -DWIFI_DRIVER_FW_PATH_PARAM=\"$(WIFI_DRIVER_FW_PATH_PARAM)\"
+endif
LOCAL_SRC_FILES += wifi/wifi.c
diff --git a/wifi/wifi.c b/wifi/wifi.c
index 2591a23..fda81be 100644
--- a/wifi/wifi.c
+++ b/wifi/wifi.c
@@ -67,6 +67,10 @@ static char iface[PROPERTY_VALUE_MAX];
#define WIFI_DRIVER_FW_PATH_P2P NULL
#endif
+#ifndef WIFI_DRIVER_FW_PATH_PARAM
+#define WIFI_DRIVER_FW_PATH_PARAM "/sys/module/wlan/parameters/fwpath"
+#endif
+
#define WIFI_DRIVER_LOADER_DELAY 1000000
static const char IFACE_DIR[] = "/data/system/wpa_supplicant";
@@ -627,3 +631,25 @@ const char *wifi_get_fw_path(int fw_type)
}
return NULL;
}
+
+int wifi_change_fw_path(const char *fwpath)
+{
+ int len;
+ int fd;
+ int ret = 0;
+
+ if (!fwpath)
+ return ret;
+ fd = open(WIFI_DRIVER_FW_PATH_PARAM, O_WRONLY);
+ if (fd < 0) {
+ LOGE("Failed to open wlan fw path param (%s)", strerror(errno));
+ return -1;
+ }
+ len = strlen(fwpath) + 1;
+ if (write(fd, fwpath, len) != len) {
+ LOGE("Failed to write wlan fw path param (%s)", strerror(errno));
+ ret = -1;
+ }
+ close(fd);
+ return ret;
+}