summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSarada Prasanna Garnayak <sgarna@codeaurora.org>2017-08-08 12:52:44 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2017-08-18 06:44:26 -0700
commitf1594495ecd418d7c3afe071aa8355561995dca1 (patch)
treebbded3728f9d74590cbd018acd0be6a4371ce3ae
parenta49bb61510b938152025049730fa922c5da950a1 (diff)
wcnss: update MAC address generate logic from the serial number
The WLAN host driver use device serial number to generate MAC address. The wcnss platform driver export symbol for WLAN host driver to read the device serial number to generate the MAC address. Add updated SOC API to get the device serial number in the wcnss platform driver. CRs-Fixed: 2089225 Change-Id: Ic540f2e6e705131f18b59e8f139087d5d99024f6 Signed-off-by: Sarada Prasanna Garnayak <sgarna@codeaurora.org>
-rw-r--r--drivers/net/wireless/wcnss/wcnss_wlan.c56
1 files changed, 8 insertions, 48 deletions
diff --git a/drivers/net/wireless/wcnss/wcnss_wlan.c b/drivers/net/wireless/wcnss/wcnss_wlan.c
index e99d46ca51b0..ed56943733de 100644
--- a/drivers/net/wireless/wcnss/wcnss_wlan.c
+++ b/drivers/net/wireless/wcnss/wcnss_wlan.c
@@ -37,6 +37,7 @@
#include <linux/pinctrl/consumer.h>
#include <linux/pm_qos.h>
#include <linux/bitops.h>
+#include <soc/qcom/socinfo.h>
#include <soc/qcom/subsystem_restart.h>
#include <soc/qcom/subsystem_notif.h>
@@ -187,11 +188,9 @@ static DEFINE_SPINLOCK(reg_spinlock);
#define WCNSS_MAX_BUILD_VER_LEN 256
#define WCNSS_MAX_CMD_LEN (128)
#define WCNSS_MIN_CMD_LEN (3)
-#define WCNSS_MIN_SERIAL_LEN (6)
/* control messages from userspace */
#define WCNSS_USR_CTRL_MSG_START 0x00000000
-#define WCNSS_USR_SERIAL_NUM (WCNSS_USR_CTRL_MSG_START + 1)
#define WCNSS_USR_HAS_CAL_DATA (WCNSS_USR_CTRL_MSG_START + 2)
#define WCNSS_USR_WLAN_MAC_ADDR (WCNSS_USR_CTRL_MSG_START + 3)
@@ -482,34 +481,6 @@ static ssize_t wcnss_wlan_macaddr_show(struct device *dev,
static DEVICE_ATTR(wcnss_mac_addr, S_IRUSR | S_IWUSR,
wcnss_wlan_macaddr_show, wcnss_wlan_macaddr_store);
-static ssize_t wcnss_serial_number_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- if (!penv)
- return -ENODEV;
-
- return scnprintf(buf, PAGE_SIZE, "%08X\n", penv->serial_number);
-}
-
-static ssize_t wcnss_serial_number_store(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t count)
-{
- unsigned int value;
-
- if (!penv)
- return -ENODEV;
-
- if (sscanf(buf, "%08X", &value) != 1)
- return -EINVAL;
-
- penv->serial_number = value;
- return count;
-}
-
-static DEVICE_ATTR(serial_number, S_IRUSR | S_IWUSR,
- wcnss_serial_number_show, wcnss_serial_number_store);
-
-
static ssize_t wcnss_thermal_mitigation_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
@@ -1178,13 +1149,9 @@ static int wcnss_create_sysfs(struct device *dev)
if (!dev)
return -ENODEV;
- ret = device_create_file(dev, &dev_attr_serial_number);
- if (ret)
- return ret;
-
ret = device_create_file(dev, &dev_attr_thermal_mitigation);
if (ret)
- goto remove_serial;
+ return ret;
ret = device_create_file(dev, &dev_attr_wcnss_version);
if (ret)
@@ -1200,8 +1167,6 @@ remove_version:
device_remove_file(dev, &dev_attr_wcnss_version);
remove_thermal:
device_remove_file(dev, &dev_attr_thermal_mitigation);
-remove_serial:
- device_remove_file(dev, &dev_attr_serial_number);
return ret;
}
@@ -1209,7 +1174,6 @@ remove_serial:
static void wcnss_remove_sysfs(struct device *dev)
{
if (dev) {
- device_remove_file(dev, &dev_attr_serial_number);
device_remove_file(dev, &dev_attr_thermal_mitigation);
device_remove_file(dev, &dev_attr_wcnss_version);
device_remove_file(dev, &dev_attr_wcnss_mac_addr);
@@ -1657,8 +1621,13 @@ EXPORT_SYMBOL(wcnss_unregister_thermal_mitigation);
unsigned int wcnss_get_serial_number(void)
{
- if (penv)
+ if (penv) {
+ penv->serial_number = socinfo_get_serial_number();
+ pr_info("%s: Device serial number: %u\n",
+ __func__, penv->serial_number);
return penv->serial_number;
+ }
+
return 0;
}
EXPORT_SYMBOL(wcnss_get_serial_number);
@@ -2648,15 +2617,6 @@ void process_usr_ctrl_cmd(u8 *buf, size_t len)
switch (cmd) {
- case WCNSS_USR_SERIAL_NUM:
- if (WCNSS_MIN_SERIAL_LEN > len) {
- pr_err("%s: Invalid serial number\n", __func__);
- return;
- }
- penv->serial_number = buf[2] << 24 | buf[3] << 16
- | buf[4] << 8 | buf[5];
- break;
-
case WCNSS_USR_HAS_CAL_DATA:
if (1 < buf[2])
pr_err("%s: Invalid data for cal %d\n", __func__,