diff options
author | Roland Stigge <stigge@antcom.de> | 2012-02-17 08:58:14 -0500 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-02-22 09:19:16 -0500 |
commit | 678a0222edc9da43a22145d68647500ee85e6c04 (patch) | |
tree | 6e0d859cd04ffc1ad723037e13513e2a269fb375 /arch/arm/mach-lpc32xx/clock.c | |
parent | b01543dfe67bb1d191998e90d20534dc354de059 (diff) |
ARM: LPC32xx: ADC support for mach-lpc32xx
This patch adds the mach specific support for the LPC32XX ADC driver (the
latter being already in staging/iio)
Signed-off-by: Roland Stigge <stigge@antcom.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm/mach-lpc32xx/clock.c')
-rw-r--r-- | arch/arm/mach-lpc32xx/clock.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/arm/mach-lpc32xx/clock.c b/arch/arm/mach-lpc32xx/clock.c index 1e027514096d..473015ac07bd 100644 --- a/arch/arm/mach-lpc32xx/clock.c +++ b/arch/arm/mach-lpc32xx/clock.c | |||
@@ -719,6 +719,41 @@ static struct clk clk_tsc = { | |||
719 | .get_rate = local_return_parent_rate, | 719 | .get_rate = local_return_parent_rate, |
720 | }; | 720 | }; |
721 | 721 | ||
722 | static int adc_onoff_enable(struct clk *clk, int enable) | ||
723 | { | ||
724 | u32 tmp; | ||
725 | u32 divider; | ||
726 | |||
727 | /* Use PERIPH_CLOCK */ | ||
728 | tmp = __raw_readl(LPC32XX_CLKPWR_ADC_CLK_CTRL_1); | ||
729 | tmp |= LPC32XX_CLKPWR_ADCCTRL1_PCLK_SEL; | ||
730 | /* | ||
731 | * Set clock divider so that we have equal to or less than | ||
732 | * 4.5MHz clock at ADC | ||
733 | */ | ||
734 | divider = clk->get_rate(clk) / 4500000 + 1; | ||
735 | tmp |= divider; | ||
736 | __raw_writel(tmp, LPC32XX_CLKPWR_ADC_CLK_CTRL_1); | ||
737 | |||
738 | /* synchronize rate of this clock w/ actual HW setting */ | ||
739 | clk->rate = clk->get_rate(clk->parent) / divider; | ||
740 | |||
741 | if (enable == 0) | ||
742 | __raw_writel(0, clk->enable_reg); | ||
743 | else | ||
744 | __raw_writel(clk->enable_mask, clk->enable_reg); | ||
745 | |||
746 | return 0; | ||
747 | } | ||
748 | |||
749 | static struct clk clk_adc = { | ||
750 | .parent = &clk_pclk, | ||
751 | .enable = adc_onoff_enable, | ||
752 | .enable_reg = LPC32XX_CLKPWR_ADC_CLK_CTRL, | ||
753 | .enable_mask = LPC32XX_CLKPWR_ADC32CLKCTRL_CLK_EN, | ||
754 | .get_rate = local_return_parent_rate, | ||
755 | }; | ||
756 | |||
722 | static int mmc_onoff_enable(struct clk *clk, int enable) | 757 | static int mmc_onoff_enable(struct clk *clk, int enable) |
723 | { | 758 | { |
724 | u32 tmp; | 759 | u32 tmp; |
@@ -1075,6 +1110,7 @@ static struct clk_lookup lookups[] = { | |||
1075 | _REGISTER_CLOCK("dev:ssp1", NULL, clk_ssp1) | 1110 | _REGISTER_CLOCK("dev:ssp1", NULL, clk_ssp1) |
1076 | _REGISTER_CLOCK("lpc32xx_keys.0", NULL, clk_kscan) | 1111 | _REGISTER_CLOCK("lpc32xx_keys.0", NULL, clk_kscan) |
1077 | _REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand) | 1112 | _REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand) |
1113 | _REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc) | ||
1078 | _REGISTER_CLOCK("tbd", "i2s0_ck", clk_i2s0) | 1114 | _REGISTER_CLOCK("tbd", "i2s0_ck", clk_i2s0) |
1079 | _REGISTER_CLOCK("tbd", "i2s1_ck", clk_i2s1) | 1115 | _REGISTER_CLOCK("tbd", "i2s1_ck", clk_i2s1) |
1080 | _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc) | 1116 | _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc) |