All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
To: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>
Subject: [patch 8/9] S3C: Add i2c1 device definition
Date: Fri, 31 Oct 2008 16:04:28 +0000	[thread overview]
Message-ID: <20081031160438.182603988@fluff.org.uk> (raw)
In-Reply-To: 20081031160420.164160051@fluff.org.uk

[-- Attachment #1: simtec/s3c64xx/i2c-add-second-i2c-bus.patch --]
[-- Type: text/plain, Size: 7598 bytes --]

Add device definition and support functions for the
second i2c device (i2c1). If this is selected, the first
i2c bus will become index 0 instead of index -1.

Signed-off-by: Ben Dooks <ben-linux-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org>

Index: linux.git/arch/arm/plat-s3c/dev-i2c1.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux.git/arch/arm/plat-s3c/dev-i2c1.c	2008-10-31 00:06:44.000000000 +0000
@@ -0,0 +1,68 @@
+/* linux/arch/arm/plat-s3c/dev-i2c1.c
+ *
+ * Copyright 2008 Simtec Electronics
+ *	Ben Dooks <ben-Y5A6D6n0/KfQXOPxS62xeg@public.gmane.org>
+ *	http://armlinux.simtec.co.uk/
+ *
+ * S3C series device definition for i2c device 1
+ *
+ * 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/map.h>
+
+#include <plat/regs-iic.h>
+#include <plat/iic.h>
+#include <plat/devs.h>
+#include <plat/cpu.h>
+
+static struct resource s3c_i2c_resource[] = {
+	[0] = {
+		.start = S3C_PA_IIC1,
+		.end   = S3C_PA_IIC1 + SZ_4K - 1,
+		.flags = IORESOURCE_MEM,
+	},
+	[1] = {
+		.start = IRQ_IIC1,
+		.end   = IRQ_IIC1,
+		.flags = IORESOURCE_IRQ,
+	},
+};
+
+struct platform_device s3c_device_i2c1 = {
+	.name		  = "s3c2410-i2c",
+	.id		  = 1,
+	.num_resources	  = ARRAY_SIZE(s3c_i2c_resource),
+	.resource	  = s3c_i2c_resource,
+};
+
+static struct s3c2410_platform_i2c default_i2c_data1 __initdata = {
+	.flags		= 0,
+	.bus_num	= 1,
+	.slave_addr	= 0x10,
+	.bus_freq	= 100*1000,
+	.max_freq	= 400*1000,
+	.sda_delay	= S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
+};
+
+void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd)
+{
+	struct s3c2410_platform_i2c *npd;
+
+	if (!pd)
+		pd = &default_i2c_data1;
+
+	npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL);
+	if (!npd)
+		printk(KERN_ERR "%s: no memory for platform data\n", __func__);
+	else if (!npd->cfg_gpio)
+		npd->cfg_gpio = s3c_i2c1_cfg_gpio;
+
+	s3c_device_i2c1.dev.platform_data = npd;
+}
Index: linux.git/arch/arm/mach-s3c6400/include/mach/map.h
===================================================================
--- linux.git.orig/arch/arm/mach-s3c6400/include/mach/map.h	2008-10-31 00:00:24.000000000 +0000
+++ linux.git/arch/arm/mach-s3c6400/include/mach/map.h	2008-10-31 00:00:36.000000000 +0000
@@ -41,6 +41,7 @@
 #define S3C64XX_PA_SYSCON	(0x7E00F000)
 #define S3C64XX_PA_TIMER	(0x7F006000)
 #define S3C64XX_PA_IIC0		(0x7F004000)
+#define S3C64XX_PA_IIC1		(0x7F00F000)
 
 #define S3C64XX_PA_GPIO		(0x7F008000)
 #define S3C64XX_VA_GPIO		S3C_ADDR(0x00500000)
@@ -60,5 +61,6 @@
 #define S3C_PA_HSMMC1		S3C64XX_PA_HSMMC1
 #define S3C_PA_HSMMC2		S3C64XX_PA_HSMMC2
 #define S3C_PA_IIC		S3C64XX_PA_IIC0
+#define S3C_PA_IIC1		S3C64XX_PA_IIC1
 
 #endif /* __ASM_ARCH_6400_MAP_H */
Index: linux.git/arch/arm/plat-s3c/Kconfig
===================================================================
--- linux.git.orig/arch/arm/plat-s3c/Kconfig	2008-10-31 00:00:24.000000000 +0000
+++ linux.git/arch/arm/plat-s3c/Kconfig	2008-10-31 00:00:36.000000000 +0000
@@ -160,3 +160,9 @@ config S3C_DEV_HSMMC1
 	depends on PLAT_S3C
 	help
 	  Compile in platform device definitions for HSMMC channel 1
+
+config S3C_DEV_I2C1
+	bool
+	depends on PLAT_S3C
+	help
+	  Compile in platform device definitions for I2C channel 1
Index: linux.git/arch/arm/plat-s3c/Makefile
===================================================================
--- linux.git.orig/arch/arm/plat-s3c/Makefile	2008-10-31 00:00:24.000000000 +0000
+++ linux.git/arch/arm/plat-s3c/Makefile	2008-10-31 00:00:36.000000000 +0000
@@ -23,3 +23,4 @@ obj-y				+= gpio-config.o
 obj-$(CONFIG_S3C_DEV_HSMMC)	+= dev-hsmmc.o
 obj-$(CONFIG_S3C_DEV_HSMMC1)	+= dev-hsmmc1.o
 obj-y				+= dev-i2c0.o
+obj-$(CONFIG_S3C_DEV_I2C1)	+= dev-i2c1.o
Index: linux.git/arch/arm/plat-s3c/dev-i2c0.c
===================================================================
--- linux.git.orig/arch/arm/plat-s3c/dev-i2c0.c	2008-10-31 00:00:24.000000000 +0000
+++ linux.git/arch/arm/plat-s3c/dev-i2c0.c	2008-10-31 00:07:05.000000000 +0000
@@ -37,12 +37,16 @@ static struct resource s3c_i2c_resource[
 
 struct platform_device s3c_device_i2c0 = {
 	.name		  = "s3c2410-i2c",
+#ifdef CONFIG_S3C_DEV_I2C1
+	.id		  = 0,
+#else
 	.id		  = -1,
+#endif
 	.num_resources	  = ARRAY_SIZE(s3c_i2c_resource),
 	.resource	  = s3c_i2c_resource,
 };
 
-struct s3c2410_platform_i2c default_i2c_data __initdata = {
+static struct s3c2410_platform_i2c default_i2c_data0 __initdata = {
 	.flags		= 0,
 	.slave_addr	= 0x10,
 	.bus_freq	= 100*1000,
@@ -55,7 +59,7 @@ void __init s3c_i2c0_set_platdata(struct
 	struct s3c2410_platform_i2c *npd;
 
 	if (!pd)
-		pd = &default_i2c_data;
+		pd = &default_i2c_data0;
 
 	npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL);
 	if (!npd)
Index: linux.git/arch/arm/plat-s3c/include/plat/iic.h
===================================================================
--- linux.git.orig/arch/arm/plat-s3c/include/plat/iic.h	2008-10-31 00:00:24.000000000 +0000
+++ linux.git/arch/arm/plat-s3c/include/plat/iic.h	2008-10-31 00:00:36.000000000 +0000
@@ -48,8 +48,10 @@ struct s3c2410_platform_i2c {
  * as the driver will no longer carry defaults.
  */
 extern void s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *i2c);
+extern void s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *i2c);
 
 /* defined by architecture to configure gpio */
 extern void s3c_i2c0_cfg_gpio(struct platform_device *dev);
+extern void s3c_i2c1_cfg_gpio(struct platform_device *dev);
 
 #endif /* __ASM_ARCH_IIC_H */
Index: linux.git/arch/arm/plat-s3c/include/plat/devs.h
===================================================================
--- linux.git.orig/arch/arm/plat-s3c/include/plat/devs.h	2008-10-31 00:00:24.000000000 +0000
+++ linux.git/arch/arm/plat-s3c/include/plat/devs.h	2008-10-31 00:00:36.000000000 +0000
@@ -28,6 +28,7 @@ extern struct platform_device s3c_device
 extern struct platform_device s3c_device_lcd;
 extern struct platform_device s3c_device_wdt;
 extern struct platform_device s3c_device_i2c0;
+extern struct platform_device s3c_device_i2c1;
 extern struct platform_device s3c_device_iis;
 extern struct platform_device s3c_device_rtc;
 extern struct platform_device s3c_device_adc;
Index: linux.git/arch/arm/plat-s3c64xx/include/plat/irqs.h
===================================================================
--- linux.git.orig/arch/arm/plat-s3c64xx/include/plat/irqs.h	2008-10-31 00:03:34.000000000 +0000
+++ linux.git/arch/arm/plat-s3c64xx/include/plat/irqs.h	2008-10-31 00:13:33.000000000 +0000
@@ -70,6 +70,7 @@
 #define IRQ_CAMIF_C		S3C64XX_IRQ_VIC0(3)
 #define IRQ_CAMIF_P		S3C64XX_IRQ_VIC0(4)
 #define IRQ_CAMIF_MC		S3C64XX_IRQ_VIC0(5)
+#define IRQ_S3C6410_IIC1	S3C64XX_IRQ_VIC0(5)
 #define IRQ_S3C6410_IIS		S3C64XX_IRQ_VIC0(6)
 #define IRQ_S3C6400_CAMIF_MP	S3C64XX_IRQ_VIC0(6)
 #define IRQ_CAMIF_WE_C		S3C64XX_IRQ_VIC0(7)
@@ -144,6 +145,10 @@
 #define IRQ_TIMER3		S3C64XX_TIMER_IRQ(3)
 #define IRQ_TIMER4		S3C64XX_TIMER_IRQ(4)
 
+/* compatibility for device defines */
+
+#define IRQ_IIC1		IRQ_S3C6410_IIC1
+
 /* Since the IRQ_EINT(x) are a linear mapping on current s3c64xx series
  * we just defined them as an IRQ_EINT(x) macro from S3C_IRQ_EINT_BASE
  * which we place after the pair of VICs. */

-- 
Ben (ben-elnMNo+KYs3YtjvyW6yDsg@public.gmane.org, http://www.fluff.org/)

  'a smiley only costs 4 bytes'

  parent reply	other threads:[~2008-10-31 16:04 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-31 16:04 [patch 0/9] I2C patches for S3C24XX Ben Dooks
2008-10-31 16:04 ` [patch 1/9] i2c-s3c2410: fix check for being in suspend Ben Dooks
2008-10-31 16:04 ` [patch 2/9] i2c-s3c2410: Use <linux/io.h> over <asm/io.h> Ben Dooks
2008-10-31 16:04 ` [patch 3/9] i2c-s3c2410: fixup style problems from checkpatch.pl Ben Dooks
2008-10-31 16:04 ` [patch 4/9] i2c-s3c2410: use platform data for gpio configuration Ben Dooks
2008-10-31 16:04 ` [patch 5/9] i2c-s3c2410: Add ARCH_S3C64XX to allowed archs Ben Dooks
2008-10-31 16:04 ` [patch 6/9] i2c-s3c2410: remove default platform data Ben Dooks
2008-10-31 16:04 ` [patch 7/9] i2c-s3c2410: Allow more than one i2c-s3c2410 adapter Ben Dooks
2008-10-31 16:04 ` Ben Dooks [this message]
2008-10-31 16:04 ` [patch 9/9] i2c-s3c2410: change IRQ to be plain integer Ben Dooks

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081031160438.182603988@fluff.org.uk \
    --to=ben-linux-elnmno+kys3ytjvyw6ydsg@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.