static void nano_standby(int instadby)
{
    if (instadby) {
        if (nano_powerup) {
            nano_gpio_ctrl("swl_n20_shdn", 0);
            nano_gpio_ctrl("swl_n20_vdd_en", 0);
            nano_gpio_ctrl("swl_n20_vcc_en", 0);
            nano_suspend = 1;
        }
    } else {
        if (nano_suspend) {
            nano_gpio_ctrl("swl_n20_vcc_en", 1);
            udelay(100);
            nano_gpio_ctrl("swl_n20_shdn", 1);
            udelay(50);
            nano_gpio_ctrl("swl_n20_vdd_en", 1);
            sw_mmc_rescan_card(3, 1);
            nano_suspend = 0;
        }
    }
}
/* Customer function to control hw specific wlan gpios */
void
dhd_customer_gpio_wlan_ctrl(int onoff)
{
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
    unsigned int mod_sel = mmc_pm_get_mod_type();
#endif

	switch (onoff) {
		case WLAN_RESET_OFF:
			WL_TRACE(("%s: call customer specific GPIO to insert WLAN RESET\n",
				__FUNCTION__));
/* winner's power control */
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            switch (mod_sel)
            {
                case 2: /* usi bm01a */
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_rst", 0);
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_regon", 0);
                    break;
                case 5: /* swb b23 */
                    mmc_pm_gpio_ctrl("swbb23_wl_shdn", 0);
                    break;
                default:
                    printk("[bcm4329]: no wifi module matched !!\n");
            }
#endif

#ifdef CUSTOMER_HW
			bcm_wlan_power_off(2);
#endif /* CUSTOMER_HW */
#ifdef CUSTOMER_HW2
			wifi_set_power(0, 0);
#endif
			WL_ERROR(("=========== WLAN placed in RESET ========\n"));
		break;

		case WLAN_RESET_ON:
			WL_TRACE(("%s: callc customer specific GPIO to remove WLAN RESET\n",
				__FUNCTION__));
/* winner's power control */
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            switch (mod_sel)
            {
                case 2: /* usi bm01a */
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_regon", 1);
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_rst", 1);
                    break;
                case 5: /* swb b23 */
                    mmc_pm_gpio_ctrl("swbb23_wl_shdn", 1);
                    break;
                default:
                    printk("[bcm4329]: no wifi module matched !!\n");
            }
#endif

#ifdef CUSTOMER_HW
			bcm_wlan_power_on(2);
#endif /* CUSTOMER_HW */
#ifdef CUSTOMER_HW2
			wifi_set_power(1, 0);
#endif
			WL_ERROR(("=========== WLAN going back to live  ========\n"));
			
			OSL_DELAY(10000);
		break;

		case WLAN_POWER_OFF:
			WL_TRACE(("%s: call customer specific GPIO to turn off WL_REG_ON\n",
				__FUNCTION__));
/* winner's power control */
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            switch (mod_sel)
            {
                case 2: /* usi bm01a */
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_rst", 0);
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_regon", 0);
                    break;
                case 5: /* swb b23 */
                    mmc_pm_gpio_ctrl("swbb23_wl_shdn", 0);
                    break;
                default:
                    printk("[bcm4329]: no wifi module matched !!\n");
            }
            sw_mmc_rescan_card(3, 0);
#endif
#ifdef CUSTOMER_HW
			bcm_wlan_power_off(1);
#endif /* CUSTOMER_HW */
		break;

		case WLAN_POWER_ON:
			WL_TRACE(("%s: call customer specific GPIO to turn on WL_REG_ON\n",
				__FUNCTION__));
/* winner's power control */
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            switch (mod_sel)
            {
                case 2: /* usi bm01a */
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_regon", 1);
                    mmc_pm_gpio_ctrl("usi_bm01a_wl_rst", 1);
                    break;
                case 5: /* swb b23 */
                    mmc_pm_gpio_ctrl("swbb23_wl_shdn", 1);
                    break;
                default:
                    printk("[bcm4329]: no wifi module matched !!\n");
            }
#endif
#ifdef CUSTOMER_HW
			bcm_wlan_power_on(1);
#endif /* CUSTOMER_HW */
			/* Lets customer power to get stable */
			OSL_DELAY(200);
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            sw_mmc_rescan_card(3, 1);
#endif
		break;
	}
}
Exemple #3
0
/* Customer function to control hw specific wlan gpios */
void
dhd_customer_gpio_wlan_ctrl(int onoff)
{
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
    unsigned int mod_sel = mmc_pm_get_mod_type();
    if (mod_sel != 6) {
        printk("Config Error: not for huawei mw269x sdio wifi module\n");
    }
#endif
	switch (onoff) {
		case WLAN_RESET_OFF:
			WL_TRACE(("%s: call customer specific GPIO to insert WLAN RESET\n",
				__FUNCTION__));
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            mmc_pm_gpio_ctrl("hw_mw269x_wl_enb", 0);
#endif
#ifdef CUSTOMER_HW
			bcm_wlan_power_off(2);
#endif /* CUSTOMER_HW */
#ifdef CUSTOMER_HW2
			wifi_set_power(0, 0);
#endif
			WL_ERROR(("=========== WLAN placed in RESET ========\n"));
		break;

		case WLAN_RESET_ON:
			WL_TRACE(("%s: callc customer specific GPIO to remove WLAN RESET\n",
				__FUNCTION__));
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            mmc_pm_gpio_ctrl("hw_mw269x_wl_enb", 1);
#endif
#ifdef CUSTOMER_HW
			bcm_wlan_power_on(2);
#endif /* CUSTOMER_HW */
#ifdef CUSTOMER_HW2
			wifi_set_power(1, 0);
#endif
			WL_ERROR(("=========== WLAN going back to live  ========\n"));
			OSL_DELAY(10000);
		break;

		case WLAN_POWER_OFF:
			WL_TRACE(("%s: call customer specific GPIO to turn off WL_REG_ON\n",
				__FUNCTION__));
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            mmc_pm_gpio_ctrl("hw_mw269x_wl_enb", 0);
            sw_mmc_rescan_card(3, 0);
#endif
#ifdef CUSTOMER_HW
			bcm_wlan_power_off(1);
#endif /* CUSTOMER_HW */
		break;

		case WLAN_POWER_ON:
			WL_TRACE(("%s: call customer specific GPIO to turn on WL_REG_ON\n",
				__FUNCTION__));
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            mmc_pm_gpio_ctrl("hw_mw269x_wl_enb", 1);
#endif
#ifdef CUSTOMER_HW
			bcm_wlan_power_on(1);
#endif /* CUSTOMER_HW */
			/* Lets customer power to get stable */
			OSL_DELAY(200);
#if defined CUSTOMER_ALLWINNER && defined CONFIG_SW_MMC_POWER_CONTROL
            sw_mmc_rescan_card(3, 1);
#endif /* CUSTOMER_HW */
		break;
	}
}