* [PATCH 6/8] S3C: merge ADC drivers and add support for the S3C64xx
@ 2009-11-20 12:04 Maurus Cuelenaere
2009-11-20 12:16 ` Vasily Khoruzhick
0 siblings, 1 reply; 6+ messages in thread
From: Maurus Cuelenaere @ 2009-11-20 12:04 UTC (permalink / raw)
To: linux-arm-kernel
This moves the S3C24xx ADC driver to plat-s3c and adds support
for the S3C64xx.
Signed-off-by: Maurus Cuelenaere <mcuelenaere@gmail.com>
---
arch/arm/plat-s3c/Kconfig | 7 +++++
arch/arm/plat-s3c/Makefile | 4 +++
arch/arm/{plat-s3c24xx => plat-s3c}/adc.c | 17 +++++++++--
arch/arm/plat-s3c/include/plat/regs-adc.h | 3 ++
arch/arm/plat-s3c24xx/Kconfig | 7 -----
arch/arm/plat-s3c24xx/Makefile | 1 -
arch/arm/plat-s3c64xx/Makefile | 1 +
arch/arm/plat-s3c64xx/dev-adc.c | 42 +++++++++++++++++++++++++++++
8 files changed, 71 insertions(+), 11 deletions(-)
rename arch/arm/{plat-s3c24xx => plat-s3c}/adc.c (95%)
create mode 100644 arch/arm/plat-s3c64xx/dev-adc.c
diff --git a/arch/arm/plat-s3c/Kconfig b/arch/arm/plat-s3c/Kconfig
index 57e685b..4184084 100644
--- a/arch/arm/plat-s3c/Kconfig
+++ b/arch/arm/plat-s3c/Kconfig
@@ -159,6 +159,13 @@ config S3C_GPIO_CFG_S3C64XX
Internal configuration to enable S3C64XX style GPIO configuration
functions.
+config S3C_ADC
+ bool "ADC common driver support"
+ help
+ Core support for the ADC block found in the S3C SoC systems
+ for drivers such as the touchscreen and hwmon to use to share
+ this resource.
+
# DMA
config S3C_DMA
diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile
index 50444da..960fb43 100644
--- a/arch/arm/plat-s3c/Makefile
+++ b/arch/arm/plat-s3c/Makefile
@@ -32,6 +32,10 @@ obj-$(CONFIG_S3C2410_PM_CHECK) += pm-check.o
obj-$(CONFIG_HAVE_PWM) += pwm.o
+# ADC support
+
+obj-$(CONFIG_S3C_ADC) += adc.o
+
# devices
obj-$(CONFIG_S3C_DEV_HSMMC) += dev-hsmmc.o
diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c/adc.c
similarity index 95%
rename from arch/arm/plat-s3c24xx/adc.c
rename to arch/arm/plat-s3c/adc.c
index df47322..572b7be 100644
--- a/arch/arm/plat-s3c24xx/adc.c
+++ b/arch/arm/plat-s3c/adc.c
@@ -1,10 +1,10 @@
-/* arch/arm/plat-s3c24xx/adc.c
+/* arch/arm/plat-s3c/adc.c
*
* Copyright (c) 2008 Simtec Electronics
* http://armlinux.simtec.co.uk/
* Ben Dooks <ben@simtec.co.uk>, <ben-linux@fluff.org>
*
- * S3C24XX ADC device core
+ * S3C ADC device core
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -72,10 +72,18 @@ static LIST_HEAD(adc_pending);
#define adc_dbg(_adc, msg...) dev_dbg(&(_adc)->pdev->dev, msg)
+#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | \
+ S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_AUTO_PST | \
+ S3C2410_ADCTSC_XY_PST(0))
+
static inline void s3c_adc_convert(struct adc_device *adc)
{
unsigned con = readl(adc->regs + S3C2410_ADCCON);
+ if (adc->cur->is_ts)
+ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST,
+ adc->regs + S3C2410_ADCTSC);
+
con |= S3C2410_ADCCON_ENABLE_START;
writel(con, adc->regs + S3C2410_ADCCON);
}
@@ -260,6 +268,9 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
unsigned long flags;
unsigned data0, data1;
+ /* Clear ADC interrupt */
+ __raw_writel(0x0, adc->regs + S3C6400_ADCCLRINT);
+
if (!client) {
dev_warn(&adc->pdev->dev, "%s: no adc pending\n", __func__);
return IRQ_HANDLED;
@@ -412,7 +423,7 @@ static int s3c_adc_resume(struct platform_device *pdev)
static struct platform_driver s3c_adc_driver = {
.driver = {
- .name = "s3c24xx-adc",
+ .name = "s3c-adc",
.owner = THIS_MODULE,
},
.probe = s3c_adc_probe,
diff --git a/arch/arm/plat-s3c/include/plat/regs-adc.h
b/arch/arm/plat-s3c/include/plat/regs-adc.h
index 4323ccc..cd7d2a5 100644
--- a/arch/arm/plat-s3c/include/plat/regs-adc.h
+++ b/arch/arm/plat-s3c/include/plat/regs-adc.h
@@ -19,6 +19,9 @@
#define S3C2410_ADCDLY S3C2410_ADCREG(0x08)
#define S3C2410_ADCDAT0 S3C2410_ADCREG(0x0C)
#define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10)
+#define S3C6400_ADCUPDN S3C2410_ADCREG(0x14)
+#define S3C6400_ADCCLRINT S3C2410_ADCREG(0x18)
+#define S3C6400_ADCCLRIPD S3C2410_ADCREG(0x20)
/* ADCCON Register Bits */
diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig
index 9c7aca4..c402ed9 100644
--- a/arch/arm/plat-s3c24xx/Kconfig
+++ b/arch/arm/plat-s3c24xx/Kconfig
@@ -119,13 +119,6 @@ config S3C2410_DMA_DEBUG
Enable debugging output for the DMA code. This option sends info
to the kernel log, at priority KERN_DEBUG.
-config S3C24XX_ADC
- bool "ADC common driver support"
- help
- Core support for the ADC block found in the S3C24XX SoC systems
- for drivers such as the touchscreen and hwmon to use to share
- this resource.
-
# SPI default pin configuration code
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile
index 7780d2d..a2cb87b 100644
--- a/arch/arm/plat-s3c24xx/Makefile
+++ b/arch/arm/plat-s3c24xx/Makefile
@@ -38,7 +38,6 @@ obj-$(CONFIG_PM) += irq-pm.o
obj-$(CONFIG_PM) += sleep.o
obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o
obj-$(CONFIG_S3C2410_DMA) += dma.o
-obj-$(CONFIG_S3C24XX_ADC) += adc.o
obj-$(CONFIG_S3C2410_IOTIMING) += s3c2410-iotiming.o
obj-$(CONFIG_S3C2412_IOTIMING) += s3c2412-iotiming.o
obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += s3c2410-cpufreq-utils.o
diff --git a/arch/arm/plat-s3c64xx/Makefile b/arch/arm/plat-s3c64xx/Makefile
index b85b435..a8c5d17 100644
--- a/arch/arm/plat-s3c64xx/Makefile
+++ b/arch/arm/plat-s3c64xx/Makefile
@@ -13,6 +13,7 @@ obj- :=
# Core files
obj-y += dev-uart.o
+obj-y += dev-adc.o
obj-y += cpu.o
obj-y += irq.o
obj-y += irq-eint.o
diff --git a/arch/arm/plat-s3c64xx/dev-adc.c b/arch/arm/plat-s3c64xx/dev-adc.c
new file mode 100644
index 0000000..8cff72e
--- /dev/null
+++ b/arch/arm/plat-s3c64xx/dev-adc.c
@@ -0,0 +1,42 @@
+/* linux/arch/arm/plat-s3c64xx/dev-adc.c
+ *
+ * Copyright 2009 by Maurus Cuelenaere <mcuelenaere@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/platform_device.h>
+
+#include <mach/irqs.h>
+#include <mach/map.h>
+
+#include <plat/devs.h>
+
+static struct resource s3c_adc_resource[] = {
+ [0] = {
+ .start = S3C64XX_PA_ADC,
+ .end = S3C64XX_PA_ADC + SZ_1K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .start = IRQ_TC,
+ .end = IRQ_TC,
+ .flags = IORESOURCE_IRQ,
+ },
+ [2] = {
+ .start = IRQ_ADC,
+ .end = IRQ_ADC,
+ .flags = IORESOURCE_IRQ,
+ }
+};
+
+struct platform_device s3c_device_adc = {
+ .name = "s3c-adc",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s3c_adc_resource),
+ .resource = s3c_adc_resource,
+};
--
1.6.5.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 6/8] S3C: merge ADC drivers and add support for the S3C64xx
2009-11-20 12:04 [PATCH 6/8] S3C: merge ADC drivers and add support for the S3C64xx Maurus Cuelenaere
@ 2009-11-20 12:16 ` Vasily Khoruzhick
2009-11-20 14:34 ` Maurus Cuelenaere
0 siblings, 1 reply; 6+ messages in thread
From: Vasily Khoruzhick @ 2009-11-20 12:16 UTC (permalink / raw)
To: linux-arm-kernel
? ????????? ?? 20 ?????? 2009 14:04:10 ????? Maurus Cuelenaere ???????:
> This moves the S3C24xx ADC driver to plat-s3c and adds support
> for the S3C64xx.
>
> Signed-off-by: Maurus Cuelenaere <mcuelenaere@gmail.com>
> ---
> arch/arm/plat-s3c/Kconfig | 7 +++++
> arch/arm/plat-s3c/Makefile | 4 +++
> arch/arm/{plat-s3c24xx => plat-s3c}/adc.c | 17 +++++++++--
> arch/arm/plat-s3c/include/plat/regs-adc.h | 3 ++
> arch/arm/plat-s3c24xx/Kconfig | 7 -----
> arch/arm/plat-s3c24xx/Makefile | 1 -
> arch/arm/plat-s3c64xx/Makefile | 1 +
> arch/arm/plat-s3c64xx/dev-adc.c | 42
> +++++++++++++++++++++++++++++ 8 files changed, 71 insertions(+), 11
> deletions(-)
> rename arch/arm/{plat-s3c24xx => plat-s3c}/adc.c (95%)
> create mode 100644 arch/arm/plat-s3c64xx/dev-adc.c
>
> diff --git a/arch/arm/plat-s3c/Kconfig b/arch/arm/plat-s3c/Kconfig
> index 57e685b..4184084 100644
> --- a/arch/arm/plat-s3c/Kconfig
> +++ b/arch/arm/plat-s3c/Kconfig
> @@ -159,6 +159,13 @@ config S3C_GPIO_CFG_S3C64XX
> Internal configuration to enable S3C64XX style GPIO configuration
> functions.
>
> +config S3C_ADC
> + bool "ADC common driver support"
> + help
> + Core support for the ADC block found in the S3C SoC systems
> + for drivers such as the touchscreen and hwmon to use to share
> + this resource.
> +
> # DMA
>
> config S3C_DMA
> diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile
> index 50444da..960fb43 100644
> --- a/arch/arm/plat-s3c/Makefile
> +++ b/arch/arm/plat-s3c/Makefile
> @@ -32,6 +32,10 @@ obj-$(CONFIG_S3C2410_PM_CHECK) += pm-check.o
>
> obj-$(CONFIG_HAVE_PWM) += pwm.o
>
> +# ADC support
> +
> +obj-$(CONFIG_S3C_ADC) += adc.o
> +
> # devices
>
> obj-$(CONFIG_S3C_DEV_HSMMC) += dev-hsmmc.o
> diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c/adc.c
> similarity index 95%
> rename from arch/arm/plat-s3c24xx/adc.c
> rename to arch/arm/plat-s3c/adc.c
> index df47322..572b7be 100644
> --- a/arch/arm/plat-s3c24xx/adc.c
> +++ b/arch/arm/plat-s3c/adc.c
> @@ -1,10 +1,10 @@
> -/* arch/arm/plat-s3c24xx/adc.c
> +/* arch/arm/plat-s3c/adc.c
> *
> * Copyright (c) 2008 Simtec Electronics
> * http://armlinux.simtec.co.uk/
> * Ben Dooks <ben@simtec.co.uk>, <ben-linux@fluff.org>
> *
> - * S3C24XX ADC device core
> + * S3C ADC device core
> *
> * This program is free software; you can redistribute it and/or modify
> * it under the terms of the GNU General Public License as published by
> @@ -72,10 +72,18 @@ static LIST_HEAD(adc_pending);
>
> #define adc_dbg(_adc, msg...) dev_dbg(&(_adc)->pdev->dev, msg)
>
> +#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | \
> + S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_AUTO_PST | \
> + S3C2410_ADCTSC_XY_PST(0))
> +
> static inline void s3c_adc_convert(struct adc_device *adc)
> {
> unsigned con = readl(adc->regs + S3C2410_ADCCON);
>
> + if (adc->cur->is_ts)
> + writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST,
> + adc->regs + S3C2410_ADCTSC);
> +
> con |= S3C2410_ADCCON_ENABLE_START;
> writel(con, adc->regs + S3C2410_ADCCON);
> }
> @@ -260,6 +268,9 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
> unsigned long flags;
> unsigned data0, data1;
>
> + /* Clear ADC interrupt */
> + __raw_writel(0x0, adc->regs + S3C6400_ADCCLRINT);
> +
s3c24xx has not ADCCLRINT register, so I suspect it'll break s3c24xx-
compatibility
> if (!client) {
> dev_warn(&adc->pdev->dev, "%s: no adc pending\n", __func__);
> return IRQ_HANDLED;
> @@ -412,7 +423,7 @@ static int s3c_adc_resume(struct platform_device *pdev)
>
> static struct platform_driver s3c_adc_driver = {
> .driver = {
> - .name = "s3c24xx-adc",
> + .name = "s3c-adc",
> .owner = THIS_MODULE,
> },
> .probe = s3c_adc_probe,
> diff --git a/arch/arm/plat-s3c/include/plat/regs-adc.h
> b/arch/arm/plat-s3c/include/plat/regs-adc.h
> index 4323ccc..cd7d2a5 100644
> --- a/arch/arm/plat-s3c/include/plat/regs-adc.h
> +++ b/arch/arm/plat-s3c/include/plat/regs-adc.h
> @@ -19,6 +19,9 @@
> #define S3C2410_ADCDLY S3C2410_ADCREG(0x08)
> #define S3C2410_ADCDAT0 S3C2410_ADCREG(0x0C)
> #define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10)
> +#define S3C6400_ADCUPDN S3C2410_ADCREG(0x14)
> +#define S3C6400_ADCCLRINT S3C2410_ADCREG(0x18)
> +#define S3C6400_ADCCLRIPD S3C2410_ADCREG(0x20)
>
>
> /* ADCCON Register Bits */
> diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig
> index 9c7aca4..c402ed9 100644
> --- a/arch/arm/plat-s3c24xx/Kconfig
> +++ b/arch/arm/plat-s3c24xx/Kconfig
> @@ -119,13 +119,6 @@ config S3C2410_DMA_DEBUG
> Enable debugging output for the DMA code. This option sends info
> to the kernel log, at priority KERN_DEBUG.
>
> -config S3C24XX_ADC
> - bool "ADC common driver support"
> - help
> - Core support for the ADC block found in the S3C24XX SoC systems
> - for drivers such as the touchscreen and hwmon to use to share
> - this resource.
> -
> # SPI default pin configuration code
>
> config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
> diff --git a/arch/arm/plat-s3c24xx/Makefile
> b/arch/arm/plat-s3c24xx/Makefile index 7780d2d..a2cb87b 100644
> --- a/arch/arm/plat-s3c24xx/Makefile
> +++ b/arch/arm/plat-s3c24xx/Makefile
> @@ -38,7 +38,6 @@ obj-$(CONFIG_PM) += irq-pm.o
> obj-$(CONFIG_PM) += sleep.o
> obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o
> obj-$(CONFIG_S3C2410_DMA) += dma.o
> -obj-$(CONFIG_S3C24XX_ADC) += adc.o
> obj-$(CONFIG_S3C2410_IOTIMING) += s3c2410-iotiming.o
> obj-$(CONFIG_S3C2412_IOTIMING) += s3c2412-iotiming.o
> obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += s3c2410-cpufreq-utils.o
> diff --git a/arch/arm/plat-s3c64xx/Makefile
> b/arch/arm/plat-s3c64xx/Makefile index b85b435..a8c5d17 100644
> --- a/arch/arm/plat-s3c64xx/Makefile
> +++ b/arch/arm/plat-s3c64xx/Makefile
> @@ -13,6 +13,7 @@ obj- :=
> # Core files
>
> obj-y += dev-uart.o
> +obj-y += dev-adc.o
> obj-y += cpu.o
> obj-y += irq.o
> obj-y += irq-eint.o
> diff --git a/arch/arm/plat-s3c64xx/dev-adc.c
> b/arch/arm/plat-s3c64xx/dev-adc.c new file mode 100644
> index 0000000..8cff72e
> --- /dev/null
> +++ b/arch/arm/plat-s3c64xx/dev-adc.c
> @@ -0,0 +1,42 @@
> +/* linux/arch/arm/plat-s3c64xx/dev-adc.c
> + *
> + * Copyright 2009 by Maurus Cuelenaere <mcuelenaere@gmail.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/string.h>
> +#include <linux/platform_device.h>
> +
> +#include <mach/irqs.h>
> +#include <mach/map.h>
> +
> +#include <plat/devs.h>
> +
> +static struct resource s3c_adc_resource[] = {
> + [0] = {
> + .start = S3C64XX_PA_ADC,
> + .end = S3C64XX_PA_ADC + SZ_1K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> + [1] = {
> + .start = IRQ_TC,
> + .end = IRQ_TC,
> + .flags = IORESOURCE_IRQ,
> + },
> + [2] = {
> + .start = IRQ_ADC,
> + .end = IRQ_ADC,
> + .flags = IORESOURCE_IRQ,
> + }
> +};
> +
> +struct platform_device s3c_device_adc = {
> + .name = "s3c-adc",
> + .id = -1,
> + .num_resources = ARRAY_SIZE(s3c_adc_resource),
> + .resource = s3c_adc_resource,
> +};
>
Regards
Vasily
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20091120/eae167dd/attachment-0001.sig>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 6/8] S3C: merge ADC drivers and add support for the S3C64xx
2009-11-20 12:16 ` Vasily Khoruzhick
@ 2009-11-20 14:34 ` Maurus Cuelenaere
2009-11-21 15:59 ` [PATCH 6/8 v2] " Maurus Cuelenaere
0 siblings, 1 reply; 6+ messages in thread
From: Maurus Cuelenaere @ 2009-11-20 14:34 UTC (permalink / raw)
To: linux-arm-kernel
Op 20-11-09 13:16, Vasily Khoruzhick schreef:
> ? ????????? ?? 20 ?????? 2009 14:04:10 ????? Maurus Cuelenaere ???????:
>
>> This moves the S3C24xx ADC driver to plat-s3c and adds support
>> for the S3C64xx.
>>
>> Signed-off-by: Maurus Cuelenaere<mcuelenaere@gmail.com>
>> ---
>> arch/arm/plat-s3c/Kconfig | 7 +++++
>> arch/arm/plat-s3c/Makefile | 4 +++
>> arch/arm/{plat-s3c24xx => plat-s3c}/adc.c | 17 +++++++++--
>> arch/arm/plat-s3c/include/plat/regs-adc.h | 3 ++
>> arch/arm/plat-s3c24xx/Kconfig | 7 -----
>> arch/arm/plat-s3c24xx/Makefile | 1 -
>> arch/arm/plat-s3c64xx/Makefile | 1 +
>> arch/arm/plat-s3c64xx/dev-adc.c | 42
>> +++++++++++++++++++++++++++++ 8 files changed, 71 insertions(+), 11
>> deletions(-)
>> rename arch/arm/{plat-s3c24xx => plat-s3c}/adc.c (95%)
>> create mode 100644 arch/arm/plat-s3c64xx/dev-adc.c
>>
>> diff --git a/arch/arm/plat-s3c/Kconfig b/arch/arm/plat-s3c/Kconfig
>> index 57e685b..4184084 100644
>> --- a/arch/arm/plat-s3c/Kconfig
>> +++ b/arch/arm/plat-s3c/Kconfig
>> @@ -159,6 +159,13 @@ config S3C_GPIO_CFG_S3C64XX
>> Internal configuration to enable S3C64XX style GPIO configuration
>> functions.
>>
>> +config S3C_ADC
>> + bool "ADC common driver support"
>> + help
>> + Core support for the ADC block found in the S3C SoC systems
>> + for drivers such as the touchscreen and hwmon to use to share
>> + this resource.
>> +
>> # DMA
>>
>> config S3C_DMA
>> diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile
>> index 50444da..960fb43 100644
>> --- a/arch/arm/plat-s3c/Makefile
>> +++ b/arch/arm/plat-s3c/Makefile
>> @@ -32,6 +32,10 @@ obj-$(CONFIG_S3C2410_PM_CHECK) += pm-check.o
>>
>> obj-$(CONFIG_HAVE_PWM) += pwm.o
>>
>> +# ADC support
>> +
>> +obj-$(CONFIG_S3C_ADC) += adc.o
>> +
>> # devices
>>
>> obj-$(CONFIG_S3C_DEV_HSMMC) += dev-hsmmc.o
>> diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c/adc.c
>> similarity index 95%
>> rename from arch/arm/plat-s3c24xx/adc.c
>> rename to arch/arm/plat-s3c/adc.c
>> index df47322..572b7be 100644
>> --- a/arch/arm/plat-s3c24xx/adc.c
>> +++ b/arch/arm/plat-s3c/adc.c
>> @@ -1,10 +1,10 @@
>> -/* arch/arm/plat-s3c24xx/adc.c
>> +/* arch/arm/plat-s3c/adc.c
>> *
>> * Copyright (c) 2008 Simtec Electronics
>> * http://armlinux.simtec.co.uk/
>> * Ben Dooks<ben@simtec.co.uk>,<ben-linux@fluff.org>
>> *
>> - * S3C24XX ADC device core
>> + * S3C ADC device core
>> *
>> * This program is free software; you can redistribute it and/or modify
>> * it under the terms of the GNU General Public License as published by
>> @@ -72,10 +72,18 @@ static LIST_HEAD(adc_pending);
>>
>> #define adc_dbg(_adc, msg...) dev_dbg(&(_adc)->pdev->dev, msg)
>>
>> +#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | \
>> + S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_AUTO_PST | \
>> + S3C2410_ADCTSC_XY_PST(0))
>> +
>> static inline void s3c_adc_convert(struct adc_device *adc)
>> {
>> unsigned con = readl(adc->regs + S3C2410_ADCCON);
>>
>> + if (adc->cur->is_ts)
>> + writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST,
>> + adc->regs + S3C2410_ADCTSC);
>> +
>> con |= S3C2410_ADCCON_ENABLE_START;
>> writel(con, adc->regs + S3C2410_ADCCON);
>> }
>> @@ -260,6 +268,9 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
>> unsigned long flags;
>> unsigned data0, data1;
>>
>> + /* Clear ADC interrupt */
>> + __raw_writel(0x0, adc->regs + S3C6400_ADCCLRINT);
>> +
>>
> s3c24xx has not ADCCLRINT register, so I suspect it'll break s3c24xx-
> compatibility
Hmm right, that doesn't seem right; this should in an if(adc->type ==
S3C64XX) check..
Also that if(adc->cur->is_ts) change above seems unrelated, let me
resend this patch.
Regards,
Maurus Cuelenaere
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 6/8 v2] S3C: merge ADC drivers and add support for the S3C64xx
2009-11-20 14:34 ` Maurus Cuelenaere
@ 2009-11-21 15:59 ` Maurus Cuelenaere
2009-11-23 0:09 ` Ben Dooks
0 siblings, 1 reply; 6+ messages in thread
From: Maurus Cuelenaere @ 2009-11-21 15:59 UTC (permalink / raw)
To: linux-arm-kernel
This moves the S3C24xx ADC driver to plat-s3c and adds support
for the S3C64xx.
Signed-off-by: Maurus Cuelenaere <mcuelenaere@gmail.com>
---
arch/arm/mach-s3c6400/include/mach/map.h | 1 +
arch/arm/plat-s3c/Kconfig | 9 +++++
arch/arm/plat-s3c/Makefile | 4 ++
arch/arm/{plat-s3c24xx => plat-s3c}/adc.c | 21 +++++++++--
arch/arm/plat-s3c/include/plat/adc.h | 6 +++-
arch/arm/plat-s3c/include/plat/regs-adc.h | 2 +
arch/arm/plat-s3c24xx/Kconfig | 7 ----
arch/arm/plat-s3c24xx/Makefile | 1 -
arch/arm/plat-s3c24xx/devs.c | 14 ++++++--
arch/arm/plat-s3c64xx/Makefile | 4 ++
arch/arm/plat-s3c64xx/dev-adc.c | 51 +++++++++++++++++++++++++++++
11 files changed, 103 insertions(+), 17 deletions(-)
rename arch/arm/{plat-s3c24xx => plat-s3c}/adc.c (96%)
create mode 100644 arch/arm/plat-s3c64xx/dev-adc.c
diff --git a/arch/arm/mach-s3c6400/include/mach/map.h
b/arch/arm/mach-s3c6400/include/mach/map.h
index fc8b223..b66bfaf 100644
--- a/arch/arm/mach-s3c6400/include/mach/map.h
+++ b/arch/arm/mach-s3c6400/include/mach/map.h
@@ -42,6 +42,7 @@
#define S3C64XX_PA_FB (0x77100000)
#define S3C64XX_PA_USB_HSOTG (0x7C000000)
#define S3C64XX_PA_WATCHDOG (0x7E004000)
+#define S3C64XX_PA_ADC (0x7E00B000)
#define S3C64XX_PA_SYSCON (0x7E00F000)
#define S3C64XX_PA_AC97 (0x7F001000)
#define S3C64XX_PA_IIS0 (0x7F002000)
diff --git a/arch/arm/plat-s3c/Kconfig b/arch/arm/plat-s3c/Kconfig
index 8931c5f..82ed66d 100644
--- a/arch/arm/plat-s3c/Kconfig
+++ b/arch/arm/plat-s3c/Kconfig
@@ -166,6 +166,15 @@ config S3C_DMA
help
Internal configuration for S3C DMA core
+# ADC
+
+config S3C_ADC
+ bool "ADC common driver support"
+ help
+ Core support for the ADC block found in the S3C SoC systems
+ for drivers such as the touchscreen and hwmon to use to share
+ this resource.
+
# device definitions to compile in
config S3C_DEV_HSMMC
diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile
index 3c09109..788056a 100644
--- a/arch/arm/plat-s3c/Makefile
+++ b/arch/arm/plat-s3c/Makefile
@@ -22,6 +22,10 @@ obj-y += gpio-config.o
obj-$(CONFIG_S3C_DMA) += dma.o
+# ADC support
+
+obj-$(CONFIG_S3C_ADC) += adc.o
+
# PM support
obj-$(CONFIG_PM) += pm.o
diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c/adc.c
similarity index 96%
rename from arch/arm/plat-s3c24xx/adc.c
rename to arch/arm/plat-s3c/adc.c
index df47322..76cb740 100644
--- a/arch/arm/plat-s3c24xx/adc.c
+++ b/arch/arm/plat-s3c/adc.c
@@ -1,10 +1,10 @@
-/* arch/arm/plat-s3c24xx/adc.c
+/* arch/arm/plat-s3c/adc.c
*
* Copyright (c) 2008 Simtec Electronics
* http://armlinux.simtec.co.uk/
* Ben Dooks <ben@simtec.co.uk>, <ben-linux@fluff.org>
*
- * S3C24XX ADC device core
+ * S3C ADC device core
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -64,6 +64,7 @@ struct adc_device {
unsigned int prescale;
int irq;
+ struct s3c_adc_platdata* pd;
};
static struct adc_device *adc_dev;
@@ -262,7 +263,7 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
if (!client) {
dev_warn(&adc->pdev->dev, "%s: no adc pending\n", __func__);
- return IRQ_HANDLED;
+ goto exit;
}
data0 = readl(adc->regs + S3C2410_ADCDAT0);
@@ -289,16 +290,27 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
local_irq_restore(flags);
}
+exit:
+ if(adc->pd->adc_type == 1)
+ writel(0, adc->regs + S3C6410_ADCCLRI);
+
return IRQ_HANDLED;
}
static int s3c_adc_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
+ struct s3c_adc_platdata *pd;
struct adc_device *adc;
struct resource *regs;
int ret;
+ pd = pdev->dev.platform_data;
+ if (!pd) {
+ dev_err(dev, "no platform data specified\n");
+ return -EINVAL;
+ }
+
adc = kzalloc(sizeof(struct adc_device), GFP_KERNEL);
if (adc == NULL) {
dev_err(dev, "failed to allocate adc_device\n");
@@ -306,6 +318,7 @@ static int s3c_adc_probe(struct platform_device *pdev)
}
adc->pdev = pdev;
+ adc->pd = pd;
adc->prescale = S3C2410_ADCCON_PRSCVL(49);
adc->irq = platform_get_irq(pdev, 1);
@@ -412,7 +425,7 @@ static int s3c_adc_resume(struct platform_device *pdev)
static struct platform_driver s3c_adc_driver = {
.driver = {
- .name = "s3c24xx-adc",
+ .name = "s3c-adc",
.owner = THIS_MODULE,
},
.probe = s3c_adc_probe,
diff --git a/arch/arm/plat-s3c/include/plat/adc.h
b/arch/arm/plat-s3c/include/plat/adc.h
index 5f3b1cd..a8c9f27 100644
--- a/arch/arm/plat-s3c/include/plat/adc.h
+++ b/arch/arm/plat-s3c/include/plat/adc.h
@@ -4,7 +4,7 @@
* http://armlinux.simnte.co.uk/
* Ben Dooks <ben@simtec.co.uk>
*
- * S3C24XX ADC driver information
+ * S3C ADC driver information
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
@@ -14,6 +14,10 @@
#ifndef __ASM_PLAT_ADC_H
#define __ASM_PLAT_ADC_H __FILE__
+struct s3c_adc_platdata {
+ int adc_type;
+};
+
struct s3c_adc_client;
extern int s3c_adc_start(struct s3c_adc_client *client,
diff --git a/arch/arm/plat-s3c/include/plat/regs-adc.h
b/arch/arm/plat-s3c/include/plat/regs-adc.h
index 4323ccc..933ba79 100644
--- a/arch/arm/plat-s3c/include/plat/regs-adc.h
+++ b/arch/arm/plat-s3c/include/plat/regs-adc.h
@@ -19,6 +19,8 @@
#define S3C2410_ADCDLY S3C2410_ADCREG(0x08)
#define S3C2410_ADCDAT0 S3C2410_ADCREG(0x0C)
#define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10)
+#define S3C6410_ADCCLRI S3C2410_ADCREG(0x18)
+#define S3C6410_ADCCIDU S3C2410_ADCREG(0x20)
/* ADCCON Register Bits */
diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig
index 9c7aca4..c402ed9 100644
--- a/arch/arm/plat-s3c24xx/Kconfig
+++ b/arch/arm/plat-s3c24xx/Kconfig
@@ -119,13 +119,6 @@ config S3C2410_DMA_DEBUG
Enable debugging output for the DMA code. This option sends info
to the kernel log, at priority KERN_DEBUG.
-config S3C24XX_ADC
- bool "ADC common driver support"
- help
- Core support for the ADC block found in the S3C24XX SoC systems
- for drivers such as the touchscreen and hwmon to use to share
- this resource.
-
# SPI default pin configuration code
config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile
index 7780d2d..a2cb87b 100644
--- a/arch/arm/plat-s3c24xx/Makefile
+++ b/arch/arm/plat-s3c24xx/Makefile
@@ -38,7 +38,6 @@ obj-$(CONFIG_PM) += irq-pm.o
obj-$(CONFIG_PM) += sleep.o
obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o
obj-$(CONFIG_S3C2410_DMA) += dma.o
-obj-$(CONFIG_S3C24XX_ADC) += adc.o
obj-$(CONFIG_S3C2410_IOTIMING) += s3c2410-iotiming.o
obj-$(CONFIG_S3C2412_IOTIMING) += s3c2412-iotiming.o
obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += s3c2410-cpufreq-utils.o
diff --git a/arch/arm/plat-s3c24xx/devs.c b/arch/arm/plat-s3c24xx/devs.c
index f52a92c..1b131e3 100644
--- a/arch/arm/plat-s3c24xx/devs.c
+++ b/arch/arm/plat-s3c24xx/devs.c
@@ -33,6 +33,7 @@
#include <plat/regs-serial.h>
#include <plat/udc.h>
+#include <plat/adc.h>
#include <plat/devs.h>
#include <plat/cpu.h>
#include <plat/regs-spi.h>
@@ -321,11 +322,16 @@ static struct resource s3c_adc_resource[] = {
};
+static struct s3c_adc_platdata s3c_adc_pdata = {
+ .adc_type = 0,
+};
+
struct platform_device s3c_device_adc = {
- .name = "s3c24xx-adc",
- .id = -1,
- .num_resources = ARRAY_SIZE(s3c_adc_resource),
- .resource = s3c_adc_resource,
+ .name = "s3c-adc",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s3c_adc_resource),
+ .resource = s3c_adc_resource,
+ .dev.platform_data = &s3c_adc_pdata,
};
/* HWMON */
diff --git a/arch/arm/plat-s3c64xx/Makefile b/arch/arm/plat-s3c64xx/Makefile
index b85b435..8060017 100644
--- a/arch/arm/plat-s3c64xx/Makefile
+++ b/arch/arm/plat-s3c64xx/Makefile
@@ -35,6 +35,10 @@ obj-$(CONFIG_PM) += irq-pm.o
obj-$(CONFIG_S3C64XX_DMA) += dma.o
+# ADC support
+
+obj-$(CONFIG_S3C_ADC) += dev-adc.o
+
# Device setup
obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o
diff --git a/arch/arm/plat-s3c64xx/dev-adc.c b/arch/arm/plat-s3c64xx/dev-adc.c
new file mode 100644
index 0000000..5861ab3
--- /dev/null
+++ b/arch/arm/plat-s3c64xx/dev-adc.c
@@ -0,0 +1,51 @@
+/* linux/arch/arm/plat-s3c64xx/dev-adc.c
+ *
+ * Copyright 2009 Maurus Cuelenaere
+ *
+ * S3C64xx series device definition for ADC device
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/platform_device.h>
+
+#include <mach/irqs.h>
+#include <mach/map.h>
+
+#include <plat/adc.h>
+#include <plat/devs.h>
+#include <plat/cpu.h>
+
+static struct resource s3c_adc_resource[] = {
+ [0] = {
+ .start = S3C64XX_PA_ADC,
+ .end = S3C64XX_PA_ADC + SZ_256 - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .start = IRQ_TC,
+ .end = IRQ_TC,
+ .flags = IORESOURCE_IRQ,
+ },
+ [2] = {
+ .start = IRQ_ADC,
+ .end = IRQ_ADC,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct s3c_adc_platdata s3c_adc_pdata = {
+ .adc_type = 1,
+};
+
+struct platform_device s3c_device_adc = {
+ .name = "s3c-adc",
+ .id = -1,
+ .num_resources = ARRAY_SIZE(s3c_adc_resource),
+ .resource = s3c_adc_resource,
+ .dev.platform_data = &s3c_adc_pdata,
+};
--
1.6.5.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 6/8 v2] S3C: merge ADC drivers and add support for the S3C64xx
2009-11-21 15:59 ` [PATCH 6/8 v2] " Maurus Cuelenaere
@ 2009-11-23 0:09 ` Ben Dooks
2009-11-23 13:44 ` Maurus Cuelenaere
0 siblings, 1 reply; 6+ messages in thread
From: Ben Dooks @ 2009-11-23 0:09 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Nov 21, 2009 at 04:59:21PM +0100, Maurus Cuelenaere wrote:
> This moves the S3C24xx ADC driver to plat-s3c and adds support
> for the S3C64xx.
it would have been nicer to have the move then the addition in a
seperate patch.
secondly, I'm probably going to hold off on these changes pending actually
trying to get some time together to fix up plat-samsung where these
files probably should end up being moved to.
> Signed-off-by: Maurus Cuelenaere <mcuelenaere@gmail.com>
>
> ---
> arch/arm/mach-s3c6400/include/mach/map.h | 1 +
> arch/arm/plat-s3c/Kconfig | 9 +++++
> arch/arm/plat-s3c/Makefile | 4 ++
> arch/arm/{plat-s3c24xx => plat-s3c}/adc.c | 21 +++++++++--
> arch/arm/plat-s3c/include/plat/adc.h | 6 +++-
> arch/arm/plat-s3c/include/plat/regs-adc.h | 2 +
> arch/arm/plat-s3c24xx/Kconfig | 7 ----
> arch/arm/plat-s3c24xx/Makefile | 1 -
> arch/arm/plat-s3c24xx/devs.c | 14 ++++++--
> arch/arm/plat-s3c64xx/Makefile | 4 ++
> arch/arm/plat-s3c64xx/dev-adc.c | 51 +++++++++++++++++++++++++++++
> 11 files changed, 103 insertions(+), 17 deletions(-)
> rename arch/arm/{plat-s3c24xx => plat-s3c}/adc.c (96%)
> create mode 100644 arch/arm/plat-s3c64xx/dev-adc.c
>
> diff --git a/arch/arm/mach-s3c6400/include/mach/map.h
> b/arch/arm/mach-s3c6400/include/mach/map.h
> index fc8b223..b66bfaf 100644
> --- a/arch/arm/mach-s3c6400/include/mach/map.h
> +++ b/arch/arm/mach-s3c6400/include/mach/map.h
> @@ -42,6 +42,7 @@
> #define S3C64XX_PA_FB (0x77100000)
> #define S3C64XX_PA_USB_HSOTG (0x7C000000)
> #define S3C64XX_PA_WATCHDOG (0x7E004000)
> +#define S3C64XX_PA_ADC (0x7E00B000)
> #define S3C64XX_PA_SYSCON (0x7E00F000)
> #define S3C64XX_PA_AC97 (0x7F001000)
> #define S3C64XX_PA_IIS0 (0x7F002000)
> diff --git a/arch/arm/plat-s3c/Kconfig b/arch/arm/plat-s3c/Kconfig
> index 8931c5f..82ed66d 100644
> --- a/arch/arm/plat-s3c/Kconfig
> +++ b/arch/arm/plat-s3c/Kconfig
> @@ -166,6 +166,15 @@ config S3C_DMA
> help
> Internal configuration for S3C DMA core
>
> +# ADC
> +
> +config S3C_ADC
> + bool "ADC common driver support"
> + help
> + Core support for the ADC block found in the S3C SoC systems
> + for drivers such as the touchscreen and hwmon to use to share
> + this resource.
> +
> # device definitions to compile in
>
> config S3C_DEV_HSMMC
> diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile
> index 3c09109..788056a 100644
> --- a/arch/arm/plat-s3c/Makefile
> +++ b/arch/arm/plat-s3c/Makefile
> @@ -22,6 +22,10 @@ obj-y += gpio-config.o
>
> obj-$(CONFIG_S3C_DMA) += dma.o
>
> +# ADC support
> +
> +obj-$(CONFIG_S3C_ADC) += adc.o
> +
> # PM support
>
> obj-$(CONFIG_PM) += pm.o
> diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c/adc.c
> similarity index 96%
> rename from arch/arm/plat-s3c24xx/adc.c
> rename to arch/arm/plat-s3c/adc.c
> index df47322..76cb740 100644
> --- a/arch/arm/plat-s3c24xx/adc.c
> +++ b/arch/arm/plat-s3c/adc.c
> @@ -1,10 +1,10 @@
> -/* arch/arm/plat-s3c24xx/adc.c
> +/* arch/arm/plat-s3c/adc.c
> *
> * Copyright (c) 2008 Simtec Electronics
> * http://armlinux.simtec.co.uk/
> * Ben Dooks <ben@simtec.co.uk>, <ben-linux@fluff.org>
> *
> - * S3C24XX ADC device core
> + * S3C ADC device core
> *
> * This program is free software; you can redistribute it and/or modify
> * it under the terms of the GNU General Public License as published by
> @@ -64,6 +64,7 @@ struct adc_device {
> unsigned int prescale;
>
> int irq;
> + struct s3c_adc_platdata* pd;
> };
>
> static struct adc_device *adc_dev;
> @@ -262,7 +263,7 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
>
> if (!client) {
> dev_warn(&adc->pdev->dev, "%s: no adc pending\n", __func__);
> - return IRQ_HANDLED;
> + goto exit;
> }
>
> data0 = readl(adc->regs + S3C2410_ADCDAT0);
> @@ -289,16 +290,27 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
> local_irq_restore(flags);
> }
>
> +exit:
> + if(adc->pd->adc_type == 1)
> + writel(0, adc->regs + S3C6410_ADCCLRI);
> +
formattign error, if (...
return IRQ_HANDLED;
> }
>
> static int s3c_adc_probe(struct platform_device *pdev)
> {
> struct device *dev = &pdev->dev;
> + struct s3c_adc_platdata *pd;
> struct adc_device *adc;
> struct resource *regs;
> int ret;
>
> + pd = pdev->dev.platform_data;
> + if (!pd) {
> + dev_err(dev, "no platform data specified\n");
> + return -EINVAL;
> + }
> +
> adc = kzalloc(sizeof(struct adc_device), GFP_KERNEL);
> if (adc == NULL) {
> dev_err(dev, "failed to allocate adc_device\n");
> @@ -306,6 +318,7 @@ static int s3c_adc_probe(struct platform_device *pdev)
> }
>
> adc->pdev = pdev;
> + adc->pd = pd;
> adc->prescale = S3C2410_ADCCON_PRSCVL(49);
>
> adc->irq = platform_get_irq(pdev, 1);
> @@ -412,7 +425,7 @@ static int s3c_adc_resume(struct platform_device *pdev)
>
> static struct platform_driver s3c_adc_driver = {
> .driver = {
> - .name = "s3c24xx-adc",
> + .name = "s3c-adc",
> .owner = THIS_MODULE,
> },
> .probe = s3c_adc_probe,
> diff --git a/arch/arm/plat-s3c/include/plat/adc.h
> b/arch/arm/plat-s3c/include/plat/adc.h
> index 5f3b1cd..a8c9f27 100644
> --- a/arch/arm/plat-s3c/include/plat/adc.h
> +++ b/arch/arm/plat-s3c/include/plat/adc.h
> @@ -4,7 +4,7 @@
> * http://armlinux.simnte.co.uk/
> * Ben Dooks <ben@simtec.co.uk>
> *
> - * S3C24XX ADC driver information
> + * S3C ADC driver information
> *
> * This program is free software; you can redistribute it and/or modify
> * it under the terms of the GNU General Public License version 2 as
> @@ -14,6 +14,10 @@
> #ifndef __ASM_PLAT_ADC_H
> #define __ASM_PLAT_ADC_H __FILE__
>
> +struct s3c_adc_platdata {
> + int adc_type;
> +};
> +
change the device name for the newer devices and use that as the key.
> struct s3c_adc_client;
>
> extern int s3c_adc_start(struct s3c_adc_client *client,
> diff --git a/arch/arm/plat-s3c/include/plat/regs-adc.h
> b/arch/arm/plat-s3c/include/plat/regs-adc.h
> index 4323ccc..933ba79 100644
> --- a/arch/arm/plat-s3c/include/plat/regs-adc.h
> +++ b/arch/arm/plat-s3c/include/plat/regs-adc.h
> @@ -19,6 +19,8 @@
> #define S3C2410_ADCDLY S3C2410_ADCREG(0x08)
> #define S3C2410_ADCDAT0 S3C2410_ADCREG(0x0C)
> #define S3C2410_ADCDAT1 S3C2410_ADCREG(0x10)
> +#define S3C6410_ADCCLRI S3C2410_ADCREG(0x18)
> +#define S3C6410_ADCCIDU S3C2410_ADCREG(0x20)
>
>
> /* ADCCON Register Bits */
> diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig
> index 9c7aca4..c402ed9 100644
> --- a/arch/arm/plat-s3c24xx/Kconfig
> +++ b/arch/arm/plat-s3c24xx/Kconfig
> @@ -119,13 +119,6 @@ config S3C2410_DMA_DEBUG
> Enable debugging output for the DMA code. This option sends info
> to the kernel log, at priority KERN_DEBUG.
>
> -config S3C24XX_ADC
> - bool "ADC common driver support"
> - help
> - Core support for the ADC block found in the S3C24XX SoC systems
> - for drivers such as the touchscreen and hwmon to use to share
> - this resource.
> -
> # SPI default pin configuration code
>
> config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
> diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile
> index 7780d2d..a2cb87b 100644
> --- a/arch/arm/plat-s3c24xx/Makefile
> +++ b/arch/arm/plat-s3c24xx/Makefile
> @@ -38,7 +38,6 @@ obj-$(CONFIG_PM) += irq-pm.o
> obj-$(CONFIG_PM) += sleep.o
> obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o
> obj-$(CONFIG_S3C2410_DMA) += dma.o
> -obj-$(CONFIG_S3C24XX_ADC) += adc.o
> obj-$(CONFIG_S3C2410_IOTIMING) += s3c2410-iotiming.o
> obj-$(CONFIG_S3C2412_IOTIMING) += s3c2412-iotiming.o
> obj-$(CONFIG_S3C2410_CPUFREQ_UTILS) += s3c2410-cpufreq-utils.o
> diff --git a/arch/arm/plat-s3c24xx/devs.c b/arch/arm/plat-s3c24xx/devs.c
> index f52a92c..1b131e3 100644
> --- a/arch/arm/plat-s3c24xx/devs.c
> +++ b/arch/arm/plat-s3c24xx/devs.c
> @@ -33,6 +33,7 @@
> #include <plat/regs-serial.h>
> #include <plat/udc.h>
>
> +#include <plat/adc.h>
> #include <plat/devs.h>
> #include <plat/cpu.h>
> #include <plat/regs-spi.h>
> @@ -321,11 +322,16 @@ static struct resource s3c_adc_resource[] = {
>
> };
>
> +static struct s3c_adc_platdata s3c_adc_pdata = {
> + .adc_type = 0,
> +};
> +
> struct platform_device s3c_device_adc = {
> - .name = "s3c24xx-adc",
> - .id = -1,
> - .num_resources = ARRAY_SIZE(s3c_adc_resource),
> - .resource = s3c_adc_resource,
> + .name = "s3c-adc",
> + .id = -1,
> + .num_resources = ARRAY_SIZE(s3c_adc_resource),
> + .resource = s3c_adc_resource,
> + .dev.platform_data = &s3c_adc_pdata,
> };
>
> /* HWMON */
> diff --git a/arch/arm/plat-s3c64xx/Makefile b/arch/arm/plat-s3c64xx/Makefile
> index b85b435..8060017 100644
> --- a/arch/arm/plat-s3c64xx/Makefile
> +++ b/arch/arm/plat-s3c64xx/Makefile
> @@ -35,6 +35,10 @@ obj-$(CONFIG_PM) += irq-pm.o
>
> obj-$(CONFIG_S3C64XX_DMA) += dma.o
>
> +# ADC support
> +
> +obj-$(CONFIG_S3C_ADC) += dev-adc.o
> +
> # Device setup
>
> obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o
> diff --git a/arch/arm/plat-s3c64xx/dev-adc.c b/arch/arm/plat-s3c64xx/dev-adc.c
> new file mode 100644
> index 0000000..5861ab3
> --- /dev/null
> +++ b/arch/arm/plat-s3c64xx/dev-adc.c
> @@ -0,0 +1,51 @@
> +/* linux/arch/arm/plat-s3c64xx/dev-adc.c
> + *
> + * Copyright 2009 Maurus Cuelenaere
> + *
> + * S3C64xx series device definition for ADC device
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> +*/
> +
> +#include <linux/kernel.h>
> +#include <linux/string.h>
> +#include <linux/platform_device.h>
> +
> +#include <mach/irqs.h>
> +#include <mach/map.h>
> +
> +#include <plat/adc.h>
> +#include <plat/devs.h>
> +#include <plat/cpu.h>
> +
> +static struct resource s3c_adc_resource[] = {
> + [0] = {
> + .start = S3C64XX_PA_ADC,
> + .end = S3C64XX_PA_ADC + SZ_256 - 1,
> + .flags = IORESOURCE_MEM,
> + },
> + [1] = {
> + .start = IRQ_TC,
> + .end = IRQ_TC,
> + .flags = IORESOURCE_IRQ,
> + },
> + [2] = {
> + .start = IRQ_ADC,
> + .end = IRQ_ADC,
> + .flags = IORESOURCE_IRQ,
> + },
> +};
> +
> +static struct s3c_adc_platdata s3c_adc_pdata = {
> + .adc_type = 1,
> +};
> +
> +struct platform_device s3c_device_adc = {
> + .name = "s3c-adc",
> + .id = -1,
> + .num_resources = ARRAY_SIZE(s3c_adc_resource),
> + .resource = s3c_adc_resource,
> + .dev.platform_data = &s3c_adc_pdata,
> +};
> --
> 1.6.5.3
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
--
--
Ben
Q: What's a light-year?
A: One-third less calories than a regular year.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 6/8 v2] S3C: merge ADC drivers and add support for the S3C64xx
2009-11-23 0:09 ` Ben Dooks
@ 2009-11-23 13:44 ` Maurus Cuelenaere
0 siblings, 0 replies; 6+ messages in thread
From: Maurus Cuelenaere @ 2009-11-23 13:44 UTC (permalink / raw)
To: linux-arm-kernel
Op 23-11-09 01:09, Ben Dooks schreef:
> On Sat, Nov 21, 2009 at 04:59:21PM +0100, Maurus Cuelenaere wrote:
>
>> This moves the S3C24xx ADC driver to plat-s3c and adds support
>> for the S3C64xx.
>>
> it would have been nicer to have the move then the addition in a
> seperate patch.
>
Ok, patch can be splitted.
> secondly, I'm probably going to hold off on these changes pending actually
> trying to get some time together to fix up plat-samsung where these
> files probably should end up being moved to.
>
Hmm, then I'll probably wait with posting a reworked version of this
till plat-samsung gets in.
>
>> Signed-off-by: Maurus Cuelenaere<mcuelenaere@gmail.com>
>>
>> ---
>> arch/arm/mach-s3c6400/include/mach/map.h | 1 +
>> arch/arm/plat-s3c/Kconfig | 9 +++++
>> arch/arm/plat-s3c/Makefile | 4 ++
>> arch/arm/{plat-s3c24xx => plat-s3c}/adc.c | 21 +++++++++--
>> arch/arm/plat-s3c/include/plat/adc.h | 6 +++-
>> arch/arm/plat-s3c/include/plat/regs-adc.h | 2 +
>> arch/arm/plat-s3c24xx/Kconfig | 7 ----
>> arch/arm/plat-s3c24xx/Makefile | 1 -
>> arch/arm/plat-s3c24xx/devs.c | 14 ++++++--
>> arch/arm/plat-s3c64xx/Makefile | 4 ++
>> arch/arm/plat-s3c64xx/dev-adc.c | 51 +++++++++++++++++++++++++++++
>> 11 files changed, 103 insertions(+), 17 deletions(-)
>> rename arch/arm/{plat-s3c24xx => plat-s3c}/adc.c (96%)
>> create mode 100644 arch/arm/plat-s3c64xx/dev-adc.c
>>
>> diff --git a/arch/arm/mach-s3c6400/include/mach/map.h
>> b/arch/arm/mach-s3c6400/include/mach/map.h
>> index fc8b223..b66bfaf 100644
>> --- a/arch/arm/mach-s3c6400/include/mach/map.h
>> +++ b/arch/arm/mach-s3c6400/include/mach/map.h
>> @@ -42,6 +42,7 @@
>> #define S3C64XX_PA_FB (0x77100000)
>> #define S3C64XX_PA_USB_HSOTG (0x7C000000)
>> #define S3C64XX_PA_WATCHDOG (0x7E004000)
>> +#define S3C64XX_PA_ADC (0x7E00B000)
>> #define S3C64XX_PA_SYSCON (0x7E00F000)
>> #define S3C64XX_PA_AC97 (0x7F001000)
>> #define S3C64XX_PA_IIS0 (0x7F002000)
>> diff --git a/arch/arm/plat-s3c/Kconfig b/arch/arm/plat-s3c/Kconfig
>> index 8931c5f..82ed66d 100644
>> --- a/arch/arm/plat-s3c/Kconfig
>> +++ b/arch/arm/plat-s3c/Kconfig
>> @@ -166,6 +166,15 @@ config S3C_DMA
>> help
>> Internal configuration for S3C DMA core
>>
>> +# ADC
>> +
>> +config S3C_ADC
>> + bool "ADC common driver support"
>> + help
>> + Core support for the ADC block found in the S3C SoC systems
>> + for drivers such as the touchscreen and hwmon to use to share
>> + this resource.
>> +
>> # device definitions to compile in
>>
>> config S3C_DEV_HSMMC
>> diff --git a/arch/arm/plat-s3c/Makefile b/arch/arm/plat-s3c/Makefile
>> index 3c09109..788056a 100644
>> --- a/arch/arm/plat-s3c/Makefile
>> +++ b/arch/arm/plat-s3c/Makefile
>> @@ -22,6 +22,10 @@ obj-y += gpio-config.o
>>
>> obj-$(CONFIG_S3C_DMA) += dma.o
>>
>> +# ADC support
>> +
>> +obj-$(CONFIG_S3C_ADC) += adc.o
>> +
>> # PM support
>>
>> obj-$(CONFIG_PM) += pm.o
>> diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c/adc.c
>> similarity index 96%
>> rename from arch/arm/plat-s3c24xx/adc.c
>> rename to arch/arm/plat-s3c/adc.c
>> index df47322..76cb740 100644
>> --- a/arch/arm/plat-s3c24xx/adc.c
>> +++ b/arch/arm/plat-s3c/adc.c
>> @@ -1,10 +1,10 @@
>> -/* arch/arm/plat-s3c24xx/adc.c
>> +/* arch/arm/plat-s3c/adc.c
>> *
>> * Copyright (c) 2008 Simtec Electronics
>> * http://armlinux.simtec.co.uk/
>> * Ben Dooks<ben@simtec.co.uk>,<ben-linux@fluff.org>
>> *
>> - * S3C24XX ADC device core
>> + * S3C ADC device core
>> *
>> * This program is free software; you can redistribute it and/or modify
>> * it under the terms of the GNU General Public License as published by
>> @@ -64,6 +64,7 @@ struct adc_device {
>> unsigned int prescale;
>>
>> int irq;
>> + struct s3c_adc_platdata* pd;
>> };
>>
>> static struct adc_device *adc_dev;
>> @@ -262,7 +263,7 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
>>
>> if (!client) {
>> dev_warn(&adc->pdev->dev, "%s: no adc pending\n", __func__);
>> - return IRQ_HANDLED;
>> + goto exit;
>> }
>>
>> data0 = readl(adc->regs + S3C2410_ADCDAT0);
>> @@ -289,16 +290,27 @@ static irqreturn_t s3c_adc_irq(int irq, void *pw)
>> local_irq_restore(flags);
>> }
>>
>> +exit:
>> + if(adc->pd->adc_type == 1)
>> + writel(0, adc->regs + S3C6410_ADCCLRI);
>> +
>>
> formattign error, if (...
>
Will fix.
> return IRQ_HANDLED;
>
>> }
>>
>> static int s3c_adc_probe(struct platform_device *pdev)
>> {
>> struct device *dev =&pdev->dev;
>> + struct s3c_adc_platdata *pd;
>> struct adc_device *adc;
>> struct resource *regs;
>> int ret;
>>
>> + pd = pdev->dev.platform_data;
>> + if (!pd) {
>> + dev_err(dev, "no platform data specified\n");
>> + return -EINVAL;
>> + }
>> +
>> adc = kzalloc(sizeof(struct adc_device), GFP_KERNEL);
>> if (adc == NULL) {
>> dev_err(dev, "failed to allocate adc_device\n");
>> @@ -306,6 +318,7 @@ static int s3c_adc_probe(struct platform_device *pdev)
>> }
>>
>> adc->pdev = pdev;
>> + adc->pd = pd;
>> adc->prescale = S3C2410_ADCCON_PRSCVL(49);
>>
>> adc->irq = platform_get_irq(pdev, 1);
>> @@ -412,7 +425,7 @@ static int s3c_adc_resume(struct platform_device *pdev)
>>
>> static struct platform_driver s3c_adc_driver = {
>> .driver = {
>> - .name = "s3c24xx-adc",
>> + .name = "s3c-adc",
>> .owner = THIS_MODULE,
>> },
>> .probe = s3c_adc_probe,
>> diff --git a/arch/arm/plat-s3c/include/plat/adc.h
>> b/arch/arm/plat-s3c/include/plat/adc.h
>> index 5f3b1cd..a8c9f27 100644
>> --- a/arch/arm/plat-s3c/include/plat/adc.h
>> +++ b/arch/arm/plat-s3c/include/plat/adc.h
>> @@ -4,7 +4,7 @@
>> * http://armlinux.simnte.co.uk/
>> * Ben Dooks<ben@simtec.co.uk>
>> *
>> - * S3C24XX ADC driver information
>> + * S3C ADC driver information
>> *
>> * This program is free software; you can redistribute it and/or modify
>> * it under the terms of the GNU General Public License version 2 as
>> @@ -14,6 +14,10 @@
>> #ifndef __ASM_PLAT_ADC_H
>> #define __ASM_PLAT_ADC_H __FILE__
>>
>> +struct s3c_adc_platdata {
>> + int adc_type;
>> +};
>> +
>>
> change the device name for the newer devices and use that as the key.
I suppose using platform_device_id's like I did with my RTC patch will
work too?
Regards,
Maurus Cuelenaere
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2009-11-23 13:44 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-20 12:04 [PATCH 6/8] S3C: merge ADC drivers and add support for the S3C64xx Maurus Cuelenaere
2009-11-20 12:16 ` Vasily Khoruzhick
2009-11-20 14:34 ` Maurus Cuelenaere
2009-11-21 15:59 ` [PATCH 6/8 v2] " Maurus Cuelenaere
2009-11-23 0:09 ` Ben Dooks
2009-11-23 13:44 ` Maurus Cuelenaere
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).