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

Commit 0bdcb849 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: phy: qusb2: Keep regulators on in probe if EUD is enabled"

parents 2f5abdb1 74acccef
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -96,6 +96,7 @@ struct qusb_phy {
	void __iomem		*base;
	void __iomem		*efuse_reg;
	void __iomem		*refgen_north_bg_reg;
	void __iomem		*eud_enable_reg;

	struct clk		*ref_clk_src;
	struct clk		*ref_clk;
@@ -518,6 +519,11 @@ static int qusb_phy_init(struct usb_phy *phy)

	dev_dbg(phy->dev, "%s\n", __func__);

	if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) {
		dev_err(qphy->phy.dev, "eud is enabled\n");
		return 0;
	}

	qusb_phy_reset(qphy);

	if (qphy->qusb_phy_host_init_seq && qphy->phy.flags & PHY_HOST_MODE) {
@@ -825,6 +831,11 @@ static int qusb_phy_dpdm_regulator_enable(struct regulator_dev *rdev)
	dev_dbg(qphy->phy.dev, "%s dpdm_enable:%d\n",
				__func__, qphy->dpdm_enable);

	if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg)) {
		dev_err(qphy->phy.dev, "eud is enabled\n");
		return 0;
	}

	if (!qphy->dpdm_enable) {
		ret = qusb_phy_enable_power(qphy);
		if (ret < 0) {
@@ -1000,6 +1011,16 @@ static int qusb_phy_probe(struct platform_device *pdev)
		qphy->refgen_north_bg_reg = devm_ioremap(dev, res->start,
						resource_size(res));

	res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
			"eud_enable_reg");
	if (res) {
		qphy->eud_enable_reg = devm_ioremap_resource(dev, res);
		if (IS_ERR(qphy->eud_enable_reg)) {
			dev_err(dev, "err getting eud_enable_reg address\n");
			return PTR_ERR(qphy->eud_enable_reg);
		}
	}

	/* ref_clk_src is needed irrespective of SE_CLK or DIFF_CLK usage */
	qphy->ref_clk_src = devm_clk_get(dev, "ref_clk_src");
	if (IS_ERR(qphy->ref_clk_src)) {
@@ -1227,6 +1248,14 @@ static int qusb_phy_probe(struct platform_device *pdev)
	qphy->suspended = true;
	qusb_phy_create_debugfs(qphy);

	/*
	 * EUD may be enable in boot loader and to keep EUD session alive across
	 * kernel boot till USB phy driver is initialized based on cable status,
	 * keep LDOs on here.
	 */
	if (qphy->eud_enable_reg && readl_relaxed(qphy->eud_enable_reg))
		qusb_phy_enable_power(qphy);

	return ret;
}