rem: TRACE(("uninit_driver() finished\n"));
add: LOG(("uninit_driver() finished\n"));
context: uninit_driver(void){	TRACE(("uninit_driver()\n"));	#if DEBUG		if (chan_po) TRACE(("chan_po frames_count = %Ld\n",chan_po->played_frames_count));		if (chan_pi) TRACE(("chan_pi frames_count = %Ld\n",chan_pi->played_frames_count));		if (chan_mc) TRACE(("chan_mc frames_count = %Ld\n",chan_mc->played_frames_count));		if (chan_po) LOG(("chan_po frames_count = %Ld\n",chan_po->played_frames_count));		if (chan_pi) LOG(("chan_pi frames_count = %Ld\n",chan_pi->played_frames_count));		if (chan_mc) LOG(("chan_mc frames_count = %Ld\n",chan_mc->played_frames_count));	#endif		/* reset all channels */	if (chan_pi)		reset_chan(chan_pi);	if (chan_po)		reset_chan(chan_po);	if (chan_mc)		reset_chan(chan_mc);	snooze(50000);		/* remove the interrupt handler or thread */	if (config->irq != 0) {		remove_io_interrupt_handler(config->irq,ich_int,0);	} else if (int_thread_id != -1) {		status_t exit_value;		int_thread_exit = true;		wait_for_thread(int_thread_id, &exit_value);	}	/* invalidate hardware buffer descriptor base addresses */	ich_reg_write_32(ICH_REG_PI_BASE, 0);	ich_reg_write_32(ICH_REG_PO_BASE, 0);	ich_reg_write_32(ICH_REG_MC_BASE, 0);	/* free allocated channel semaphores and memory */	chan_free_resources();	/* the very last thing to do is unmap the io memory */	unmap_io_memory();	TRACE(("uninit_driver() finished\n"));}