示例#1
0
static int __init rtw_drv_entry(void)
{
	int ret = 0;

/*depends on sunxi power control */
#if defined CONFIG_MMC_SUNXI_POWER_CONTROL
    unsigned int mod_sel = mmc_pm_get_mod_type();
	if(mod_sel == SUNXI_SDIO_WIFI_NUM_RTL8723AS) {
		rtl8723as_sdio_powerup();
  		sunximmc_rescan_card(SDIOID, 1);
		printk("[rtl8723as] %s: power up, rescan card.\n", __FUNCTION__);  		
	} else {
		ret = -1;
		printk("[rtl8723as] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);
	}
#endif
	if(ret != 0)
		goto exit;

	rtw_suspend_lock_init();
	
//	DBG_871X(KERN_INFO "+%s", __func__);
	RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_drv_entry\n"));
	DBG_871X(KERN_NOTICE DRV_NAME " driver version " DRIVERVERSION "\n");
	ret = sdio_register_driver(&drvpriv.r871xs_drv);

exit:
//	DBG_871X(KERN_INFO "-%s: ret=%d", __func__, ret);
	RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("-rtw_drv_entry: ret=%d\n", ret));

	return ret;
}
static int rfkill_set_power(void *data, bool blocked)
{
    unsigned int mod_sel = mmc_pm_get_mod_type();
    
    RF_MSG("rfkill set power %d\n", blocked);
#ifdef	AW_SUPPORT_1IN1_BT	
    rfkill_bt_set_power(blocked);
#endif	
    spin_lock(&bt_power_lock);
    switch (mod_sel)
    {
        case 2: /* usi bm01a */
            if (!blocked) {
                mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 1);
                mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 1);
            } else {
                mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 0);
                mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 0);
            }
            break;
        case 5: /* swb b23 */
            if (!blocked) {
                mmc_pm_gpio_ctrl("swbb23_bt_shdn", 1);
            } else {
                mmc_pm_gpio_ctrl("swbb23_bt_shdn", 0);
            }
            break;
        case 6: /* huawei mw269x */
            if (!blocked) {
                mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 1);
                mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 1);
            } else {
                mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 0);
                mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 0);
            }
            break;
        case 8: /* bcm40183 */
            if (!blocked) {
                mmc_pm_gpio_ctrl("bcm40183_bt_regon", 1);
                mmc_pm_gpio_ctrl("bcm40183_bt_rst", 1);
            } else {
                mmc_pm_gpio_ctrl("bcm40183_bt_regon", 0);
                mmc_pm_gpio_ctrl("bcm40183_bt_rst", 0);
            }
            break;
         case 9: /* realtek rtl8723as */
            if (!blocked) {
                mmc_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 1);
            } else {
                mmc_pm_gpio_ctrl("rtk_rtl8723as_bt_dis", 0);
            }
            break;            
        default:
            RF_MSG("no bt module matched !!\n");
    }
    
    spin_unlock(&bt_power_lock);
    msleep(100);
    return 0;
}
示例#3
0
/*
 * 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
	ret = -1;
	printk("[rtl8189es] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);
#endif // CONFIG_MMC_SUNXI_POWER_CONTROL

	return ret;
}
示例#4
0
static int __init rtw_drv_entry(void)
{
	int ret = 0;

/*depends on sunxi power control */
#if defined CONFIG_MMC_SUNXI_POWER_CONTROL
    unsigned int mod_sel = mmc_pm_get_mod_type();
	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
	if(ret != 0)
		goto exit;

//	DBG_871X(KERN_INFO "+%s", __func__);
	RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_drv_entry\n"));
	DBG_871X(KERN_NOTICE DRV_NAME " driver version " DRIVERVERSION "\n");
	
	rtw_suspend_lock_init();

#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
	//init global variable
	_rtw_mutex_init(&drvpriv.h2c_fwcmd_mutex);
	_rtw_mutex_init(&drvpriv.setch_mutex);
	_rtw_mutex_init(&drvpriv.setbw_mutex);
	_rtw_mutex_init(&drvpriv.hw_init_mutex);
#endif
	
	drvpriv.drv_registered = _TRUE;

	ret = sdio_register_driver(&drvpriv.r871xs_drv);

exit:
//	DBG_871X(KERN_INFO "-%s: ret=%d", __func__, ret);
	RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("-rtw_drv_entry: ret=%d\n", ret));

	return ret;
}
示例#5
0
static int rfkill_set_power(void *data, bool blocked)
{
    unsigned int mod_sel = mmc_pm_get_mod_type();
    
    RF_MSG("rfkill set power %d\n", blocked);
    
    spin_lock(&bt_power_lock);
    switch (mod_sel)
    {
        case 2: /* usi bm01a */
            if (!blocked) {
                mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 1);
                mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 1);
            } else {
                mmc_pm_gpio_ctrl("usi_bm01a_bt_regon", 0);
                mmc_pm_gpio_ctrl("usi_bm01a_bt_rst", 0);
            }
            break;
        case 5: /* swb b23 */
            if (!blocked) {
                mmc_pm_gpio_ctrl("swbb23_bt_shdn", 1);
            } else {
                mmc_pm_gpio_ctrl("swbb23_bt_shdn", 0);
            }
            break;
        case 6: /* huawei mw269x */
            if (!blocked) {
                mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 1);
                mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 1);
            } else {
                mmc_pm_gpio_ctrl("hw_mw269x_bt_enb", 0);
                mmc_pm_gpio_ctrl("hw_mw269x_bt_wake", 0);
            }
            break;
        default:
            RF_MSG("no bt module matched !!\n");
    }
    
    spin_unlock(&bt_power_lock);
    msleep(100);
    return 0;
}
示例#6
0
/*
 * 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;
}
示例#7
0
static int rtw_sdio_resume(struct device *dev)
{
	struct sdio_func *func =dev_to_sdio_func(dev);
	struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
	_adapter *padapter = psdpriv->padapter;
	struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
	 int ret = 0;

/*depends on sunxi power control */
#if defined CONFIG_MMC_SUNXI_POWER_CONTROL
    unsigned int mod_sel = mmc_pm_get_mod_type();
	if(mod_sel == SUNXI_SDIO_WIFI_NUM_RTL8723AS) {
//		rtl8723as_sdio_powerup();
// 		sunximmc_rescan_card(SDIOID, 1);		
		printk("[rtl8723as] %s: resume start.\n", __FUNCTION__);  		
	} else {
		printk("[rtl8723as] %s: mod_sel = %d is incorrect./n", __FUNCTION__, mod_sel);
	}
#endif

	if(pwrpriv->bInternalAutoSuspend ){
 		ret = rtw_resume_process(padapter);
	} else {
#ifdef CONFIG_RESUME_IN_WORKQUEUE
		rtw_resume_in_workqueue(pwrpriv);
#elif defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
		if(rtw_is_earlysuspend_registered(pwrpriv)) {
			//jeff: bypass resume here, do in late_resume
			pwrpriv->do_late_resume = _TRUE;
		} else {
			ret = rtw_resume_process(padapter);
		}
#else // Normal resume process
		ret = rtw_resume_process(padapter);
#endif //CONFIG_RESUME_IN_WORKQUEUE
	}
	
	return ret;

}
/* Customer function to control hw specific wlan gpios */
void
dhd_customer_gpio_wlan_ctrl(int onoff)
{
#if defined CONFIG_MMC_SUNXI_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 CONFIG_MMC_SUNXI_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 CONFIG_MMC_SUNXI_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 CONFIG_MMC_SUNXI_POWER_CONTROL
            mmc_pm_gpio_ctrl("hw_mw269x_wl_enb", 0);
            sunximmc_rescan_card(SDIOID, 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 CONFIG_MMC_SUNXI_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 CONFIG_MMC_SUNXI_POWER_CONTROL
            sunximmc_rescan_card(SDIOID, 1);
#endif /* CUSTOMER_HW */
		break;
	}
}
示例#9
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;
	}
}