lkml.org 
[lkml]   [2021]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v10 09/11] PCI: kirin: Add power_off support for Kirin 960 PHY
    Date
    In order to prepare for module unload, add a power_off method
    for HiKey 960.

    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    ---
    drivers/pci/controller/dwc/pcie-kirin.c | 21 ++++++++++++++++++---
    1 file changed, 18 insertions(+), 3 deletions(-)

    diff --git a/drivers/pci/controller/dwc/pcie-kirin.c b/drivers/pci/controller/dwc/pcie-kirin.c
    index 218b90ac93dc..21453d21ebad 100644
    --- a/drivers/pci/controller/dwc/pcie-kirin.c
    +++ b/drivers/pci/controller/dwc/pcie-kirin.c
    @@ -343,6 +343,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
    */
    @@ -558,7 +570,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,
    @@ -712,8 +723,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;
    }
    @@ -723,7 +738,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);
    --
    2.31.1
    \
     
     \ /
      Last update: 2021-08-10 11:58    [W:5.372 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site