/* Disconnects any devices still connected, stops the keep alives and removes the Host Info IE.  */
void wusbhc_devconnect_stop(struct wusbhc *wusbhc)
/* Disconnects any devices still connected, stops the keep alives and removes the Host Info IE.  */
void wusbhc_devconnect_stop(struct wusbhc *wusbhc)
{
	int i;
	mutex_lock(&wusbhc->mutex);
	for (i = 0; i < wusbhc->ports_max; i++) {
		if (wusbhc->port[i].wusb_dev)
			__wusbhc_dev_disconnect(wusbhc, &wusbhc->port[i]);
	}
	mutex_unlock(&wusbhc->mutex);
	cancel_delayed_work_sync(&wusbhc->keep_alive_timer);
	wusbhc_mmcie_rm(wusbhc, &wusbhc->wuie_host_info->hdr);
	kfree(wusbhc->wuie_host_info);
	wusbhc->wuie_host_info = NULL;
}