Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 984f753c authored by Richard Zhao's avatar Richard Zhao Committed by Greg Kroah-Hartman
Browse files

USB: chipidea: acknowledge ID change interrupt in irq handler



In order to avoid re-queueing of the role changing work, we need to clear
the ID change interrupt bit right in the irq handler.

Tested-by: default avatarMichael Grzeschik <m.grzeschik@pengutronix.de>
Tested-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: default avatarRichard Zhao <richard.zhao@freescale.com>
Signed-off-by: default avatarAlexander Shishkin <alexander.shishkin@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 86ad01a9
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -273,8 +273,6 @@ static void ci_role_work(struct work_struct *work)
	struct ci13xxx *ci = container_of(work, struct ci13xxx, work);
	enum ci_role role = ci_otg_role(ci);

	hw_write(ci, OP_OTGSC, OTGSC_IDIS, OTGSC_IDIS);

	if (role != ci->role) {
		dev_dbg(ci->dev, "switching from %s to %s\n",
			ci_role(ci)->name, ci->roles[role]->name);
@@ -325,6 +323,7 @@ static irqreturn_t ci_irq(int irq, void *data)
		u32 sts = hw_read(ci, OP_OTGSC, ~0);

		if (sts & OTGSC_IDIS) {
			hw_write(ci, OP_OTGSC, OTGSC_IDIS, OTGSC_IDIS);
			queue_work(ci->wq, &ci->work);
			ret = IRQ_HANDLED;
		}