]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - include/i2c.h
galaxy5200: Add default environment variables
[karo-tx-uboot.git] / include / i2c.h
index 8d6f867422c4bd6165d5954b5d92ad94e536fd79..b75476980bf2292cdc01658f4821f18c5687084e 100644 (file)
@@ -47,7 +47,9 @@
 #define I2C_RXTX_LEN   128     /* maximum tx/rx buffer length */
 
 #if defined(CONFIG_I2C_MULTI_BUS)
+#if !defined(CONFIG_SYS_MAX_I2C_BUS)
 #define CONFIG_SYS_MAX_I2C_BUS         2
+#endif
 #define I2C_GET_BUS()          i2c_get_bus_num()
 #define I2C_SET_BUS(a)         i2c_set_bus_num(a)
 #else
 #  define I2C_SOFT_DECLARATIONS
 # endif
 #endif
+
+#ifdef CONFIG_8xx
+/* Set default value for the I2C bus speed on 8xx. In the
+ * future, we'll define these in all 8xx board config files.
+ */
+#ifndef        CONFIG_SYS_I2C_SPEED
+#define        CONFIG_SYS_I2C_SPEED    50000
+#endif
+#endif
+
+/*
+ * Many boards/controllers/drivers don't support an I2C slave interface so
+ * provide a default slave address for them for use in common code.  A real
+ * value for CONFIG_SYS_I2C_SLAVE should be defined for any board which does
+ * support a slave interface.
+ */
+#ifndef        CONFIG_SYS_I2C_SLAVE
+#define        CONFIG_SYS_I2C_SLAVE    0xfe
+#endif
+
 /*
  * Initialization, must be called once on start up, may be called
  * repeatedly to change the speed and slave addresses.
@@ -132,8 +154,38 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len);
 /*
  * Utility routines to read/write registers.
  */
-uchar i2c_reg_read (uchar chip, uchar reg);
-void  i2c_reg_write(uchar chip, uchar reg, uchar val);
+static inline u8 i2c_reg_read(u8 addr, u8 reg)
+{
+       u8 buf;
+
+#ifdef CONFIG_8xx
+       /* MPC8xx needs this.  Maybe one day we can get rid of it. */
+       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+#endif
+
+#ifdef DEBUG
+       printf("%s: addr=0x%02x, reg=0x%02x\n", __func__, addr, reg);
+#endif
+
+       i2c_read(addr, reg, 1, &buf, 1);
+
+       return buf;
+}
+
+static inline void i2c_reg_write(u8 addr, u8 reg, u8 val)
+{
+#ifdef CONFIG_8xx
+       /* MPC8xx needs this.  Maybe one day we can get rid of it. */
+       i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
+#endif
+
+#ifdef DEBUG
+       printf("%s: addr=0x%02x, reg=0x%02x, val=0x%02x\n",
+              __func__, addr, reg, val);
+#endif
+
+       i2c_write(addr, reg, 1, &val, 1);
+}
 
 /*
  * Functions for setting the current I2C bus and its speed