armbian_build/patch/kernel/archive/sunxi-5.16/patches.armbian/drv-net-rtl8723cs-platform.patch
The-going fbe942b150
Patching sunxi (#3463)
* Add new patches from the tag orange-pi-5.16-20220205-1958

* Remove mutually exclusive patches

* Add, sort next patches for series armbian  5.16

* Add next armbian patches to series.conf

* Swich BRANCH for sunxi: legacy=5.10 current=5.15 edge=5.16

Signed-off-by: The-going <48602507+The-going@users.noreply.github.com>

* Add upstream megous 5.16 patch to 5.15

* Add wifi rtl8723cs patches to series armbian

* Add a new one, remove old patches that are already in the kernel

* Add redesigned patches for 5.15 to the armbian series

* Remove unused patches

* Finish line

* The old rtl8723cs driver is disabled by default.

* Enable the old rtl8723cs driver by default.

* Comment enable\disable the old driver rtl8723cs-old

* Revert "Swich BRANCH for sunxi: legacy=5.10 current=5.15 edge=5.16"

This reverts commit aad1e92b5e.
2022-02-10 15:08:01 +01:00

857 lines
27 KiB
Diff

From 727d4c6e7155b838cf1cd76f3ced4bade954ad07 Mon Sep 17 00:00:00 2001
From: The-going <48602507+The-going@users.noreply.github.com>
Date: Mon, 7 Feb 2022 15:15:59 +0300
Subject: [PATCH 5/9] drv:net:rtl8723cs: platform
---
.../platform/platform_ARM_SUN50IW1P1_sdio.c | 91 +++++++++++
.../platform/platform_ARM_SUNnI_sdio.c | 135 +++++++++++++++++
.../platform/platform_ARM_SUNxI_sdio.c | 95 ++++++++++++
.../platform/platform_ARM_SUNxI_usb.c | 142 ++++++++++++++++++
.../platform/platform_ARM_WMT_sdio.c | 51 +++++++
.../rtl8723cs/platform/platform_RTK_DMP_usb.c | 36 +++++
.../platform/platform_arm_act_sdio.c | 58 +++++++
.../realtek/rtl8723cs/platform/platform_ops.c | 37 +++++
.../realtek/rtl8723cs/platform/platform_ops.h | 31 ++++
.../rtl8723cs/platform/platform_sprd_sdio.c | 89 +++++++++++
10 files changed, 765 insertions(+)
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUN50IW1P1_sdio.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNnI_sdio.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_sdio.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_usb.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_WMT_sdio.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_RTK_DMP_usb.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_arm_act_sdio.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.c
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.h
create mode 100644 drivers/net/wireless/realtek/rtl8723cs/platform/platform_sprd_sdio.c
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUN50IW1P1_sdio.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUN50IW1P1_sdio.c
new file mode 100644
index 000000000..8e78cce64
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUN50IW1P1_sdio.c
@@ -0,0 +1,91 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+/*
+ * Description:
+ * This file can be applied to following platforms:
+ * CONFIG_PLATFORM_ARM_SUN50IW1P1
+ */
+#include <drv_types.h>
+#ifdef CONFIG_GPIO_WAKEUP
+#include <linux/gpio.h>
+#endif
+
+#ifdef CONFIG_MMC
+#if defined(CONFIG_PLATFORM_ARM_SUN50IW1P1)
+extern void sunxi_mmc_rescan_card(unsigned ids);
+extern void sunxi_wlan_set_power(int on);
+extern int sunxi_wlan_get_bus_index(void);
+extern int sunxi_wlan_get_oob_irq(void);
+extern int sunxi_wlan_get_oob_irq_flags(void);
+#endif
+#ifdef CONFIG_GPIO_WAKEUP
+extern unsigned int oob_irq;
+#endif
+#endif // CONFIG_MMC
+
+/*
+ * Return:
+ * 0: power on successfully
+ * others: power on failed
+ */
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+
+#ifdef CONFIG_MMC
+{
+
+#if defined(CONFIG_PLATFORM_ARM_SUN50IW1P1)
+ int wlan_bus_index = sunxi_wlan_get_bus_index();
+ if(wlan_bus_index < 0)
+ return wlan_bus_index;
+
+ sunxi_wlan_set_power(1);
+ mdelay(100);
+ sunxi_mmc_rescan_card(wlan_bus_index);
+#endif
+ DBG_871X("%s: power up, rescan card.\n", __FUNCTION__);
+
+#ifdef CONFIG_GPIO_WAKEUP
+#if defined(CONFIG_PLATFORM_ARM_SUN50IW1P1)
+ oob_irq = sunxi_wlan_get_oob_irq();
+#endif
+#endif // CONFIG_GPIO_WAKEUP
+}
+#endif // CONFIG_MMC
+
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+#ifdef CONFIG_MMC
+#if defined(CONFIG_PLATFORM_ARM_SUN50IW1P1)
+ int wlan_bus_index = sunxi_wlan_get_bus_index();
+ if(wlan_bus_index < 0)
+ return;
+
+ sunxi_mmc_rescan_card(wlan_bus_index);
+ mdelay(100);
+ sunxi_wlan_set_power(0);
+#endif
+ DBG_871X("%s: remove card, power off.\n", __FUNCTION__);
+#endif // CONFIG_MMC
+}
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNnI_sdio.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNnI_sdio.c
new file mode 100644
index 000000000..5484415c0
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNnI_sdio.c
@@ -0,0 +1,135 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+/*
+ * Description:
+ * This file can be applied to following platforms:
+ * CONFIG_PLATFORM_ARM_SUN6I
+ * CONFIG_PLATFORM_ARM_SUN7I
+ * CONFIG_PLATFORM_ARM_SUN8I
+ */
+#include <drv_types.h>
+#include <mach/sys_config.h>
+#ifdef CONFIG_GPIO_WAKEUP
+#include <linux/gpio.h>
+#endif
+
+#ifdef CONFIG_MMC
+static int sdc_id = -1;
+static signed int gpio_eint_wlan = -1;
+static u32 eint_wlan_handle = 0;
+
+#if defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)
+extern void sw_mci_rescan_card(unsigned id, unsigned insert);
+#elif defined(CONFIG_PLATFORM_ARM_SUN8I)
+extern void sunxi_mci_rescan_card(unsigned id, unsigned insert);
+#endif
+
+#ifdef CONFIG_PLATFORM_ARM_SUN8I_W5P1
+extern int get_rf_mod_type(void);
+#else
+extern int wifi_pm_get_mod_type(void);
+#endif
+
+extern void wifi_pm_power(int on);
+#ifdef CONFIG_GPIO_WAKEUP
+extern unsigned int oob_irq;
+#endif
+#endif // CONFIG_MMC
+
+/*
+ * Return:
+ * 0: power on successfully
+ * others: power on failed
+ */
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+
+#ifdef CONFIG_MMC
+{
+ script_item_u val;
+ script_item_value_type_e type;
+
+#ifdef CONFIG_PLATFORM_ARM_SUN8I_W5P1
+ unsigned int mod_sel = get_rf_mod_type();
+#else
+ unsigned int mod_sel = wifi_pm_get_mod_type();
+#endif
+
+ type = script_get_item("wifi_para", "wifi_sdc_id", &val);
+ if (SCIRPT_ITEM_VALUE_TYPE_INT!=type) {
+ DBG_871X("get wifi_sdc_id failed\n");
+ ret = -1;
+ } else {
+ sdc_id = val.val;
+ DBG_871X("----- %s sdc_id: %d, mod_sel: %d\n", __FUNCTION__, sdc_id, mod_sel);
+
+#if defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)
+ sw_mci_rescan_card(sdc_id, 1);
+#elif defined(CONFIG_PLATFORM_ARM_SUN8I)
+ sunxi_mci_rescan_card(sdc_id, 1);
+#endif
+ mdelay(100);
+ wifi_pm_power(1);
+
+ DBG_871X("%s: power up, rescan card.\n", __FUNCTION__);
+ }
+
+#ifdef CONFIG_GPIO_WAKEUP
+#ifdef CONFIG_PLATFORM_ARM_SUN8I_W5P1
+ type = script_get_item("wifi_para", "wl_host_wake", &val);
+#else
+#ifdef CONFIG_RTL8723B
+ type = script_get_item("wifi_para", "rtl8723bs_wl_host_wake", &val);
+#endif
+#ifdef CONFIG_RTL8188E
+ type = script_get_item("wifi_para", "rtl8189es_host_wake", &val);
+#endif
+#endif /* CONFIG_PLATFORM_ARM_SUN8I_W5P1 */
+ if (SCIRPT_ITEM_VALUE_TYPE_PIO != type) {
+ DBG_871X("No definition of wake up host PIN\n");
+ ret = -1;
+ } else {
+ gpio_eint_wlan = val.gpio.gpio;
+#ifdef CONFIG_PLATFORM_ARM_SUN8I
+ oob_irq = gpio_to_irq(gpio_eint_wlan);
+#endif
+ }
+#endif // CONFIG_GPIO_WAKEUP
+}
+#endif // CONFIG_MMC
+
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+#ifdef CONFIG_MMC
+#if defined(CONFIG_PLATFORM_ARM_SUN6I) ||defined(CONFIG_PLATFORM_ARM_SUN7I)
+ sw_mci_rescan_card(sdc_id, 0);
+#elif defined(CONFIG_PLATFORM_ARM_SUN8I)
+ sunxi_mci_rescan_card(sdc_id, 0);
+#endif
+ mdelay(100);
+ wifi_pm_power(0);
+
+ DBG_871X("%s: remove card, power off.\n", __FUNCTION__);
+#endif // CONFIG_MMC
+}
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_sdio.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_sdio.c
new file mode 100644
index 000000000..770f93506
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_sdio.c
@@ -0,0 +1,95 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#include <drv_types.h>
+
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
+#ifdef CONFIG_WITS_EVB_V13
+#define SDIOID 0
+#else // !CONFIG_WITS_EVB_V13
+#define SDIOID (CONFIG_CHIP_ID==1123 ? 3 : 1)
+#endif // !CONFIG_WITS_EVB_V13
+
+#define SUNXI_SDIO_WIFI_NUM_RTL8189ES 10
+extern void sunximmc_rescan_card(unsigned id, unsigned insert);
+extern int mmc_pm_get_mod_type(void);
+extern int mmc_pm_gpio_ctrl(char* name, int level);
+/*
+ * rtl8189es_shdn = port:PH09<1><default><default><0>
+ * rtl8189es_wakeup = port:PH10<1><default><default><1>
+ * rtl8189es_vdd_en = port:PH11<1><default><default><0>
+ * rtl8189es_vcc_en = port:PH12<1><default><default><0>
+ */
+
+int rtl8189es_sdio_powerup(void)
+{
+ mmc_pm_gpio_ctrl("rtl8189es_vdd_en", 1);
+ udelay(100);
+ mmc_pm_gpio_ctrl("rtl8189es_vcc_en", 1);
+ udelay(50);
+ mmc_pm_gpio_ctrl("rtl8189es_shdn", 1);
+ return 0;
+}
+
+int rtl8189es_sdio_poweroff(void)
+{
+ mmc_pm_gpio_ctrl("rtl8189es_shdn", 0);
+ mmc_pm_gpio_ctrl("rtl8189es_vcc_en", 0);
+ mmc_pm_gpio_ctrl("rtl8189es_vdd_en", 0);
+ return 0;
+}
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL
+
+/*
+ * Return:
+ * 0: power on successfully
+ * others: power on failed
+ */
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
+ unsigned int mod_sel = mmc_pm_get_mod_type();
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL
+
+
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
+ if (mod_sel == SUNXI_SDIO_WIFI_NUM_RTL8189ES) {
+ rtl8189es_sdio_powerup();
+ sunximmc_rescan_card(SDIOID, 1);
+ printk("[rtl8189es] %s: power up, rescan card.\n", __FUNCTION__);
+ } else {
+ ret = -1;
+ printk("[rtl8189es] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);
+ }
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL
+
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+#ifdef CONFIG_MMC_SUNXI_POWER_CONTROL
+ sunximmc_rescan_card(SDIOID, 0);
+#ifdef CONFIG_RTL8188E
+ rtl8189es_sdio_poweroff();
+ printk("[rtl8189es] %s: remove card, power off.\n", __FUNCTION__);
+#endif // CONFIG_RTL8188E
+#endif // CONFIG_MMC_SUNXI_POWER_CONTROL
+}
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_usb.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_usb.c
new file mode 100644
index 000000000..774392bdd
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_SUNxI_usb.c
@@ -0,0 +1,142 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+/*
+ * Description:
+ * This file can be applied to following platforms:
+ * CONFIG_PLATFORM_ARM_SUNXI Series platform
+ *
+ */
+
+#include <drv_types.h>
+#include <mach/sys_config.h>
+
+#ifdef CONFIG_PLATFORM_ARM_SUNxI
+extern int sw_usb_disable_hcd(__u32 usbc_no);
+extern int sw_usb_enable_hcd(__u32 usbc_no);
+static int usb_wifi_host = 2;
+#endif
+
+#if defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)
+extern int sw_usb_disable_hcd(__u32 usbc_no);
+extern int sw_usb_enable_hcd(__u32 usbc_no);
+extern void wifi_pm_power(int on);
+static script_item_u item;
+#endif
+
+#ifdef CONFIG_PLATFORM_ARM_SUN8I
+extern int sunxi_usb_disable_hcd(__u32 usbc_no);
+extern int sunxi_usb_enable_hcd(__u32 usbc_no);
+extern void wifi_pm_power(int on);
+static script_item_u item;
+#endif
+
+
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+
+#ifdef CONFIG_PLATFORM_ARM_SUNxI
+#ifndef CONFIG_RTL8723A
+ {
+ /* ----------get usb_wifi_usbc_num------------- */
+ ret = script_parser_fetch("usb_wifi_para", "usb_wifi_usbc_num", (int *)&usb_wifi_host, 64);
+ if(ret != 0){
+ DBG_8192C("ERR: script_parser_fetch usb_wifi_usbc_num failed\n");
+ ret = -ENOMEM;
+ goto exit;
+ }
+ DBG_8192C("sw_usb_enable_hcd: usbc_num = %d\n", usb_wifi_host);
+ sw_usb_enable_hcd(usb_wifi_host);
+ }
+#endif //CONFIG_RTL8723A
+#endif //CONFIG_PLATFORM_ARM_SUNxI
+
+#if defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)
+ {
+ script_item_value_type_e type;
+
+ type = script_get_item("wifi_para", "wifi_usbc_id", &item);
+ if(SCIRPT_ITEM_VALUE_TYPE_INT != type){
+ printk("ERR: script_get_item wifi_usbc_id failed\n");
+ ret = -ENOMEM;
+ goto exit;
+ }
+
+ printk("sw_usb_enable_hcd: usbc_num = %d\n", item.val);
+ wifi_pm_power(1);
+ mdelay(10);
+
+ #if !(defined(CONFIG_RTL8723A)) && !(defined(CONFIG_RTL8723B))
+ sw_usb_enable_hcd(item.val);
+ #endif
+ }
+#endif //defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)
+
+#if defined(CONFIG_PLATFORM_ARM_SUN8I)
+ {
+ script_item_value_type_e type;
+
+ type = script_get_item("wifi_para", "wifi_usbc_id", &item);
+ if(SCIRPT_ITEM_VALUE_TYPE_INT != type){
+ printk("ERR: script_get_item wifi_usbc_id failed\n");
+ ret = -ENOMEM;
+ goto exit;
+ }
+
+ printk("sw_usb_enable_hcd: usbc_num = %d\n", item.val);
+ wifi_pm_power(1);
+ mdelay(10);
+
+ #if !(defined(CONFIG_RTL8723A)) && !(defined(CONFIG_RTL8723B))
+ sunxi_usb_enable_hcd(item.val);
+ #endif
+ }
+#endif //CONFIG_PLATFORM_ARM_SUN8I
+
+exit:
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+
+#ifdef CONFIG_PLATFORM_ARM_SUNxI
+#ifndef CONFIG_RTL8723A
+ DBG_8192C("sw_usb_disable_hcd: usbc_num = %d\n", usb_wifi_host);
+ sw_usb_disable_hcd(usb_wifi_host);
+#endif //ifndef CONFIG_RTL8723A
+#endif //CONFIG_PLATFORM_ARM_SUNxI
+
+#if defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)
+ #if !(defined(CONFIG_RTL8723A)) && !(defined(CONFIG_RTL8723B))
+ sw_usb_disable_hcd(item.val);
+ #endif
+ wifi_pm_power(0);
+#endif //defined(CONFIG_PLATFORM_ARM_SUN6I) || defined(CONFIG_PLATFORM_ARM_SUN7I)
+
+#if defined(CONFIG_PLATFORM_ARM_SUN8I)
+ #if !(defined(CONFIG_RTL8723A)) && !(defined(CONFIG_RTL8723B))
+ sunxi_usb_disable_hcd(item.val);
+ #endif
+ wifi_pm_power(0);
+#endif //defined(CONFIG_PLATFORM_ARM_SUN8I)
+
+}
+
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_WMT_sdio.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_WMT_sdio.c
new file mode 100644
index 000000000..e994ea51d
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ARM_WMT_sdio.c
@@ -0,0 +1,51 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#include <drv_types.h>
+#include <mach/wmt_iomux.h>
+#include <linux/gpio.h>
+
+extern void wmt_detect_sdio2(void);
+extern void force_remove_sdio2(void);
+
+int platform_wifi_power_on(void)
+{
+ int err = 0;
+ err = gpio_request(WMT_PIN_GP62_SUSGPIO1, "wifi_chip_en");
+ if (err < 0){
+ printk("request gpio for rtl8188eu failed!\n");
+ return err;
+ }
+ gpio_direction_output(WMT_PIN_GP62_SUSGPIO1, 0);//pull sus_gpio1 to 0 to open vcc_wifi.
+ printk("power on rtl8189.\n");
+ msleep(500);
+ wmt_detect_sdio2();
+ printk("[rtl8189es] %s: new card, power on.\n", __FUNCTION__);
+ return err;
+}
+
+void platform_wifi_power_off(void)
+{
+ force_remove_sdio2();
+
+ gpio_direction_output(WMT_PIN_GP62_SUSGPIO1, 1);//pull sus_gpio1 to 1 to close vcc_wifi.
+ printk("power off rtl8189.\n");
+ gpio_free(WMT_PIN_GP62_SUSGPIO1);
+ printk("[rtl8189es] %s: remove card, power off.\n", __FUNCTION__);
+}
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_RTK_DMP_usb.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_RTK_DMP_usb.c
new file mode 100644
index 000000000..d296641f1
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_RTK_DMP_usb.c
@@ -0,0 +1,36 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#include <drv_types.h>
+
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+ u32 tmp;
+ tmp=readl((volatile unsigned int*)0xb801a608);
+ tmp &= 0xffffff00;
+ tmp |= 0x55;
+ writel(tmp,(volatile unsigned int*)0xb801a608);//write dummy register for 1055
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+}
+
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_arm_act_sdio.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_arm_act_sdio.c
new file mode 100644
index 000000000..539bb178c
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_arm_act_sdio.c
@@ -0,0 +1,58 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+/*
+ * Description:
+ * This file can be applied to following platforms:
+ * CONFIG_PLATFORM_ACTIONS_ATM703X
+ */
+#include <drv_types.h>
+
+#ifdef CONFIG_PLATFORM_ACTIONS_ATM705X
+extern int acts_wifi_init(void);
+extern void acts_wifi_cleanup(void);
+#endif
+
+/*
+ * Return:
+ * 0: power on successfully
+ * others: power on failed
+ */
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+
+#ifdef CONFIG_PLATFORM_ACTIONS_ATM705X
+ ret = acts_wifi_init();
+ if (unlikely(ret < 0)) {
+ pr_err("%s Failed to register the power control driver.\n", __FUNCTION__);
+ goto exit;
+ }
+#endif
+
+exit:
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+#ifdef CONFIG_PLATFORM_ACTIONS_ATM705X
+ acts_wifi_cleanup();
+#endif
+}
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.c
new file mode 100644
index 000000000..cd2f4e538
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.c
@@ -0,0 +1,37 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef CONFIG_PLATFORM_OPS
+/*
+ * Return:
+ * 0: power on successfully
+ * others: power on failed
+ */
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+
+
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+}
+#endif // !CONFIG_PLATFORM_OPS
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.h b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.h
new file mode 100644
index 000000000..7b66f445f
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_ops.h
@@ -0,0 +1,31 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __PLATFORM_OPS_H__
+#define __PLATFORM_OPS_H__
+
+/*
+ * Return:
+ * 0: power on successfully
+ * others: power on failed
+ */
+int platform_wifi_power_on(void);
+void platform_wifi_power_off(void);
+
+#endif // __PLATFORM_OPS_H__
diff --git a/drivers/net/wireless/realtek/rtl8723cs/platform/platform_sprd_sdio.c b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_sprd_sdio.c
new file mode 100644
index 000000000..eec894503
--- /dev/null
+++ b/drivers/net/wireless/realtek/rtl8723cs/platform/platform_sprd_sdio.c
@@ -0,0 +1,89 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#include <drv_types.h>
+
+extern void sdhci_bus_scan(void);
+#ifndef ANDROID_2X
+extern int sdhci_device_attached(void);
+#endif
+
+/*
+ * Return:
+ * 0: power on successfully
+ * others: power on failed
+ */
+int platform_wifi_power_on(void)
+{
+ int ret = 0;
+
+
+#ifdef CONFIG_RTL8188E
+ rtw_wifi_gpio_wlan_ctrl(WLAN_POWER_ON);
+#endif // CONFIG_RTL8188E
+
+ /* Pull up pwd pin, make wifi leave power down mode. */
+ rtw_wifi_gpio_init();
+ rtw_wifi_gpio_wlan_ctrl(WLAN_PWDN_ON);
+
+#if (MP_DRIVER == 1) && (defined(CONFIG_RTL8723A)||defined(CONFIG_RTL8723B))
+ // Pull up BT reset pin.
+ rtw_wifi_gpio_wlan_ctrl(WLAN_BT_PWDN_ON);
+#endif
+ rtw_mdelay_os(5);
+
+ sdhci_bus_scan();
+#ifdef CONFIG_RTL8723B
+ //YJ,test,130305
+ rtw_mdelay_os(1000);
+#endif
+#ifdef ANDROID_2X
+ rtw_mdelay_os(200);
+#else // !ANDROID_2X
+ if (1) {
+ int i = 0;
+
+ for (i = 0; i <= 50; i++) {
+ msleep(10);
+ if (sdhci_device_attached())
+ break;
+ printk("%s delay times:%d\n", __func__, i);
+ }
+ }
+#endif // !ANDROID_2X
+
+ return ret;
+}
+
+void platform_wifi_power_off(void)
+{
+ /* Pull down pwd pin, make wifi enter power down mode. */
+ rtw_wifi_gpio_wlan_ctrl(WLAN_PWDN_OFF);
+ rtw_mdelay_os(5);
+ rtw_wifi_gpio_deinit();
+
+#ifdef CONFIG_RTL8188E
+ rtw_wifi_gpio_wlan_ctrl(WLAN_POWER_OFF);
+#endif // CONFIG_RTL8188E
+
+#ifdef CONFIG_WOWLAN
+ if(mmc_host)
+ mmc_host->pm_flags &= ~MMC_PM_KEEP_POWER;
+#endif // CONFIG_WOWLAN
+}
--
2.34.1