diff options
author | Richard Zhu <r65037@freescale.com> | 2013-11-21 12:46:08 +0800 |
---|---|---|
committer | Richard Zhu <r65037@freescale.com> | 2013-11-21 15:45:30 +0800 |
commit | e0af1ad3fc0238be3018b40913d98af7b7eca9d1 (patch) | |
tree | 13947d2eb33f6f0706fe5ad1a197213f5cbc9a14 /drivers/ata | |
parent | 55d1c938e4935c553189b6ca7811abf23c53ae6d (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.c | 15 |
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, |