From 5fda03d4a938ea2b4d6e9b53fa9b0da63cc0d6db Mon Sep 17 00:00:00 2001 From: Alex Zhao Date: Mon, 16 Oct 2017 11:11:12 +0800 Subject: [PATCH] net: rfkill: rockchip: add vbat_gpio to control the wifi power supply Change-Id: I4746fd5c46c5e1a7df2bb18f80f5a8efee20605f Signed-off-by: Alex Zhao --- include/linux/rfkill-wlan.h | 1 + net/rfkill/rfkill-wlan.c | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) mode change 100755 => 100644 include/linux/rfkill-wlan.h diff --git a/include/linux/rfkill-wlan.h b/include/linux/rfkill-wlan.h old mode 100755 new mode 100644 index b78f989f18c7..bc14c93b6df2 --- a/include/linux/rfkill-wlan.h +++ b/include/linux/rfkill-wlan.h @@ -30,6 +30,7 @@ struct rksdmmc_gpio_wifi_moudle { bool wifi_power_remain; struct rksdmmc_pmu mregulator; struct rksdmmc_pmu ioregulator; + struct rksdmmc_gpio vbat_n; struct rksdmmc_gpio power_n; //PMU_EN struct rksdmmc_gpio reset_n; //SYSRET_B, DAIRST struct rksdmmc_gpio vddio; diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c index 319c44bd5b00..dc4312068a1c 100644 --- a/net/rfkill/rfkill-wlan.c +++ b/net/rfkill/rfkill-wlan.c @@ -635,6 +635,14 @@ static int wlan_platdata_parse_dt(struct device *dev, data->power_n.enable = (flags == GPIO_ACTIVE_HIGH)? 1:0; LOG("%s: get property: WIFI,poweren_gpio = %d, flags = %d.\n", __func__, gpio, flags); } else data->power_n.io = -1; + gpio = of_get_named_gpio_flags(node, "WIFI,vbat_gpio", 0, &flags); + if (gpio_is_valid(gpio)) { + data->vbat_n.io = gpio; + data->vbat_n.enable = (flags == GPIO_ACTIVE_HIGH) ? 1:0; + LOG("%s: get property: WIFI,vbat_gpio = %d, flags = %d.\n", __func__, gpio, flags); + } else { + data->vbat_n.io = -1; + } gpio = of_get_named_gpio_flags(node, "WIFI,reset_gpio", 0, &flags); if (gpio_is_valid(gpio)){ data->reset_n.io = gpio; @@ -752,15 +760,24 @@ static int rfkill_wlan_probe(struct platform_device *pdev) LOG("%s: init gpio\n", __func__); if (!pdata->mregulator.power_ctrl_by_pmu) { + ret = rfkill_rk_setup_gpio(&pdata->vbat_n, wlan_name, "wlan_vbat"); + if (ret) + goto fail_alloc; + ret = rfkill_rk_setup_gpio(&pdata->power_n, wlan_name, "wlan_poweren"); - if (ret) goto fail_alloc; + if (ret) + goto fail_alloc; ret = rfkill_rk_setup_gpio(&pdata->reset_n, wlan_name, "wlan_reset"); - if (ret) goto fail_alloc; + if (ret) + goto fail_alloc; } wake_lock_init(&(rfkill->wlan_irq_wl), WAKE_LOCK_SUSPEND, "rfkill_wlan_wake"); + if (gpio_is_valid(pdata->vbat_n.io)) { + gpio_direction_output(pdata->vbat_n.io, pdata->vbat_n.enable); + } // Turn off wifi power as default if (gpio_is_valid(pdata->power_n.io)) {