| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /******************************************************************************
- *
- * Copyright(c) 2013 - 2017 Realtek Corporation.
- *
- * 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.
- *
- *****************************************************************************/
- #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 */
- }
|