summaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2011-05-19 17:56:33 -0700
committerSimon Glass <sjg@chromium.org>2011-08-24 10:01:51 -0700
commitf22424f2c7b085a88eb6b750c6acca1e2d133e9c (patch)
tree73b4d58fd2af0e64114f6b502a16cf6a33a02bd8 /drivers/spi
parenta9177e1137f15505a0a5718e46167f43baede92b (diff)
tegra2: Add clock and PLL control functions
This adds functions for setting up clocks to peripherals, by selecting a parent clock and specifying a rate. BUG=chromium-os:13228 TEST=Build, boot on Seaboard Change-Id: I957723b5f0ef64244c16f44ae7cbd79abf06427d Reviewed-on: http://gerrit.chromium.org/gerrit/1290 Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/tegra2_spi.c22
1 files changed, 3 insertions, 19 deletions
diff --git a/drivers/spi/tegra2_spi.c b/drivers/spi/tegra2_spi.c
index c6833b83d0..e200a5c7d4 100644
--- a/drivers/spi/tegra2_spi.c
+++ b/drivers/spi/tegra2_spi.c
@@ -26,6 +26,7 @@
#include <malloc.h>
#include <ns16550.h> /* for NS16550_drain and NS16550_clear */
#include <spi.h>
+#include <asm/clocks.h>
#include <asm/io.h>
#include <asm/arch/bitfield.h>
#include <asm/arch/clk_rst.h>
@@ -75,30 +76,13 @@ void spi_free_slave(struct spi_slave *slave)
void spi_init(void)
{
- struct clk_rst_ctlr *clkrst = (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
struct spi_tegra *spi = (struct spi_tegra *)TEGRA2_SPI_BASE;
u32 reg;
- /*
- * SPI reset/clocks init - reset SPI, set clocks, release from reset
- */
- reset_set_enable(PERIPH_ID_SPI1, 1);
- clock_enable(PERIPH_ID_SPI1);
-
/* Change SPI clock to 24MHz, PLLP_OUT0 source */
- reg = readl(&clkrst->crc_clk_src_spi1);
- reg &= 0x3FFFFF00; /* src = PLLP_OUT0 */
- reg |= ((9-1) << 1); /* div = 9 in 7.1 format */
- writel(reg, &clkrst->crc_clk_src_spi1);
- debug("spi_init: ClkSrc = %08x\n", reg);
-
- /* wait for 2us */
- udelay(2);
-
- reset_set_enable(PERIPH_ID_SPI1, 0);
+ clock_start_periph_pll(PERIPH_ID_SPI1, CLOCK_ID_PERIPH, CLK_24M);
/* Clear stale status here */
-
reg = SPI_STAT_RDY | SPI_STAT_RXF_FLUSH | SPI_STAT_TXF_FLUSH | \
SPI_STAT_RXF_UNR | SPI_STAT_TXF_OVF;
writel(reg, &spi->status);
@@ -109,7 +93,7 @@ void spi_init(void)
*/
reg = readl(&spi->command);
- writel((reg | SPI_CMD_CS_SOFT), &spi->command);
+ writel(reg | SPI_CMD_CS_SOFT, &spi->command);
debug("spi_init: COMMAND = %08x\n", readl(&spi->command));
/*