public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 18/31] mpc83xx, kmeter1: add I2C, dtt, eeprom support
@ 2009-01-28  9:40 Heiko Schocher
  2009-01-29  2:10 ` Kim Phillips
  0 siblings, 1 reply; 3+ messages in thread
From: Heiko Schocher @ 2009-01-28  9:40 UTC (permalink / raw)
  To: u-boot

This patch adds I2C support for the Keymile kmeter1 board.
It uses the First I2C Controller from the CPU, for
accessing 4 temperature sensors, an eeprom with IVM data
and the booteeprom over a pca9547 mux.

Signed-off-by: Heiko Schocher <hs@denx.de>
---
 board/keymile/common/common.c    |    4 +++-
 board/keymile/kmeter1/kmeter1.c  |   32 ++++++++++++++++++++++++++++++++
 include/configs/keymile-common.h |    5 -----
 include/configs/kmeter1.h        |   38 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
index 1338950..17312b5 100644
--- a/board/keymile/common/common.c
+++ b/board/keymile/common/common.c
@@ -40,6 +40,7 @@

 extern int i2c_soft_read_pin (void);

+#if defined(CONFIG_HUSH_INIT_VAR)
 int ivm_calc_crc (unsigned char *buf, int len)
 {
 	const unsigned short crc_tab[16] = {
@@ -318,13 +319,14 @@ int ivm_read_eeprom (void)
 	if (buf != NULL)
 		dev_addr = simple_strtoul ((char *)buf, NULL, 16);

-	if (eeprom_read (dev_addr, 0, i2c_buffer, CONFIG_SYS_IVM_EEPROM_MAX_LEN) != 0) {
+	if (i2c_read(dev_addr, 0, 1, i2c_buffer, CONFIG_SYS_IVM_EEPROM_MAX_LEN) != 0) {
 		printf ("Error reading EEprom\n");
 		return -2;
 	}

 	return ivm_analyze_eeprom (i2c_buffer, CONFIG_SYS_IVM_EEPROM_MAX_LEN);
 }
+#endif

 #if defined(CONFIG_SYS_I2C_INIT_BOARD)
 #define DELAY_ABORT_SEQ		62
diff --git a/board/keymile/kmeter1/kmeter1.c b/board/keymile/kmeter1/kmeter1.c
index f04a57a..27f0998 100644
--- a/board/keymile/kmeter1/kmeter1.c
+++ b/board/keymile/kmeter1/kmeter1.c
@@ -26,6 +26,7 @@
 #include <asm/mmu.h>
 #include <pci.h>
 #include <libfdt.h>
+#include <dtt.h>

 #include "../common/common.h"

@@ -59,6 +60,22 @@ const qe_iop_conf_t qe_iop_conf_tab[] = {
 	{0,  0, 0, 0, QE_IOP_TAB_END},
 };

+static int board_init_i2c_busses (void)
+{
+	I2C_MUX_DEVICE *dev = NULL;
+	uchar	*buf;
+
+	/* Set up the Bus for the DTTs */
+	buf = (unsigned char *) getenv ("DTT_bus");
+	if (buf != NULL)
+		dev = i2c_mux_ident_muxstring (buf);
+	if (dev == NULL) {
+		printf ("Error couldnt add Bus for DTT\n");
+		return 0;
+	}
+	return 0;
+}
+
 int board_early_init_r (void)
 {
 	void *reg = (void *)(CONFIG_SYS_IMMR + 0x14a8);
@@ -76,7 +93,13 @@ int board_early_init_r (void)
 	out_be32 (reg, val);
 	/* enable the PHY on the PIGGY */
 	setbits (8, (void *)(CONFIG_SYS_PIGGY_BASE + 0x10003), 0x01);
+	return 0;
+}

+int misc_init_r (void)
+{
+	board_init_i2c_busses ();
+	dtt_init ();
 	return 0;
 }

@@ -156,3 +179,12 @@ void ft_board_setup (void *blob, bd_t *bd)
 	ft_cpu_setup (blob, bd);
 }
 #endif
+
+#if defined(CONFIG_HUSH_INIT_VAR)
+extern int ivm_read_eeprom (void);
+int hush_init_var (void)
+{
+	ivm_read_eeprom ();
+	return 0;
+}
+#endif
diff --git a/include/configs/keymile-common.h b/include/configs/keymile-common.h
index 6abe27a..99c3380 100644
--- a/include/configs/keymile-common.h
+++ b/include/configs/keymile-common.h
@@ -44,13 +44,11 @@
 #define CONFIG_CMD_PING

 /* should go away, if kmeter I2C support is enabled */
-#if defined(CONFIG_MGCOGE) || defined(CONFIG_MGSUVD)
 #define CONFIG_CMD_DTT
 #define CONFIG_CMD_EEPROM
 #define CONFIG_CMD_I2C
 #define CONFIG_CMD_JFFS2
 #define CONFIG_JFFS2_CMDLINE
-#endif

 #undef	CONFIG_WATCHDOG			/* disable platform specific watchdog */

@@ -77,10 +75,7 @@
 #define CONFIG_COMMAND_HISTORY		1
 #define CONFIG_AUTO_COMPLETE		/* add autocompletion support	*/

-/* should go away, if kmeter I2C support is enabled */
-#if defined(CONFIG_MGCOGE) || defined(CONFIG_MGSUVD)
 #define CONFIG_HUSH_INIT_VAR	1
-#endif

 #define CONFIG_SYS_ALT_MEMTEST		/* memory test, takes time */
 #define CONFIG_SYS_MEMTEST_START	0x00100000	/* memtest works on */
diff --git a/include/configs/kmeter1.h b/include/configs/kmeter1.h
index f9c01f5..17ddcec 100644
--- a/include/configs/kmeter1.h
+++ b/include/configs/kmeter1.h
@@ -33,6 +33,7 @@
 /* include common defines/options for all Keymile boards */
 #include "keymile-common.h"

+#define CONFIG_MISC_INIT_R	1
 /*
  * System Clock Setup
  */
@@ -304,6 +305,41 @@
 #define CONFIG_ENV_SIZE		0x2000
 #endif /* CFG_RAMBOOT */

+/* I2C */
+#define CONFIG_HARD_I2C		/* I2C with hardware support */
+#undef	CONFIG_SOFT_I2C		/* I2C bit-banged */
+#define CONFIG_FSL_I2C
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_I2C_CMD_TREE
+#define CONFIG_SYS_I2C_SPEED	200000	/* I2C speed and slave address */
+#define CONFIG_SYS_I2C_SLAVE	0x7F
+#define CONFIG_SYS_I2C_OFFSET	0x3000
+
+#define CONFIG_SYS_MAX_I2C_BUS		2
+#define CONFIG_I2C_MUX		1
+
+/* EEprom support */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN	2
+#define CONFIG_SYS_I2C_MULTI_EEPROMS	1
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_ENABLE
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10
+
+#define CONFIG_HUSH_INIT_VAR	1
+/* Support the IVM EEprom */
+#define	CONFIG_SYS_IVM_EEPROM_ADR	0x50
+#define CONFIG_SYS_IVM_EEPROM_MAX_LEN	0x400
+#define CONFIG_SYS_IVM_EEPROM_PAGE_LEN	0x100
+
+/* I2C SYSMON (LM75, AD7414 is almost compatible)			*/
+#define CONFIG_DTT_LM75		1	/* ON Semi's LM75		*/
+#define CONFIG_DTT_SENSORS	{0, 1, 2, 3}	/* Sensor addresses		*/
+#define CONFIG_SYS_DTT_MAX_TEMP	70
+#define CONFIG_SYS_DTT_LOW_TEMP	-30
+#define CONFIG_SYS_DTT_HYSTERESIS	3
+#define CONFIG_SYS_DTT_BUS_NUM		(2)
+#define CONFIG_SYS_DTT_BOARD_INIT	1
+
 #if defined(CONFIG_PCI)
 #define CONFIG_CMD_PCI
 #endif
@@ -428,6 +464,8 @@
 	"kernel_addr=F00a0000\0"					\
 	"ramdisk_addr=F03a0000\0"					\
 	"ramdisk_addr_r=F10000\0"					\
+	"EEprom_ivm=pca9547:70:9\0"					\
+	"DTT_bus=pca9547:70:a\0"					\
 	""


-- 
1.6.0.6

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

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

* [U-Boot] [PATCH 18/31] mpc83xx, kmeter1: add I2C, dtt, eeprom support
  2009-01-28  9:40 [U-Boot] [PATCH 18/31] mpc83xx, kmeter1: add I2C, dtt, eeprom support Heiko Schocher
@ 2009-01-29  2:10 ` Kim Phillips
  2009-01-29  9:05   ` Heiko Schocher
  0 siblings, 1 reply; 3+ messages in thread
From: Kim Phillips @ 2009-01-29  2:10 UTC (permalink / raw)
  To: u-boot

On Wed, 28 Jan 2009 10:40:04 +0100
Heiko Schocher <hs@denx.de> wrote:

> +static int board_init_i2c_busses (void)
> +{
> +	I2C_MUX_DEVICE *dev = NULL;
> +	uchar	*buf;
> +
> +	/* Set up the Bus for the DTTs */
> +	buf = (unsigned char *) getenv ("DTT_bus");

the environment is case sensitive; can we be more case-consistent
with names we expect from it?

> +	if (buf != NULL)
> +		dev = i2c_mux_ident_muxstring (buf);
> +	if (dev == NULL) {
> +		printf ("Error couldnt add Bus for DTT\n");

s/couldnt/couldn't/, add something like "please setenv dtt_bus
<insert something reasonable here>"

> +		return 0;

are you sure you shouldn't be returning an error code?  otherwise this
line is not necessary.

> +	}
> +	return 0;
> +}
> +

Kim

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

* [U-Boot] [PATCH 18/31] mpc83xx, kmeter1: add I2C, dtt, eeprom support
  2009-01-29  2:10 ` Kim Phillips
@ 2009-01-29  9:05   ` Heiko Schocher
  0 siblings, 0 replies; 3+ messages in thread
From: Heiko Schocher @ 2009-01-29  9:05 UTC (permalink / raw)
  To: u-boot

Hello Kim,

Kim Phillips wrote:
> On Wed, 28 Jan 2009 10:40:04 +0100
> Heiko Schocher <hs@denx.de> wrote:
> 
>> +static int board_init_i2c_busses (void)
>> +{
>> +	I2C_MUX_DEVICE *dev = NULL;
>> +	uchar	*buf;
>> +
>> +	/* Set up the Bus for the DTTs */
>> +	buf = (unsigned char *) getenv ("DTT_bus");
> 
> the environment is case sensitive; can we be more case-consistent
> with names we expect from it?

Ok.

>> +	if (buf != NULL)
>> +		dev = i2c_mux_ident_muxstring (buf);
>> +	if (dev == NULL) {
>> +		printf ("Error couldnt add Bus for DTT\n");
> 
> s/couldnt/couldn't/, add something like "please setenv dtt_bus
> <insert something reasonable here>"

Ok.

>> +		return 0;
> 
> are you sure you shouldn't be returning an error code?  otherwise this
> line is not necessary.

thanks,
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] 3+ messages in thread

end of thread, other threads:[~2009-01-29  9:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-28  9:40 [U-Boot] [PATCH 18/31] mpc83xx, kmeter1: add I2C, dtt, eeprom support Heiko Schocher
2009-01-29  2:10 ` Kim Phillips
2009-01-29  9:05   ` Heiko Schocher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox