summaryrefslogtreecommitdiff
path: root/drivers/ata
diff options
context:
space:
mode:
authorRichard Zhu <r65037@freescale.com>2013-11-21 12:46:08 +0800
committerRichard Zhu <r65037@freescale.com>2013-11-21 15:45:30 +0800
commite0af1ad3fc0238be3018b40913d98af7b7eca9d1 (patch)
tree13947d2eb33f6f0706fe5ad1a197213f5cbc9a14 /drivers/ata
parent55d1c938e4935c553189b6ca7811abf23c53ae6d (diff)
ENGR00288985 imx: sata: add bus frequency high callbacks
Add the fsl BUS_FREQ_HIGH request/release callbacks, during clk enable/disable operations. Signed-off-by: Richard Zhu <r65037@freescale.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/ahci_imx.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
index ae2d73fe321e..2e5e6defaa77 100644
--- a/drivers/ata/ahci_imx.c
+++ b/drivers/ata/ahci_imx.c
@@ -26,6 +26,7 @@
#include <linux/mfd/syscon.h>
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
#include <linux/libata.h>
+#include <linux/busfreq-imx6.h>
#include "ahci.h"
enum {
@@ -76,6 +77,7 @@ static void ahci_imx_error_handler(struct ata_port *ap)
IMX6Q_GPR13_SATA_MPLL_CLK_EN,
!IMX6Q_GPR13_SATA_MPLL_CLK_EN);
clk_disable_unprepare(imxpriv->sata_ref_clk);
+ release_bus_freq(BUS_FREQ_HIGH);
imxpriv->no_device = true;
}
@@ -109,6 +111,7 @@ static int imx6q_sata_init(struct device *dev, void __iomem *mmio)
dev_err(dev, "prepare-enable sata_ref clock err:%d\n", ret);
return ret;
}
+ request_bus_freq(BUS_FREQ_HIGH);
/*
* set PHY Paremeters, two steps to configure the GPR13,
@@ -165,9 +168,13 @@ static void imx6q_sata_exit(struct device *dev)
{
struct imx_ahci_priv *imxpriv = dev_get_drvdata(dev->parent);
- regmap_update_bits(imxpriv->gpr, 0x34, IMX6Q_GPR13_SATA_MPLL_CLK_EN,
- !IMX6Q_GPR13_SATA_MPLL_CLK_EN);
- clk_disable_unprepare(imxpriv->sata_ref_clk);
+ if (!imxpriv->no_device) {
+ regmap_update_bits(imxpriv->gpr, 0x34,
+ IMX6Q_GPR13_SATA_MPLL_CLK_EN,
+ !IMX6Q_GPR13_SATA_MPLL_CLK_EN);
+ clk_disable_unprepare(imxpriv->sata_ref_clk);
+ release_bus_freq(BUS_FREQ_HIGH);
+ }
}
static int imx_ahci_suspend(struct device *dev)
@@ -183,6 +190,7 @@ static int imx_ahci_suspend(struct device *dev)
IMX6Q_GPR13_SATA_MPLL_CLK_EN,
!IMX6Q_GPR13_SATA_MPLL_CLK_EN);
clk_disable_unprepare(imxpriv->sata_ref_clk);
+ release_bus_freq(BUS_FREQ_HIGH);
}
return 0;
@@ -199,6 +207,7 @@ static int imx_ahci_resume(struct device *dev)
dev_err(dev, "pre-enable sata_ref clock err:%d\n", ret);
return ret;
}
+ request_bus_freq(BUS_FREQ_HIGH);
regmap_update_bits(imxpriv->gpr, IOMUXC_GPR13,
IMX6Q_GPR13_SATA_MPLL_CLK_EN,