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

Commit 349907c2 authored by Ivan T. Ivanov's avatar Ivan T. Ivanov Committed by Felipe Balbi
Browse files

usb: phy: msm: Handle disconnect events



Put the transceiver in non-driving mode. Otherwise host
may not detect soft-disconnection.

Signed-off-by: default avatarIvan T. Ivanov <iivanov@mm-sol.com>
Cc: Pavankumar Kondeti <pkondeti@codeaurora.org>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 30bf8667
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -235,6 +235,23 @@ static void ulpi_init(struct msm_otg *motg)
	}
}

static int msm_phy_notify_disconnect(struct usb_phy *phy,
				   enum usb_device_speed speed)
{
	int val;

	/*
	 * Put the transceiver in non-driving mode. Otherwise host
	 * may not detect soft-disconnection.
	 */
	val = ulpi_read(phy, ULPI_FUNC_CTRL);
	val &= ~ULPI_FUNC_CTRL_OPMODE_MASK;
	val |= ULPI_FUNC_CTRL_OPMODE_NONDRIVING;
	ulpi_write(phy, val, ULPI_FUNC_CTRL);

	return 0;
}

static int msm_otg_link_clk_reset(struct msm_otg *motg, bool assert)
{
	int ret;
@@ -1626,6 +1643,7 @@ static int msm_otg_probe(struct platform_device *pdev)

	phy->init = msm_phy_init;
	phy->set_power = msm_otg_set_power;
	phy->notify_disconnect = msm_phy_notify_disconnect;

	phy->io_ops = &msm_otg_io_ops;