Commit 76afbdc7 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Bjorn Helgaas
Browse files

PCI: kirin: Add power_off support for Kirin 960 PHY

parent aed9d9e4
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -342,6 +342,18 @@ static int hi3660_pcie_phy_init(struct platform_device *pdev,
	return hi3660_pcie_phy_get_resource(phy);
}

static int hi3660_pcie_phy_power_off(struct kirin_pcie *pcie)
{
	struct hi3660_pcie_phy *phy = pcie->phy_priv;

	/* Drop power supply for Host */
	regmap_write(phy->sysctrl, SCTRL_PCIE_CMOS_OFFSET, 0x00);

	hi3660_pcie_phy_clk_ctrl(phy, false);

	return 0;
}

/*
 * The non-PHY part starts here
 */
@@ -561,7 +573,6 @@ static int kirin_pcie_add_bus(struct pci_bus *bus)
	return 0;
}


static struct pci_ops kirin_pci_ops = {
	.read = kirin_pcie_rd_own_conf,
	.write = kirin_pcie_wr_own_conf,
@@ -715,8 +726,12 @@ static int kirin_pcie_power_on(struct platform_device *pdev,

	return 0;
err:
	if (kirin_pcie->type != PCIE_KIRIN_INTERNAL_PHY)
	if (kirin_pcie->type == PCIE_KIRIN_INTERNAL_PHY) {
		hi3660_pcie_phy_power_off(kirin_pcie);
	} else {
		phy_power_off(kirin_pcie->phy);
		phy_exit(kirin_pcie->phy);
	}

	return ret;
}
@@ -726,7 +741,7 @@ static int __exit kirin_pcie_remove(struct platform_device *pdev)
	struct kirin_pcie *kirin_pcie = platform_get_drvdata(pdev);

	if (kirin_pcie->type == PCIE_KIRIN_INTERNAL_PHY)
		return 0;
		return hi3660_pcie_phy_power_off(kirin_pcie);

	phy_power_off(kirin_pcie->phy);
	phy_exit(kirin_pcie->phy);