Revert "bus: mhi: host: Move IRQ allocation to controller registration phase"

This reverts commit 1227d2a20cd7319fb45c62fab4b252600e0308bf.
diff --git a/drivers/bus/mhi/host/init.c b/drivers/bus/mhi/host/init.c
index bf672de..c137d55 100644
--- a/drivers/bus/mhi/host/init.c
+++ b/drivers/bus/mhi/host/init.c
@@ -178,12 +178,6 @@
 				   "bhi", mhi_cntrl);
 	if (ret)
 		return ret;
-	/*
-	 * IRQs should be enabled during mhi_async_power_up(), so disable them explicitly here.
-	 * Due to the use of IRQF_SHARED flag as default while requesting IRQs, we assume that
-	 * IRQ_NOAUTOEN is not applicable.
-	 */
-	disable_irq(mhi_cntrl->irq[0]);
 
 	for (i = 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) {
 		if (mhi_event->offload_ev)
@@ -205,8 +199,6 @@
 				mhi_cntrl->irq[mhi_event->irq], i);
 			goto error_request;
 		}
-
-		disable_irq(mhi_cntrl->irq[mhi_event->irq]);
 	}
 
 	return 0;
@@ -986,16 +978,12 @@
 		goto err_destroy_wq;
 	}
 
-	ret = mhi_init_irq_setup(mhi_cntrl);
-	if (ret)
-		goto err_ida_free;
-
 	/* Register controller with MHI bus */
 	mhi_dev = mhi_alloc_device(mhi_cntrl);
 	if (IS_ERR(mhi_dev)) {
 		dev_err(mhi_cntrl->cntrl_dev, "Failed to allocate MHI device\n");
 		ret = PTR_ERR(mhi_dev);
-		goto error_setup_irq;
+		goto err_ida_free;
 	}
 
 	mhi_dev->dev_type = MHI_DEVICE_CONTROLLER;
@@ -1018,8 +1006,6 @@
 
 err_release_dev:
 	put_device(&mhi_dev->dev);
-error_setup_irq:
-	mhi_deinit_free_irq(mhi_cntrl);
 err_ida_free:
 	ida_free(&mhi_controller_ida, mhi_cntrl->index);
 err_destroy_wq:
@@ -1040,7 +1026,6 @@
 	struct mhi_chan *mhi_chan = mhi_cntrl->mhi_chan;
 	unsigned int i;
 
-	mhi_deinit_free_irq(mhi_cntrl);
 	mhi_destroy_debugfs(mhi_cntrl);
 
 	destroy_workqueue(mhi_cntrl->hiprio_wq);
diff --git a/drivers/bus/mhi/host/pm.c b/drivers/bus/mhi/host/pm.c
index 4a42186..dc2e8ff 100644
--- a/drivers/bus/mhi/host/pm.c
+++ b/drivers/bus/mhi/host/pm.c
@@ -500,7 +500,7 @@
 	for (i = 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) {
 		if (mhi_event->offload_ev)
 			continue;
-		disable_irq(mhi_cntrl->irq[mhi_event->irq]);
+		free_irq(mhi_cntrl->irq[mhi_event->irq], mhi_event);
 		tasklet_kill(&mhi_event->task);
 	}
 
@@ -1060,13 +1060,12 @@
 
 int mhi_async_power_up(struct mhi_controller *mhi_cntrl)
 {
-	struct mhi_event *mhi_event = mhi_cntrl->mhi_event;
 	enum mhi_state state;
 	enum mhi_ee_type current_ee;
 	enum dev_st_transition next_state;
 	struct device *dev = &mhi_cntrl->mhi_dev->dev;
 	u32 interval_us = 25000; /* poll register field every 25 milliseconds */
-	int ret, i;
+	int ret;
 
 	dev_info(dev, "Requested to power ON\n");
 
@@ -1118,15 +1117,9 @@
 		mhi_write_reg(mhi_cntrl, mhi_cntrl->bhi, BHI_INTVEC, 0);
 	}
 
-	/* IRQs have been requested during probe, so we just need to enable them. */
-	enable_irq(mhi_cntrl->irq[0]);
-
-	for (i = 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) {
-		if (mhi_event->offload_ev)
-			continue;
-
-		enable_irq(mhi_cntrl->irq[mhi_event->irq]);
-	}
+	ret = mhi_init_irq_setup(mhi_cntrl);
+	if (ret)
+		goto error_exit;
 
 	/* Transition to next state */
 	next_state = MHI_IN_PBL(current_ee) ?
@@ -1189,7 +1182,7 @@
 	/* Wait for shutdown to complete */
 	flush_work(&mhi_cntrl->st_worker);
 
-	disable_irq(mhi_cntrl->irq[0]);
+	free_irq(mhi_cntrl->irq[0], mhi_cntrl);
 }
 EXPORT_SYMBOL_GPL(mhi_power_down);