/* * drv_init() - a device potentially for us * * notes: drv_init() is called when the bus driver has located a card for us to support. * We accept the new device by returning 0. */ static int /*__devinit*/ rtw_drv_probe(struct spi_device *spi) { int status = _FAIL; struct dvobj_priv *dvobj; struct net_device *pnetdev; PADAPTER if1 = NULL, if2 = NULL; DBG_8192C("RTW: %s line:%d", __FUNCTION__, __LINE__); if ((dvobj = gspi_dvobj_init(spi)) == NULL) { DBG_871X("%s: Initialize device object priv Failed!\n", __FUNCTION__); goto exit; } if ((if1 = rtw_gspi_if1_init(dvobj)) == NULL) { DBG_871X("rtw_init_primary_adapter Failed!\n"); goto free_dvobj; } #ifdef CONFIG_CONCURRENT_MODE if ((if2 = rtw_drv_if2_init(if1, NULL, spi_set_intf_ops)) == NULL) { goto free_if1; } #endif if (gspi_alloc_irq(dvobj) != _SUCCESS) goto free_if2; #ifdef CONFIG_GLOBAL_UI_PID if(ui_pid[1]!=0) { DBG_871X("ui_pid[1]:%d\n",ui_pid[1]); rtw_signal_process(ui_pid[1], SIGUSR2); } #endif RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n")); status = _SUCCESS; free_if2: if (status != _SUCCESS && if2) { #ifdef CONFIG_CONCURRENT_MODE rtw_drv_if2_free(if1); #endif } free_if1: if (status != _SUCCESS && if1) { rtw_gspi_if1_deinit(if1); } free_dvobj: if (status != _SUCCESS) gspi_dvobj_deinit(spi); exit: return status == _SUCCESS?0:-ENODEV; }
static int /*__devexit*/ rtw_dev_remove(struct spi_device *spi) { struct dvobj_priv *dvobj = spi_get_drvdata(spi); PADAPTER padapter = dvobj->if1; _func_enter_; RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_dev_remove\n")); dvobj->processing_dev_remove = _TRUE; rtw_unregister_netdevs(dvobj); #if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER) rtw_unregister_early_suspend(dvobj_to_pwrctl(dvobj)); #endif rtw_pm_set_ips(padapter, IPS_NONE); rtw_pm_set_lps(padapter, PS_MODE_ACTIVE); LeaveAllPowerSaveMode(padapter); #ifdef CONFIG_CONCURRENT_MODE rtw_drv_if2_stop(dvobj->if2); #endif rtw_gspi_if1_deinit(padapter); #ifdef CONFIG_CONCURRENT_MODE rtw_drv_if2_free(dvobj->if2); #endif gspi_dvobj_deinit(spi); RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("-rtw_dev_remove\n")); _func_exit_; return 0; }
static int /*__devexit*/ rtw_dev_remove(struct spi_device *spi) { struct dvobj_priv *dvobj = spi_get_drvdata(spi); PADAPTER padapter = dvobj->if1; _func_enter_; RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_dev_remove\n")); #ifdef CONFIG_CONCURRENT_MODE rtw_drv_if2_free(padapter); #endif rtw_gspi_if1_deinit(padapter); gspi_dvobj_deinit(spi); RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("-rtw_dev_remove\n")); _func_exit_; return 0; }
/* * drv_init() - a device potentially for us * * notes: drv_init() is called when the bus driver has located a card for us to support. * We accept the new device by returning 0. */ static int /*__devinit*/ rtw_drv_probe(struct spi_device *spi) { int status = _FAIL; struct dvobj_priv *dvobj; struct net_device *pnetdev; PADAPTER if1 = NULL, if2 = NULL; DBG_8192C("RTW: %s line:%d", __FUNCTION__, __LINE__); if ((dvobj = gspi_dvobj_init(spi)) == NULL) { DBG_871X("%s: Initialize device object priv Failed!\n", __FUNCTION__); goto exit; } if ((if1 = rtw_gspi_if1_init(dvobj)) == NULL) { DBG_871X("rtw_init_primary_adapter Failed!\n"); goto free_dvobj; } #ifdef CONFIG_CONCURRENT_MODE if ((if2 = rtw_drv_if2_init(if1, NULL, spi_set_intf_ops)) == NULL) { goto free_if1; } #endif //dev_alloc_name && register_netdev if((status = rtw_drv_register_netdev(if1)) != _SUCCESS) { goto free_if2; } #ifdef CONFIG_HOSTAPD_MLME hostapd_mode_init(if1); #endif #ifdef CONFIG_PLATFORM_RTD2880B DBG_871X("wlan link up\n"); rtd2885_wlan_netlink_sendMsg("linkup", "8712"); #endif #ifdef RTK_DMP_PLATFORM rtw_proc_init_one(if1->pnetdev); #endif if (gspi_alloc_irq(dvobj) != _SUCCESS) goto free_if2; #ifdef CONFIG_GLOBAL_UI_PID if(ui_pid[1]!=0) { DBG_871X("ui_pid[1]:%d\n",ui_pid[1]); rtw_signal_process(ui_pid[1], SIGUSR2); } #endif RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n")); status = _SUCCESS; free_if2: if (status != _SUCCESS && if2) { #ifdef CONFIG_CONCURRENT_MODE rtw_drv_if2_stop(if2); rtw_drv_if2_free(if2); #endif } free_if1: if (status != _SUCCESS && if1) { rtw_gspi_if1_deinit(if1); } free_dvobj: if (status != _SUCCESS) gspi_dvobj_deinit(spi); exit: return status == _SUCCESS?0:-ENODEV; }