]> git.sur5r.net Git - u-boot/blobdiff - include/i2c.h
i2c: Drop use of CONFIG_I2C_HARD
[u-boot] / include / i2c.h
index d19182931c57a328981721ceaf8dbf8edabeb998..cd7f61e1c1e1d773e6aa297166ee0e86255e789e 100644 (file)
@@ -444,6 +444,45 @@ struct dm_i2c_ops {
 
 #define i2c_get_ops(dev)       ((struct dm_i2c_ops *)(dev)->driver->ops)
 
+/**
+ * struct i2c_mux_ops - operations for an I2C mux
+ *
+ * The current mux state is expected to be stored in the mux itself since
+ * it is the only thing that knows how to make things work. The mux can
+ * record the current state and then avoid switching unless it is necessary.
+ * So select() can be skipped if the mux is already in the correct state.
+ * Also deselect() can be made a nop if required.
+ */
+struct i2c_mux_ops {
+       /**
+        * select() - select one of of I2C buses attached to a mux
+        *
+        * This will be called when there is no bus currently selected by the
+        * mux. This method does not need to deselect the old bus since
+        * deselect() will be already have been called if necessary.
+        *
+        * @mux:        Mux device
+        * @bus:        I2C bus to select
+        * @channel:    Channel number correponding to the bus to select
+        * @return 0 if OK, -ve on error
+        */
+       int (*select)(struct udevice *mux, struct udevice *bus, uint channel);
+
+       /**
+        * deselect() - select one of of I2C buses attached to a mux
+        *
+        * This is used to deselect the currently selected I2C bus.
+        *
+        * @mux:        Mux device
+        * @bus:        I2C bus to deselect
+        * @channel:    Channel number correponding to the bus to deselect
+        * @return 0 if OK, -ve on error
+        */
+       int (*deselect)(struct udevice *mux, struct udevice *bus, uint channel);
+};
+
+#define i2c_mux_get_ops(dev)   ((struct i2c_mux_ops *)(dev)->driver->ops)
+
 /**
  * i2c_get_chip() - get a device to use to access a chip on a bus
  *
@@ -460,7 +499,8 @@ int i2c_get_chip(struct udevice *bus, uint chip_addr, uint offset_len,
                 struct udevice **devp);
 
 /**
- * i2c_get_chip() - get a device to use to access a chip on a bus number
+ * i2c_get_chip_for_busnum() - get a device to use to access a chip on
+ *                            a bus number
  *
  * This returns the device for the given chip address on a particular bus
  * number.
@@ -661,6 +701,9 @@ extern struct i2c_bus_hose  i2c_bus[];
  * Initialization, must be called once on start up, may be called
  * repeatedly to change the speed and slave addresses.
  */
+#ifdef CONFIG_SYS_I2C_EARLY_INIT
+void i2c_early_init_f(void);
+#endif
 void i2c_init(int speed, int slaveaddr);
 void i2c_init_board(void);
 #ifdef CONFIG_SYS_I2C_BOARD_LATE_INIT
@@ -748,21 +791,6 @@ unsigned int i2c_set_bus_speed(unsigned int speed);
 
 unsigned int i2c_get_bus_speed(void);
 
-/*
- * i2c_reloc_fixup:
- *
- * Adjusts I2C pointers after U-Boot is relocated to DRAM
- */
-void i2c_reloc_fixup(void);
-#if defined(CONFIG_SYS_I2C_SOFT)
-void i2c_soft_init(void);
-void i2c_soft_active(void);
-void i2c_soft_tristate(void);
-int i2c_soft_read(void);
-void i2c_soft_sda(int bit);
-void i2c_soft_scl(int bit);
-void i2c_soft_delay(void);
-#endif
 #else
 
 /*
@@ -902,13 +930,6 @@ enum {
        I2C_8, I2C_9, I2C_10,
 };
 
-/* Multi I2C busses handling */
-#ifdef CONFIG_SOFT_I2C_MULTI_BUS
-extern int get_multi_scl_pin(void);
-extern int get_multi_sda_pin(void);
-extern int multi_i2c_init(void);
-#endif
-
 /**
  * Get FDT values for i2c bus.
  *