aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-lpc32xx
diff options
context:
space:
mode:
authorRoland Stigge <stigge@antcom.de>2012-03-13 16:15:40 -0400
committerRoland Stigge <stigge@antcom.de>2012-03-13 16:15:40 -0400
commita7e4c6a7145ee375a688e1701ae4c975d6c6419a (patch)
tree0438b5b99a88ec694bb5a91c8ca0cb52fec928f1 /arch/arm/mach-lpc32xx
parent73d43d00649985cf6509b4f99a720665f1b7c559 (diff)
parent678a0222edc9da43a22145d68647500ee85e6c04 (diff)
Merge branch 'lpc32xx/drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc into lpc32xx/tmp
Conflicts: arch/arm/mach-lpc32xx/clock.c
Diffstat (limited to 'arch/arm/mach-lpc32xx')
-rw-r--r--arch/arm/mach-lpc32xx/clock.c36
-rw-r--r--arch/arm/mach-lpc32xx/common.c22
-rw-r--r--arch/arm/mach-lpc32xx/common.h1
-rw-r--r--arch/arm/mach-lpc32xx/phy3250.c1
4 files changed, 60 insertions, 0 deletions
diff --git a/arch/arm/mach-lpc32xx/clock.c b/arch/arm/mach-lpc32xx/clock.c
index 0e01bf44479c..ab8c21647422 100644
--- a/arch/arm/mach-lpc32xx/clock.c
+++ b/arch/arm/mach-lpc32xx/clock.c
@@ -721,6 +721,41 @@ static struct clk clk_tsc = {
721 .get_rate = local_return_parent_rate, 721 .get_rate = local_return_parent_rate,
722}; 722};
723 723
724static int adc_onoff_enable(struct clk *clk, int enable)
725{
726 u32 tmp;
727 u32 divider;
728
729 /* Use PERIPH_CLOCK */
730 tmp = __raw_readl(LPC32XX_CLKPWR_ADC_CLK_CTRL_1);
731 tmp |= LPC32XX_CLKPWR_ADCCTRL1_PCLK_SEL;
732 /*
733 * Set clock divider so that we have equal to or less than
734 * 4.5MHz clock at ADC
735 */
736 divider = clk->get_rate(clk) / 4500000 + 1;
737 tmp |= divider;
738 __raw_writel(tmp, LPC32XX_CLKPWR_ADC_CLK_CTRL_1);
739
740 /* synchronize rate of this clock w/ actual HW setting */
741 clk->rate = clk->get_rate(clk->parent) / divider;
742
743 if (enable == 0)
744 __raw_writel(0, clk->enable_reg);
745 else
746 __raw_writel(clk->enable_mask, clk->enable_reg);
747
748 return 0;
749}
750
751static struct clk clk_adc = {
752 .parent = &clk_pclk,
753 .enable = adc_onoff_enable,
754 .enable_reg = LPC32XX_CLKPWR_ADC_CLK_CTRL,
755 .enable_mask = LPC32XX_CLKPWR_ADC32CLKCTRL_CLK_EN,
756 .get_rate = local_return_parent_rate,
757};
758
724static int mmc_onoff_enable(struct clk *clk, int enable) 759static int mmc_onoff_enable(struct clk *clk, int enable)
725{ 760{
726 u32 tmp; 761 u32 tmp;
@@ -1057,6 +1092,7 @@ static struct clk_lookup lookups[] = {
1057 _REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand) 1092 _REGISTER_CLOCK("lpc32xx-nand.0", "nand_ck", clk_nand)
1058 _REGISTER_CLOCK(NULL, "i2s0_ck", clk_i2s0) 1093 _REGISTER_CLOCK(NULL, "i2s0_ck", clk_i2s0)
1059 _REGISTER_CLOCK(NULL, "i2s1_ck", clk_i2s1) 1094 _REGISTER_CLOCK(NULL, "i2s1_ck", clk_i2s1)
1095 _REGISTER_CLOCK("lpc32xx-adc", NULL, clk_adc)
1060 _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc) 1096 _REGISTER_CLOCK("ts-lpc32xx", NULL, clk_tsc)
1061 _REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc) 1097 _REGISTER_CLOCK("dev:mmc0", NULL, clk_mmc)
1062 _REGISTER_CLOCK("lpc-net.0", NULL, clk_net) 1098 _REGISTER_CLOCK("lpc-net.0", NULL, clk_net)
diff --git a/arch/arm/mach-lpc32xx/common.c b/arch/arm/mach-lpc32xx/common.c
index 369b152896cd..6c76bb36559b 100644
--- a/arch/arm/mach-lpc32xx/common.c
+++ b/arch/arm/mach-lpc32xx/common.c
@@ -138,6 +138,28 @@ struct platform_device lpc32xx_rtc_device = {
138}; 138};
139 139
140/* 140/*
141 * ADC support
142 */
143static struct resource adc_resources[] = {
144 {
145 .start = LPC32XX_ADC_BASE,
146 .end = LPC32XX_ADC_BASE + SZ_4K - 1,
147 .flags = IORESOURCE_MEM,
148 }, {
149 .start = IRQ_LPC32XX_TS_IRQ,
150 .end = IRQ_LPC32XX_TS_IRQ,
151 .flags = IORESOURCE_IRQ,
152 },
153};
154
155struct platform_device lpc32xx_adc_device = {
156 .name = "lpc32xx-adc",
157 .id = -1,
158 .num_resources = ARRAY_SIZE(adc_resources),
159 .resource = adc_resources,
160};
161
162/*
141 * Returns the unique ID for the device 163 * Returns the unique ID for the device
142 */ 164 */
143void lpc32xx_get_uid(u32 devid[4]) 165void lpc32xx_get_uid(u32 devid[4])
diff --git a/arch/arm/mach-lpc32xx/common.h b/arch/arm/mach-lpc32xx/common.h
index 75640bfb097f..68f2e46d98ad 100644
--- a/arch/arm/mach-lpc32xx/common.h
+++ b/arch/arm/mach-lpc32xx/common.h
@@ -29,6 +29,7 @@ extern struct platform_device lpc32xx_i2c0_device;
29extern struct platform_device lpc32xx_i2c1_device; 29extern struct platform_device lpc32xx_i2c1_device;
30extern struct platform_device lpc32xx_i2c2_device; 30extern struct platform_device lpc32xx_i2c2_device;
31extern struct platform_device lpc32xx_tsc_device; 31extern struct platform_device lpc32xx_tsc_device;
32extern struct platform_device lpc32xx_adc_device;
32extern struct platform_device lpc32xx_rtc_device; 33extern struct platform_device lpc32xx_rtc_device;
33 34
34/* 35/*
diff --git a/arch/arm/mach-lpc32xx/phy3250.c b/arch/arm/mach-lpc32xx/phy3250.c
index 945a2f24d5e9..4590a8b52e72 100644
--- a/arch/arm/mach-lpc32xx/phy3250.c
+++ b/arch/arm/mach-lpc32xx/phy3250.c
@@ -278,6 +278,7 @@ static struct platform_device *phy3250_devs[] __initdata = {
278 &lpc32xx_i2c2_device, 278 &lpc32xx_i2c2_device,
279 &lpc32xx_watchdog_device, 279 &lpc32xx_watchdog_device,
280 &lpc32xx_gpio_led_device, 280 &lpc32xx_gpio_led_device,
281 &lpc32xx_adc_device,
281}; 282};
282 283
283static struct amba_device *amba_devs[] __initdata = { 284static struct amba_device *amba_devs[] __initdata = {