From 9b18f3c7d7e141c3fdd65dfdebabed3ac8c3b1bd Mon Sep 17 00:00:00 2001 From: zzc Date: Wed, 2 Aug 2017 09:43:56 +0800 Subject: [PATCH] net: rfkill-wlan: fix read wifi mac address failed Change-Id: I4eea5e32a063bca45671c8a70d48b26bb2e7bd44 Signed-off-by: zzc --- drivers/soc/rockchip/rk_vendor_storage.c | 8 ++++++++ include/linux/soc/rockchip/rk_vendor_storage.h | 1 + net/rfkill/rfkill-wlan.c | 7 +++++++ 3 files changed, 16 insertions(+) diff --git a/drivers/soc/rockchip/rk_vendor_storage.c b/drivers/soc/rockchip/rk_vendor_storage.c index 759f0282baf0..0ff5a09b4fbf 100644 --- a/drivers/soc/rockchip/rk_vendor_storage.c +++ b/drivers/soc/rockchip/rk_vendor_storage.c @@ -38,3 +38,11 @@ int rk_vendor_register(void *read, void *write) return -1; } EXPORT_SYMBOL(rk_vendor_register); + +bool is_rk_vendor_ready(void) +{ + if (_vendor_read && _vendor_write) + return true; + return false; +} +EXPORT_SYMBOL(is_rk_vendor_ready); diff --git a/include/linux/soc/rockchip/rk_vendor_storage.h b/include/linux/soc/rockchip/rk_vendor_storage.h index 0bd4a5eb67f9..609974a5648a 100644 --- a/include/linux/soc/rockchip/rk_vendor_storage.h +++ b/include/linux/soc/rockchip/rk_vendor_storage.h @@ -19,5 +19,6 @@ int rk_vendor_read(u32 id, void *pbuf, u32 size); int rk_vendor_write(u32 id, void *pbuf, u32 size); int rk_vendor_register(void *read, void *write); +bool is_rk_vendor_ready(void); #endif diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c index 814010a0c457..66accd5f84f2 100644 --- a/net/rfkill/rfkill-wlan.c +++ b/net/rfkill/rfkill-wlan.c @@ -454,7 +454,14 @@ u8 wifi_custom_mac_addr[6] = {0,0,0,0,0,0}; static int get_wifi_addr_vendor(unsigned char *addr) { int ret; + int count = 5; + while (count-- > 0) { + if (is_rk_vendor_ready()) + break; + /* sleep 500ms wait rk vendor driver ready */ + msleep(500); + } ret = rk_vendor_read(WIFI_MAC_ID, addr, 6); if (ret != 6 || is_zero_ether_addr(addr)) { LOG("%s: rk_vendor_read wifi mac address failed (%d)\n", -- 2.34.1