Name

struct i2c_driver — represent an I2C device driver

Synopsis

struct i2c_driver {
  unsigned int class;
  int (* detect) (struct i2c_client *, int kind, struct i2c_board_info *);
  const struct i2c_client_address_data * address_data;
  struct list_head clients;
};  

Members

class

What kind of i2c device we instantiate (for detect)

detect

Callback for device detection

address_data

The I2C addresses to probe, ignore or force (for detect)

clients

List of detected clients we created (for i2c-core use only)

Description

The driver.owner field should be set to the module owner of this driver. The driver.name field should be set to the name of this driver.

For automatic device detection, both detect and address_data must be defined. class should also be set, otherwise only devices forced with module parameters will be created. The detect function must fill at least the name field of the i2c_board_info structure it is handed upon successful detection, and possibly also the flags field.

If detect is missing, the driver will still work fine for enumerated devices. Detected devices simply won't be supported. This is expected for the many I2C/SMBus devices which can't be detected reliably, and the ones which can always be enumerated in practice.

The i2c_client structure which is handed to the detect callback is not a real i2c_client. It is initialized just enough so that you can call i2c_smbus_read_byte_data and friends on it. Don't do anything else with it. In particular, calling dev_dbg and friends on it is not allowed.