All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation
@ 2010-07-05  8:50 Mike Frysinger
  2010-07-05  8:50 ` [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code Mike Frysinger
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Mike Frysinger @ 2010-07-05  8:50 UTC (permalink / raw)
  To: u-boot

Since the vast majority of GPIO I2C implementations behave the same way,
support the common GPIO framework with default settings.

This adds two new defines CONFIG_SOFT_I2C_GPIO_{SCL,SDA} so that boards
which want GPIO I2C support need only define these.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 README                 |   10 ++++++++++
 drivers/i2c/soft_i2c.c |   42 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/README b/README
index a9c98f2..c9fb284 100644
--- a/README
+++ b/README
@@ -1495,6 +1495,16 @@ The following options need to be configured:
 
 		#define I2C_DELAY  udelay(2)
 
+		CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDA
+
+		If your arch supports the generic GPIO framework (asm/gpio.h),
+		then you may alternatively define the two GPIOs that are to be
+		used as SCL / SDA.  Any of the previous I2C_xxx macros will
+		have GPIO-based defaults assigned to them as appropriate.
+
+		You should define these to the GPIO value as given directly to
+		the generic GPIO functions.
+
 		CONFIG_SYS_I2C_INIT_BOARD
 
 		When a board is reset during an i2c bus transfer
diff --git a/drivers/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c
index e0cf1e1..847db76 100644
--- a/drivers/i2c/soft_i2c.c
+++ b/drivers/i2c/soft_i2c.c
@@ -51,6 +51,48 @@
 #endif
 #include <i2c.h>
 
+#if defined(CONFIG_SOFT_I2C_GPIO_SCL)
+# include <asm/gpio.h>
+
+# ifndef I2C_GPIO_SYNC
+#  define I2C_GPIO_SYNC
+# endif
+
+# ifndef I2C_INIT
+#  define I2C_INIT \
+	do { \
+		gpio_request(CONFIG_SOFT_I2C_GPIO_SCL, "soft_i2c"); \
+		gpio_direction_output(CONFIG_SOFT_I2C_GPIO_SCL, 0); \
+		gpio_request(CONFIG_SOFT_I2C_GPIO_SDA, "soft_i2c"); \
+	} while (0)
+# endif
+
+# ifndef I2C_ACTIVE
+#  define I2C_ACTIVE gpio_direction_output(CONFIG_SOFT_I2C_GPIO_SDA, 0)
+# endif
+
+# ifndef I2C_TRISTATE
+#  define I2C_TRISTATE gpio_direction_input(CONFIG_SOFT_I2C_GPIO_SDA)
+# endif
+
+# ifndef I2C_READ
+#  define I2C_READ (gpio_get_value(CONFIG_SOFT_I2C_GPIO_SDA) != 0)
+# endif
+
+# ifndef I2C_SDA
+#  define I2C_SDA(bit) gpio_set_value(CONFIG_SOFT_I2C_GPIO_SDA, bit)
+# endif
+
+# ifndef I2C_SCL
+#  define I2C_SCL(bit) gpio_set_value(CONFIG_SOFT_I2C_GPIO_SCL, bit)
+# endif
+
+# ifndef I2C_DELAY
+#  define I2C_DELAY udelay(5)	/* 1/4 I2C clock duration */
+# endif
+
+#endif
+
 /* #define	DEBUG_I2C	*/
 
 #ifdef DEBUG_I2C
-- 
1.7.1.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code
  2010-07-05  8:50 [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Mike Frysinger
@ 2010-07-05  8:50 ` Mike Frysinger
  2010-07-05 11:14   ` Heiko Schocher
  2010-07-06  6:21 ` [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Thomas Chou
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Mike Frysinger @ 2010-07-05  8:50 UTC (permalink / raw)
  To: u-boot

Use the new common gpio framework to simplify and unify the soft i2c
configuration settings.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
note: i can run this through the Blackfin tree if you want

 include/configs/bf533-ezkit.h |   43 +---------------------------------------
 include/configs/bf533-stamp.h |   43 +---------------------------------------
 include/configs/bf561-ezkit.h |   42 +--------------------------------------
 include/configs/blackstamp.h  |   28 +------------------------
 include/configs/ibf-dsp561.h  |   29 +-------------------------
 5 files changed, 10 insertions(+), 175 deletions(-)

diff --git a/include/configs/bf533-ezkit.h b/include/configs/bf533-ezkit.h
index 37a7059..95d3afa 100644
--- a/include/configs/bf533-ezkit.h
+++ b/include/configs/bf533-ezkit.h
@@ -94,49 +94,10 @@
 
 /*
  * I2C Settings
- * By default PF1 is used as SDA and PF0 as SCL on the Stamp board
  */
 #define CONFIG_SOFT_I2C
-#ifdef CONFIG_SOFT_I2C
-#define PF_SCL PF0
-#define PF_SDA PF1
-#define I2C_INIT \
-	do { \
-		*pFIO_DIR |= PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_ACTIVE \
-	do { \
-		*pFIO_DIR |= PF_SDA; \
-		*pFIO_INEN &= ~PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_TRISTATE \
-	do { \
-		*pFIO_DIR &= ~PF_SDA; \
-		*pFIO_INEN |= PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_READ ((*pFIO_FLAG_D & PF_SDA) != 0)
-#define I2C_SDA(bit) \
-	do { \
-		if (bit) \
-			*pFIO_FLAG_S = PF_SDA; \
-		else \
-			*pFIO_FLAG_C = PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_SCL(bit) \
-	do { \
-		if (bit) \
-			*pFIO_FLAG_S = PF_SCL; \
-		else \
-			*pFIO_FLAG_C = PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_DELAY		udelay(5)	/* 1/4 I2C clock duration */
-
-#endif
+#define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF0
+#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF1
 
 
 /*
diff --git a/include/configs/bf533-stamp.h b/include/configs/bf533-stamp.h
index 02c8bc3..f39bfee 100644
--- a/include/configs/bf533-stamp.h
+++ b/include/configs/bf533-stamp.h
@@ -138,49 +138,10 @@
 
 /*
  * I2C Settings
- * By default PF2 is used as SDA and PF3 as SCL on the Stamp board
  */
 #define CONFIG_SOFT_I2C
-#ifdef CONFIG_SOFT_I2C
-#define PF_SCL PF3
-#define PF_SDA PF2
-#define I2C_INIT \
-	do { \
-		*pFIO_DIR |= PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_ACTIVE \
-	do { \
-		*pFIO_DIR |= PF_SDA; \
-		*pFIO_INEN &= ~PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_TRISTATE \
-	do { \
-		*pFIO_DIR &= ~PF_SDA; \
-		*pFIO_INEN |= PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_READ ((*pFIO_FLAG_D & PF_SDA) != 0)
-#define I2C_SDA(bit) \
-	do { \
-		if (bit) \
-			*pFIO_FLAG_S = PF_SDA; \
-		else \
-			*pFIO_FLAG_C = PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_SCL(bit) \
-	do { \
-		if (bit) \
-			*pFIO_FLAG_S = PF_SCL; \
-		else \
-			*pFIO_FLAG_C = PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_DELAY		udelay(5)	/* 1/4 I2C clock duration */
-
-#endif
+#define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF3
+#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF2
 
 
 /*
diff --git a/include/configs/bf561-ezkit.h b/include/configs/bf561-ezkit.h
index 036bfe4..4e293b5 100644
--- a/include/configs/bf561-ezkit.h
+++ b/include/configs/bf561-ezkit.h
@@ -112,46 +112,8 @@
  * I2C Settings
  */
 #define CONFIG_SOFT_I2C
-#ifdef CONFIG_SOFT_I2C
-#define PF_SCL PF0
-#define PF_SDA PF1
-#define I2C_INIT \
-	do { \
-		*pFIO0_DIR |= PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_ACTIVE \
-	do { \
-		*pFIO0_DIR |= PF_SDA; \
-		*pFIO0_INEN &= ~PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_TRISTATE \
-	do { \
-		*pFIO0_DIR &= ~PF_SDA; \
-		*pFIO0_INEN |= PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_READ ((*pFIO0_FLAG_D & PF_SDA) != 0)
-#define I2C_SDA(bit) \
-	do { \
-		if (bit) \
-			*pFIO0_FLAG_S = PF_SDA; \
-		else \
-			*pFIO0_FLAG_C = PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_SCL(bit) \
-	do { \
-		if (bit) \
-			*pFIO0_FLAG_S = PF_SCL; \
-		else \
-			*pFIO0_FLAG_C = PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_DELAY		udelay(5)	/* 1/4 I2C clock duration */
-
-#endif
+#define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF0
+#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF1
 
 
 /*
diff --git a/include/configs/blackstamp.h b/include/configs/blackstamp.h
index aa33933..85f08ea 100644
--- a/include/configs/blackstamp.h
+++ b/include/configs/blackstamp.h
@@ -206,32 +206,8 @@
  * them yet. You can (and probably should) change these values!
  */
 #ifdef CONFIG_SOFT_I2C
-
-#define PF_SCL			PF9
-#define PF_SDA			PF8
-
-#define I2C_INIT       do { *pFIO_DIR |= PF_SCL; SSYNC(); } while (0)
-#define I2C_ACTIVE     do { *pFIO_DIR |= PF_SDA; *pFIO_INEN &= ~PF_SDA; SSYNC(); } while (0)
-#define I2C_TRISTATE   do { *pFIO_DIR &= ~PF_SDA; *pFIO_INEN |= PF_SDA; SSYNC(); } while (0)
-#define I2C_READ       ((*pFIO_FLAG_D & PF_SDA) != 0)
-#define I2C_SDA(bit) \
-	do { \
-		if (bit) \
-			*pFIO_FLAG_S = PF_SDA; \
-		else \
-			*pFIO_FLAG_C = PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_SCL(bit) \
-	do { \
-		if (bit) \
-			*pFIO_FLAG_S = PF_SCL; \
-		else \
-			*pFIO_FLAG_C = PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_DELAY		udelay(5)	/* 1/4 I2C clock duration */
-
+#define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF9
+#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF8
 #define CONFIG_SYS_I2C_SPEED		50000
 #define CONFIG_SYS_I2C_SLAVE		0xFE
 #endif
diff --git a/include/configs/ibf-dsp561.h b/include/configs/ibf-dsp561.h
index 2c0a263..53b5197 100644
--- a/include/configs/ibf-dsp561.h
+++ b/include/configs/ibf-dsp561.h
@@ -112,33 +112,8 @@
  * I2C Settings
  */
 #define CONFIG_SOFT_I2C		1
-#define PF_SCL			0x1/*PF0*/
-#define PF_SDA			0x2/*PF1*/
-
-#ifdef CONFIG_SOFT_I2C
-#define I2C_INIT       do { *pFIO0_DIR |= PF_SCL; SSYNC(); } while (0)
-#define I2C_ACTIVE     do { *pFIO0_DIR |= PF_SDA; *pFIO0_INEN &= ~PF_SDA; SSYNC(); } while (0)
-#define I2C_TRISTATE   do { *pFIO0_DIR &= ~PF_SDA; *pFIO0_INEN |= PF_SDA; SSYNC(); } while (0)
-#define I2C_READ       ((*pFIO0_FLAG_D & PF_SDA) != 0)
-#define I2C_SDA(bit) \
-	do { \
-		if (bit) \
-			*pFIO0_FLAG_S = PF_SDA; \
-		else \
-			*pFIO0_FLAG_C = PF_SDA; \
-		SSYNC(); \
-	} while (0)
-#define I2C_SCL(bit) \
-	do { \
-		if (bit) \
-			*pFIO0_FLAG_S = PF_SCL; \
-		else \
-			*pFIO0_FLAG_C = PF_SCL; \
-		SSYNC(); \
-	} while (0)
-#define I2C_DELAY		udelay(5)	/* 1/4 I2C clock duration */
-
-#endif
+#define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF0
+#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF1
 
 
 /*
-- 
1.7.1.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code
  2010-07-05  8:50 ` [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code Mike Frysinger
@ 2010-07-05 11:14   ` Heiko Schocher
  2010-07-05 13:39     ` Mike Frysinger
  0 siblings, 1 reply; 9+ messages in thread
From: Heiko Schocher @ 2010-07-05 11:14 UTC (permalink / raw)
  To: u-boot

Hello Mike,

Mike Frysinger wrote:
> Use the new common gpio framework to simplify and unify the soft i2c
> configuration settings.
> 
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> ---
> note: i can run this through the Blackfin tree if you want

I actually tried your 2 patches, but this patch doesn;t apply :-(

[hs at pollux u-boot-i2c]$ git am -i --whitespace=strip \[U-Boot\]\ \[PATCH\ 2_2\]\ Blackfin\:\ bf533_bf561\ boards\:\ convert\ to\ new\   soft\ gpio\ i2c\ code.eml
Commit Body is:
--------------------------
Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code

Use the new common gpio framework to simplify and unify the soft i2c
configuration settings.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
--------------------------
Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all y
Applying: Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code
error: patch failed: include/configs/bf533-ezkit.h:94
error: include/configs/bf533-ezkit.h: patch does not apply
error: patch failed: include/configs/bf533-stamp.h:138
error: include/configs/bf533-stamp.h: patch does not apply
error: patch failed: include/configs/bf561-ezkit.h:112
error: include/configs/bf561-ezkit.h: patch does not apply
error: patch failed: include/configs/ibf-dsp561.h:112
error: include/configs/ibf-dsp561.h: patch does not apply
Patch failed at 0001 Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code
When you have resolved this problem run "git am -i --resolved".
If you would prefer to skip this patch, instead run "git am -i --skip".
To restore the original branch and stop patching run "git am -i --abort".
[hs at pollux u-boot-i2c]$

Beside of this issue, your 2 patches are looking good!

So, if you want to pick up this patches in your blackfin tree, you
can add my

Acked-by: Heiko Schocher <hs@denx.de>

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code
  2010-07-05 11:14   ` Heiko Schocher
@ 2010-07-05 13:39     ` Mike Frysinger
  0 siblings, 0 replies; 9+ messages in thread
From: Mike Frysinger @ 2010-07-05 13:39 UTC (permalink / raw)
  To: u-boot

On Monday, July 05, 2010 07:14:16 Heiko Schocher wrote:
> Mike Frysinger wrote:
> > Use the new common gpio framework to simplify and unify the soft i2c
> > configuration settings.
> > 
> > Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> > ---
> > note: i can run this through the Blackfin tree if you want
> 
> I actually tried your 2 patches, but this patch doesn;t apply :-(

it might depend on patches that are pending in my tree ...

> So, if you want to pick up this patches in your blackfin tree, you
> can add my
> 
> Acked-by: Heiko Schocher <hs@denx.de>

will do then, thanks
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20100705/9d80141d/attachment.pgp 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation
  2010-07-05  8:50 [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Mike Frysinger
  2010-07-05  8:50 ` [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code Mike Frysinger
@ 2010-07-06  6:21 ` Thomas Chou
  2010-07-11 22:55 ` Mike Frysinger
  2010-07-21 17:38 ` [U-Boot] [PATCH 1/2 v2] " Mike Frysinger
  3 siblings, 0 replies; 9+ messages in thread
From: Thomas Chou @ 2010-07-06  6:21 UTC (permalink / raw)
  To: u-boot

On 07/05/2010 04:50 PM, Mike Frysinger wrote:
> Since the vast majority of GPIO I2C implementations behave the same way,
> support the common GPIO framework with default settings.
>
> This adds two new defines CONFIG_SOFT_I2C_GPIO_{SCL,SDA} so that boards
> which want GPIO I2C support need only define these.
>
> Signed-off-by: Mike Frysinger<vapier@gentoo.org>

Tested on my nios2 boards after additional patch "i2c: fix SDA 
contention in read_byte()".

Tested-by: Thomas Chou <thomas@wytron.com.tw>

Cheers,
Thomas

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation
  2010-07-05  8:50 [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Mike Frysinger
  2010-07-05  8:50 ` [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code Mike Frysinger
  2010-07-06  6:21 ` [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Thomas Chou
@ 2010-07-11 22:55 ` Mike Frysinger
  2010-07-21 17:38 ` [U-Boot] [PATCH 1/2 v2] " Mike Frysinger
  3 siblings, 0 replies; 9+ messages in thread
From: Mike Frysinger @ 2010-07-11 22:55 UTC (permalink / raw)
  To: u-boot

On Monday, July 05, 2010 04:50:08 Mike Frysinger wrote:
> Since the vast majority of GPIO I2C implementations behave the same way,
> support the common GPIO framework with default settings.
> 
> This adds two new defines CONFIG_SOFT_I2C_GPIO_{SCL,SDA} so that boards
> which want GPIO I2C support need only define these.

i guess postpone this until we can get the tristate/sda issues sorted out
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20100711/5b92dd92/attachment.pgp 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/2 v2] i2c: soft_i2c: add simple GPIO implementation
  2010-07-05  8:50 [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Mike Frysinger
                   ` (2 preceding siblings ...)
  2010-07-11 22:55 ` Mike Frysinger
@ 2010-07-21 17:38 ` Mike Frysinger
  2010-07-22  2:51   ` Thomas Chou
  2010-07-24  5:52   ` Heiko Schocher
  3 siblings, 2 replies; 9+ messages in thread
From: Mike Frysinger @ 2010-07-21 17:38 UTC (permalink / raw)
  To: u-boot

Since the vast majority of GPIO I2C implementations behave the same way,
support the common GPIO framework with default settings.

This adds two new defines CONFIG_SOFT_I2C_GPIO_{SCL,SDA} so that boards
which want GPIO I2C support need only define these.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Tested-by: Thomas Chou <thomas@wytron.com.tw>
---
v2
	- stub out tristate/active by default and let the gpios handle things
	  in the sda/scl macros

 README                 |   10 +++++++++
 drivers/i2c/soft_i2c.c |   52 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/README b/README
index a9c98f2..c9fb284 100644
--- a/README
+++ b/README
@@ -1495,6 +1495,16 @@ The following options need to be configured:
 
 		#define I2C_DELAY  udelay(2)
 
+		CONFIG_SOFT_I2C_GPIO_SCL / CONFIG_SOFT_I2C_GPIO_SDA
+
+		If your arch supports the generic GPIO framework (asm/gpio.h),
+		then you may alternatively define the two GPIOs that are to be
+		used as SCL / SDA.  Any of the previous I2C_xxx macros will
+		have GPIO-based defaults assigned to them as appropriate.
+
+		You should define these to the GPIO value as given directly to
+		the generic GPIO functions.
+
 		CONFIG_SYS_I2C_INIT_BOARD
 
 		When a board is reset during an i2c bus transfer
diff --git a/drivers/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c
index e0cf1e1..1a1809a 100644
--- a/drivers/i2c/soft_i2c.c
+++ b/drivers/i2c/soft_i2c.c
@@ -51,6 +51,58 @@
 #endif
 #include <i2c.h>
 
+#if defined(CONFIG_SOFT_I2C_GPIO_SCL)
+# include <asm/gpio.h>
+
+# ifndef I2C_GPIO_SYNC
+#  define I2C_GPIO_SYNC
+# endif
+
+# ifndef I2C_INIT
+#  define I2C_INIT \
+	do { \
+		gpio_request(CONFIG_SOFT_I2C_GPIO_SCL, "soft_i2c"); \
+		gpio_request(CONFIG_SOFT_I2C_GPIO_SDA, "soft_i2c"); \
+	} while (0)
+# endif
+
+# ifndef I2C_ACTIVE
+#  define I2C_ACTIVE do { } while (0)
+# endif
+
+# ifndef I2C_TRISTATE
+#  define I2C_TRISTATE do { } while (0)
+# endif
+
+# ifndef I2C_READ
+#  define I2C_READ gpio_get_value(CONFIG_SOFT_I2C_GPIO_SDA)
+# endif
+
+# ifndef I2C_SDA
+#  define I2C_SDA(bit) \
+	do { \
+		if (bit) \
+			gpio_direction_input(CONFIG_SOFT_I2C_GPIO_SDA); \
+		else \
+			gpio_direction_output(CONFIG_SOFT_I2C_GPIO_SDA, 0); \
+		I2C_GPIO_SYNC; \
+	} while (0)
+# endif
+
+# ifndef I2C_SCL
+#  define I2C_SCL(bit) \
+	do { \
+		gpio_direction_output(CONFIG_SOFT_I2C_GPIO_SCL, bit); \
+		I2C_GPIO_SYNC; \
+	} while (0)
+# endif
+
+# ifndef I2C_DELAY
+#  define I2C_DELAY udelay(5)	/* 1/4 I2C clock duration */
+# endif
+
+#endif
+
 /* #define	DEBUG_I2C	*/
 
 #ifdef DEBUG_I2C
-- 
1.7.1.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/2 v2] i2c: soft_i2c: add simple GPIO implementation
  2010-07-21 17:38 ` [U-Boot] [PATCH 1/2 v2] " Mike Frysinger
@ 2010-07-22  2:51   ` Thomas Chou
  2010-07-24  5:52   ` Heiko Schocher
  1 sibling, 0 replies; 9+ messages in thread
From: Thomas Chou @ 2010-07-22  2:51 UTC (permalink / raw)
  To: u-boot

Mike Frysinger wrote:
> Since the vast majority of GPIO I2C implementations behave the same way,
> support the common GPIO framework with default settings.
> 
> This adds two new defines CONFIG_SOFT_I2C_GPIO_{SCL,SDA} so that boards
> which want GPIO I2C support need only define these.
> 
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> Tested-by: Thomas Chou <thomas@wytron.com.tw>
> ---
> v2
> 	- stub out tristate/active by default and let the gpios handle things
> 	  in the sda/scl macros
> 

Tested v2 on nios2 boards.

Tested-by: Thomas Chou <thomas@wytron.com.tw>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [U-Boot] [PATCH 1/2 v2] i2c: soft_i2c: add simple GPIO implementation
  2010-07-21 17:38 ` [U-Boot] [PATCH 1/2 v2] " Mike Frysinger
  2010-07-22  2:51   ` Thomas Chou
@ 2010-07-24  5:52   ` Heiko Schocher
  1 sibling, 0 replies; 9+ messages in thread
From: Heiko Schocher @ 2010-07-24  5:52 UTC (permalink / raw)
  To: u-boot

Hello Mike,

Mike Frysinger wrote:
> Since the vast majority of GPIO I2C implementations behave the same way,
> support the common GPIO framework with default settings.
> 
> This adds two new defines CONFIG_SOFT_I2C_GPIO_{SCL,SDA} so that boards
> which want GPIO I2C support need only define these.
> 
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> Tested-by: Thomas Chou <thomas@wytron.com.tw>
> ---
> v2
> 	- stub out tristate/active by default and let the gpios handle things
> 	  in the sda/scl macros
> 
>  README                 |   10 +++++++++
>  drivers/i2c/soft_i2c.c |   52 ++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 62 insertions(+), 0 deletions(-)

Apllied to u-boot-i2c.git

Thanks.

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-07-24  5:52 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-05  8:50 [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Mike Frysinger
2010-07-05  8:50 ` [U-Boot] [PATCH 2/2] Blackfin: bf533/bf561 boards: convert to new soft gpio i2c code Mike Frysinger
2010-07-05 11:14   ` Heiko Schocher
2010-07-05 13:39     ` Mike Frysinger
2010-07-06  6:21 ` [U-Boot] [PATCH 1/2] i2c: soft_i2c: add simple GPIO implementation Thomas Chou
2010-07-11 22:55 ` Mike Frysinger
2010-07-21 17:38 ` [U-Boot] [PATCH 1/2 v2] " Mike Frysinger
2010-07-22  2:51   ` Thomas Chou
2010-07-24  5:52   ` Heiko Schocher

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.