struct mmc_host* mmc = dev_get_drvdata(dev); struct wbsd_host* host;  if (!mmc) return 0;  host = mmc_priv(mmc);  /* * Unregister host with MMC layer. */ mmc_remove_host(mmc);  /* * Power down the SD/MMC function. */ wbsd_unlock_config(host); wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD); wbsd_write_config(host, WBSD_CONF_ENABLE, 0); wbsd_lock_config(host);  /* * Free resources. */ if (host->dma_buffer) kfree(host->dma_buffer);  if (host->dma >= 0) free_dma(host->dma);  free_irq(host->irq, host);  tasklet_kill(&host->card_tasklet); tasklet_kill(&host->fifo_tasklet); tasklet_kill(&host->crc_tasklet); tasklet_kill(&host->timeout_tasklet); tasklet_kill(&host->finish_tasklet); tasklet_kill(&host->block_tasklet);  wbsd_release_regions(host);  mmc_free_host(mmc); 
wbsd_shutdown(dev, 0); 
static int wbsd_remove(struct device* dev){	struct mmc_host* mmc = dev_get_drvdata(dev);	struct wbsd_host* host;		if (!mmc)		return 0;	host = mmc_priv(mmc);		/*	 * Unregister host with MMC layer.	 */	mmc_remove_host(mmc);	/*	 * Power down the SD/MMC function.	 */	wbsd_unlock_config(host);	wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD);	wbsd_write_config(host, WBSD_CONF_ENABLE, 0);	wbsd_lock_config(host);		/*	 * Free resources.	 */	if (host->dma_buffer)		kfree(host->dma_buffer);		if (host->dma >= 0)		free_dma(host->dma);	free_irq(host->irq, host);		tasklet_kill(&host->card_tasklet);	tasklet_kill(&host->fifo_tasklet);	tasklet_kill(&host->crc_tasklet);	tasklet_kill(&host->timeout_tasklet);	tasklet_kill(&host->finish_tasklet);	tasklet_kill(&host->block_tasklet);		wbsd_release_regions(host);		mmc_free_host(mmc);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/85bcc13072c54592596c5b41d40d1c6a18b04e19/wbsd.c/clean/drivers/mmc/wbsd.c