summaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2012-03-15 15:12:38 +0530
committerSimone Willett <swillett@nvidia.com>2012-03-15 20:41:28 -0700
commit3d1a984fed3b70b11a358b56faf32219e093479d (patch)
tree4b48ed4504eac463eaa9289ae7f9f781b9520e74 /drivers/spi
parentce8ac37e4e3384b4eb8b54f0d1e76da5780c77fa (diff)
spi: tegra: Make sure SCLK frequency to be in minimum require value.
Making sure that SCLK frequency should be maintain on minimum require value during spi transfer. This is require to proper functioning of spi controller. bug 949393 Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/89526 Cherry-picked from commit 7d83f658b39b2ab1a5105eec7649246fddea7325 Change-Id: I60fa0fef98e5f2882c646c29e1773194deddd6da Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-on: http://git-master/r/90296 Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/spi-tegra.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/spi/spi-tegra.c b/drivers/spi/spi-tegra.c
index a5c916663217..6810f611c55c 100644
--- a/drivers/spi/spi-tegra.c
+++ b/drivers/spi/spi-tegra.c
@@ -178,6 +178,7 @@ struct spi_tegra_data {
char port_name[32];
struct clk *clk;
+ struct clk *sclk;
void __iomem *base;
phys_addr_t phys;
unsigned irq;
@@ -1267,13 +1268,20 @@ static int __init spi_tegra_probe(struct platform_device *pdev)
goto fail_irq_req;
}
- tspi->clk = clk_get(&pdev->dev, NULL);
+ tspi->clk = clk_get(&pdev->dev, "spi");
if (IS_ERR(tspi->clk)) {
dev_err(&pdev->dev, "can not get clock\n");
ret = PTR_ERR(tspi->clk);
goto fail_clk_get;
}
+ tspi->sclk = clk_get(&pdev->dev, "sclk");
+ if (IS_ERR(tspi->sclk)) {
+ dev_err(&pdev->dev, "can not get sclock\n");
+ ret = PTR_ERR(tspi->sclk);
+ goto fail_sclk_get;
+ }
+
INIT_LIST_HEAD(&tspi->queue);
if (pdata) {
@@ -1434,6 +1442,9 @@ fail_rx_buf_alloc:
tegra_dma_free_channel(tspi->rx_dma);
fail_rx_dma_alloc:
pm_runtime_disable(&pdev->dev);
+ clk_put(tspi->sclk);
+fail_sclk_get:
+ clk_put(tspi->clk);
fail_clk_get:
free_irq(tspi->irq, tspi);
fail_irq_req:
@@ -1472,6 +1483,7 @@ static int __devexit spi_tegra_remove(struct platform_device *pdev)
}
pm_runtime_disable(&pdev->dev);
+ clk_put(tspi->sclk);
clk_put(tspi->clk);
iounmap(tspi->base);
@@ -1588,6 +1600,7 @@ static int tegra_spi_runtime_idle(struct device *dev)
tspi = spi_master_get_devdata(master);
clk_disable(tspi->clk);
+ clk_disable(tspi->sclk);
return 0;
}
@@ -1598,6 +1611,7 @@ static int tegra_spi_runtime_resume(struct device *dev)
master = dev_get_drvdata(dev);
tspi = spi_master_get_devdata(master);
+ clk_enable(tspi->sclk);
clk_enable(tspi->clk);
return 0;
}