summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-10-31 12:35:12 +0100
committerMax Krummenacher <max.krummenacher@toradex.com>2018-11-08 11:31:50 +0100
commitda0aa53df04d82eb15cecab90d98e6696d882923 (patch)
treeae3d9eabaf8ddda22139af82368fee8bde20750d
parent1163997ec1b094515bbcb7502890569866c5e7d2 (diff)
ata: imx: add external clock support for i.MX8QM
Add external reference clock via clock tree. This allows to model the shared reference clock provided via PCIE_SATA_REFCLK100M_P/N properly. This is analogous to what we did for PCIe in commit db22e7590338 ("PCI: imx6: add external clock support for i.MX8QM"). Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> (cherry picked from commit 4b2d05c05c9e775abf7218ad7a4b52c2d220dd14) Conflicts: drivers/ata/ahci_imx.c Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
-rw-r--r--drivers/ata/ahci_imx.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
index 05f2fdaee9b3..c7ee17fc1b21 100644
--- a/drivers/ata/ahci_imx.c
+++ b/drivers/ata/ahci_imx.c
@@ -142,6 +142,7 @@ struct imx_ahci_priv {
struct clk *phy_pclk0;
struct clk *phy_pclk1;
void __iomem *phy_base;
+ struct clk *sata_ext;
int clkreq_gpio;
struct regmap *gpr;
bool no_device;
@@ -567,10 +568,14 @@ static int imx_sata_enable(struct ahci_host_priv *hpriv)
if (ret)
return ret;
- ret = clk_prepare_enable(imxpriv->sata_ref_clk);
+ ret = clk_prepare_enable(imxpriv->sata_ext);
if (ret < 0)
goto disable_regulator;
+ ret = clk_prepare_enable(imxpriv->sata_ref_clk);
+ if (ret < 0)
+ goto disable_ext;
+
if (imxpriv->type == AHCI_IMX6Q || imxpriv->type == AHCI_IMX6QP) {
/*
* set PHY Paremeters, two steps to configure the GPR13,
@@ -625,6 +630,8 @@ static int imx_sata_enable(struct ahci_host_priv *hpriv)
disable_clk:
clk_disable_unprepare(imxpriv->sata_ref_clk);
+disable_ext:
+ clk_disable_unprepare(imxpriv->sata_ext);
disable_regulator:
ahci_platform_disable_regulators(hpriv);
@@ -654,6 +661,8 @@ static void imx_sata_disable(struct ahci_host_priv *hpriv)
}
clk_disable_unprepare(imxpriv->sata_ref_clk);
+ clk_disable_unprepare(imxpriv->sata_ext);
+
ahci_platform_disable_regulators(hpriv);
}
@@ -1103,6 +1112,12 @@ static int imx_ahci_probe(struct platform_device *pdev)
return PTR_ERR(imxpriv->sata_clk);
}
+ imxpriv->sata_ext = devm_clk_get(dev, "sata_ext");
+ if (IS_ERR(imxpriv->sata_ext)) {
+ dev_err(dev, "can't get sata_ext clock.\n");
+ return PTR_ERR(imxpriv->sata_ext);
+ }
+
imxpriv->sata_ref_clk = devm_clk_get(dev, "sata_ref");
if (IS_ERR(imxpriv->sata_ref_clk)) {
dev_err(dev, "can't get sata_ref clock.\n");