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

Commit bb90600d authored by Tony Lindgren's avatar Tony Lindgren Committed by Felipe Balbi
Browse files

usb: musb: Fix getting a generic phy for musb_dsps



We still have a combination of legacy phys and generic phys in
use so we need to support both types of phy for musb_dsps.c.

Cc: Brian Hutchinson <b.hutchman@gmail.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent eed97ef3
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -457,12 +457,27 @@ static int dsps_musb_init(struct musb *musb)
	if (IS_ERR(musb->xceiv))
		return PTR_ERR(musb->xceiv);

	musb->phy = devm_phy_get(dev->parent, "usb2-phy");

	/* Returns zero if e.g. not clocked */
	rev = dsps_readl(reg_base, wrp->revision);
	if (!rev)
		return -ENODEV;

	usb_phy_init(musb->xceiv);
	if (IS_ERR(musb->phy))  {
		musb->phy = NULL;
	} else {
		ret = phy_init(musb->phy);
		if (ret < 0)
			return ret;
		ret = phy_power_on(musb->phy);
		if (ret) {
			phy_exit(musb->phy);
			return ret;
		}
	}

	setup_timer(&glue->timer, otg_timer, (unsigned long) musb);

	/* Reset the musb */
@@ -502,6 +517,8 @@ static int dsps_musb_exit(struct musb *musb)

	del_timer_sync(&glue->timer);
	usb_phy_shutdown(musb->xceiv);
	phy_power_off(musb->phy);
	phy_exit(musb->phy);
	debugfs_remove_recursive(glue->dbgfs_root);

	return 0;
@@ -610,7 +627,7 @@ static int dsps_musb_reset(struct musb *musb)
	struct device *dev = musb->controller;
	struct dsps_glue *glue = dev_get_drvdata(dev->parent);
	const struct dsps_musb_wrapper *wrp = glue->wrp;
	int session_restart = 0;
	int session_restart = 0, error;

	if (glue->sw_babble_enabled)
		session_restart = sw_babble_control(musb);
@@ -624,8 +641,14 @@ static int dsps_musb_reset(struct musb *musb)
		dsps_writel(musb->ctrl_base, wrp->control, (1 << wrp->reset));
		usleep_range(100, 200);
		usb_phy_shutdown(musb->xceiv);
		error = phy_power_off(musb->phy);
		if (error)
			dev_err(dev, "phy shutdown failed: %i\n", error);
		usleep_range(100, 200);
		usb_phy_init(musb->xceiv);
		error = phy_power_on(musb->phy);
		if (error)
			dev_err(dev, "phy powerup failed: %i\n", error);
		session_restart = 1;
	}