Esempio n. 1
0
/**
* @brief 	SD driver exit function.
* @return 	None.
*/
static void __exit gp_sdcard_exit(void)
{
	int i;
	/* ----- Free all alloc memory ----- */
	for (i = 0; i < SD_NUM; i++) 
	{
		gpSDInfo_t *sd = sd_info + i;
		/* ----- Free gendisk structure ----- */
		if (sd->gd) 
		{
			del_gendisk(sd->gd);
			/* ----- Free request ----- */
			if (sd->queue) 
			{
				blk_cleanup_queue(sd->queue);
			}
			/* ----- Then terminate our worker thread -----*/
			kthread_stop(sd->thread);
			if (sd->sg)
				kfree(sd->sg);
			sd->sg = NULL;
			put_disk(sd->gd);
		}
		/* ----- free dma channel ----- */
		if(sd->handle_dma)
			gp_apbdma0_release(sd->handle_dma);
	}
	unregister_blkdev(sd_major, "sdcard");
	gp_sdio_exit();
	kfree(sd_info);
}
Esempio n. 2
0
/**
* @brief 	SD driver exit function.
* @return 	None.
*/
static void __exit gp_sdcard_exit(void)
{
	int i;
	/* ----- Free all alloc memory ----- */
	for (i = 0; i < SD_NUM; i++)
	{
		gpSDInfo_t *sd = sd_info + i;
		del_timer_sync(&sd->timer);
		gp_sdcard_cleanup(sd);
		gp_sdcard_blk_put(sd);
	}
	unregister_blkdev(sd_major, "sdcard");
	gp_sdio_exit();
	for (i = 0; i < SD_NUM; i++)
	{
		gpSDInfo_t *sd = sd_info + i;
		gp_sdcard_carduninit(sd);
		if(sd->sd_func)
			sd->sd_func->get_sn = 0;
	}
	kfree(sd_info);

	platform_device_unregister(&gp_sd_device);
	platform_driver_unregister(&gp_sd_driver);

}