i2c: Add support for device alias names
[safe/jmp/linux-2.6] / include / linux / i2c.h
index 5fa7e18..89cb34d 100644 (file)
@@ -126,7 +126,7 @@ struct i2c_driver {
         * With the driver model, device enumeration is NEVER done by drivers;
         * it's done by infrastructure.  (NEW STYLE DRIVERS ONLY)
         */
-       int (*probe)(struct i2c_client *);
+       int (*probe)(struct i2c_client *, const struct i2c_device_id *);
        int (*remove)(struct i2c_client *);
 
        /* driver model interfaces that don't relate to enumeration  */
@@ -140,12 +140,10 @@ struct i2c_driver {
        int (*command)(struct i2c_client *client,unsigned int cmd, void *arg);
 
        struct device_driver driver;
-       struct list_head list;
+       const struct i2c_device_id *id_table;
 };
 #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
 
-#define I2C_NAME_SIZE  20
-
 /**
  * struct i2c_client - represent an I2C slave device
  * @flags: I2C_CLIENT_TEN indicates the device uses a ten bit chip address;
@@ -159,7 +157,7 @@ struct i2c_driver {
  * @irq: indicates the IRQ generated by this device (if any)
  * @driver_name: Identifies new-style driver used with this device; also
  *     used as the module name for hotplug/coldplug modprobe support.
- * @list: list of active/busy clients
+ * @list: list of active/busy clients (DEPRECATED)
  * @released: used to synchronize client releases & detaches and references
  *
  * An i2c_client identifies a single device (i.e. chip) connected to an
@@ -177,11 +175,13 @@ struct i2c_client {
        struct device dev;              /* the device structure         */
        int irq;                        /* irq issued by device (or -1) */
        char driver_name[KOBJ_NAME_LEN];
-       struct list_head list;
+       struct list_head list;          /* DEPRECATED */
        struct completion released;
 };
 #define to_i2c_client(d) container_of(d, struct i2c_client, dev)
 
+extern struct i2c_client *i2c_verify_client(struct device *dev);
+
 static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj)
 {
        struct device * const dev = container_of(kobj, struct device, kobj);
@@ -258,15 +258,28 @@ i2c_new_probed_device(struct i2c_adapter *adap,
                      struct i2c_board_info *info,
                      unsigned short const *addr_list);
 
+/* For devices that use several addresses, use i2c_new_dummy() to make
+ * client handles for the extra addresses.
+ */
+extern struct i2c_client *
+i2c_new_dummy(struct i2c_adapter *adap, u16 address, const char *type);
+
 extern void i2c_unregister_device(struct i2c_client *);
 
 /* Mainboard arch_initcall() code should register all its I2C devices.
  * This is done at arch_initcall time, before declaring any i2c adapters.
  * Modules for add-on boards must use other calls.
  */
+#ifdef CONFIG_I2C_BOARDINFO
 extern int
 i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n);
-
+#else
+static inline int
+i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n)
+{
+       return 0;
+}
+#endif
 
 /*
  * The following structs are for those who like to implement new bus drivers:
@@ -316,7 +329,7 @@ struct i2c_adapter {
        struct device dev;              /* the adapter device */
 
        int nr;
-       struct list_head clients;
+       struct list_head clients;       /* DEPRECATED */
        char name[48];
        struct completion dev_released;
 };
@@ -591,7 +604,7 @@ I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan "      \
                       "additionally");                                 \
 I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \
                       "scan");                                         \
-const static struct i2c_client_address_data addr_data = {              \
+static const struct i2c_client_address_data addr_data = {              \
        .normal_i2c     = normal_i2c,                                   \
        .probe          = probe,                                        \
        .ignore         = ignore,                                       \