From 6589e9111e802d665129c9b4cb1fca0510322490 Mon Sep 17 00:00:00 2001 From: hwg Date: Thu, 12 Feb 2015 15:22:38 +0800 Subject: [PATCH] rfkill-wlan.c: support rk3368 --- include/linux/rfkill-wlan.h | 1 + net/rfkill/rfkill-wlan.c | 50 ++++++++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 12 deletions(-) mode change 100755 => 100644 net/rfkill/rfkill-wlan.c diff --git a/include/linux/rfkill-wlan.h b/include/linux/rfkill-wlan.h index 17257c9cb14b..c04966e432c9 100755 --- a/include/linux/rfkill-wlan.h +++ b/include/linux/rfkill-wlan.h @@ -39,6 +39,7 @@ struct rksdmmc_gpio_wifi_moudle { struct rksdmmc_gpio ANTSEL2; //pin5--ANTSEL2 struct rksdmmc_gpio ANTSEL3; //pin6--ANTSEL3 struct rksdmmc_gpio GPS_LAN; //pin33--GPS_LAN + struct regmap *grf; }; enum { diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c old mode 100755 new mode 100644 index 70c2d8912427..5dc9fff493ee --- a/net/rfkill/rfkill-wlan.c +++ b/net/rfkill/rfkill-wlan.c @@ -36,6 +36,10 @@ #include #include #include +#include +#include +#include +#include #ifdef CONFIG_OF #include #include @@ -115,7 +119,7 @@ EXPORT_SYMBOL(get_wifi_chip_type); * **********************************************************/ #ifdef CONFIG_RKWIFI -#define BCM_STATIC_MEMORY_SUPPORT 1 +#define BCM_STATIC_MEMORY_SUPPORT 0 #else #define BCM_STATIC_MEMORY_SUPPORT 0 #endif @@ -572,6 +576,7 @@ void *rockchip_wifi_country_code(char *ccode) EXPORT_SYMBOL(rockchip_wifi_country_code); /**************************************************************************/ +#define RK3368_GRF_IO_VSEL 0x900 static int rockchip_wifi_voltage_select(void) { struct rfkill_wlan_data *mrfkill = g_rfkill; @@ -581,17 +586,32 @@ static int rockchip_wifi_voltage_select(void) LOG("%s: rfkill-wlan driver has not Successful initialized\n", __func__); return -1; } + voltage = mrfkill->pdata->sdio_vol; - if (voltage > 2700 && voltage < 3500) { - writel_relaxed(0x00100000, RK_GRF_VIRT+0x380); //3.3 - LOG("%s: wifi & sdio reference voltage: 3.3V\n", __func__); - } else if (voltage > 1500 && voltage < 1950) { - writel_relaxed(0x00100010, RK_GRF_VIRT+0x380); //1.8 - LOG("%s: wifi & sdio reference voltage: 1.8V\n", __func__); - } else { - LOG("%s: unsupport wifi & sdio reference voltage!\n", __func__); - return -1; - } + if (cpu_is_rk3288()) { + if (voltage > 2700 && voltage < 3500) { + writel_relaxed(0x00100000, RK_GRF_VIRT+0x380); //3.3 + LOG("%s: wifi & sdio reference voltage: 3.3V\n", __func__); + } else if (voltage > 1500 && voltage < 1950) { + writel_relaxed(0x00100010, RK_GRF_VIRT+0x380); //1.8 + LOG("%s: wifi & sdio reference voltage: 1.8V\n", __func__); + } else { + LOG("%s: unsupport wifi & sdio reference voltage!\n", __func__); + return -1; + } + } else if(cpu_is_rk3036() || cpu_is_rk312x()) { + } else { + if (voltage > 2700 && voltage < 3500) { + regmap_write(mrfkill->pdata->grf, RK3368_GRF_IO_VSEL, ((1<<3)<<16)|(0<<3)); //3.3 + LOG("%s: wifi & sdio reference voltage: 3.3V\n", __func__); + } else if (voltage > 1500 && voltage < 1950) { + regmap_write(mrfkill->pdata->grf, RK3368_GRF_IO_VSEL, ((1<<3)<<16)|(1<<3)); //1.8 + LOG("%s: wifi & sdio reference voltage: 1.8V\n", __func__); + } else { + LOG("%s: unsupport wifi & sdio reference voltage!\n", __func__); + return -1; + } + } return 0; } @@ -626,6 +646,12 @@ static int wlan_platdata_parse_dt(struct device *dev, memset(data, 0, sizeof(*data)); + data->grf = syscon_regmap_lookup_by_phandle(node, "rockchip,grf"); + if (IS_ERR(data->grf)) { + LOG("can't find rockchip,grf property\n"); + return -1; + } + ret = of_property_read_string(node, "wifi_chip_type", &strings); if (ret) { LOG("%s: Can not read wifi_chip_type, set default to rkwifi.\n", __func__); @@ -642,7 +668,7 @@ static int wlan_platdata_parse_dt(struct device *dev, return -1; } data->sdio_vol = value;*/ - }else{ + }else { ret = of_property_read_u32(node, "sdio_vref", &value); if (ret < 0) { LOG("%s: Can't get sdio vref.", __func__); -- 2.34.1