linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [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).