void fjes_hw_exit(struct fjes_hw *hw) { int ret; if (hw->base) { if (hw->debug_mode) { /* disable debug mode */ mutex_lock(&hw->hw_info.lock); fjes_hw_stop_debug(hw); mutex_unlock(&hw->hw_info.lock); } vfree(hw->hw_info.trace); hw->hw_info.trace = NULL; hw->hw_info.trace_size = 0; hw->debug_mode = 0; ret = fjes_hw_reset(hw); if (ret) pr_err("%s: reset error", __func__); fjes_hw_iounmap(hw); hw->base = NULL; } fjes_hw_cleanup(hw); cancel_work_sync(&hw->update_zone_task); cancel_work_sync(&hw->epstop_task); }
void fjes_hw_exit(struct fjes_hw *hw) { int ret; if (hw->base) { ret = fjes_hw_reset(hw); if (ret) pr_err("%s: reset error", __func__); fjes_hw_iounmap(hw); hw->base = NULL; } fjes_hw_cleanup(hw); cancel_work_sync(&hw->update_zone_task); cancel_work_sync(&hw->epstop_task); }