---
name: "struct_i2c_driver"
section: "9"
platform: "linux"
package: "linux-manual-3.16"
version: "3.16.56-1+deb8u1"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/struct_i2c_driver"
---

# struct\_i2c\_driver(9)

represent an I2C device driver

## NAME

struct\_i2c\_driver - represent an I2C device driver

## SYNOPSIS

```
struct i2c_driver {
  unsigned int class;
  int (* attach_adapter) (struct i2c_adapter *);
  int (* probe) (struct i2c_client *, const struct i2c_device_id *);
  int (* remove) (struct i2c_client *);
  void (* shutdown) (struct i2c_client *);
  int (* suspend) (struct i2c_client *, pm_message_t mesg);
  int (* resume) (struct i2c_client *);
  void (* alert) (struct i2c_client *, unsigned int data);
  int (* command) (struct i2c_client *client, unsigned int cmd, void *arg);
  struct device_driver driver;
  const struct i2c_device_id * id_table;
  int (* detect) (struct i2c_client *, struct i2c_board_info *);
  const unsigned short * address_list;
  struct list_head clients;
};
```

## MEMBERS

class

What kind of i2c device we instantiate (for detect)

attach\_adapter

Callback for bus addition (deprecated)

probe

Callback for device binding

remove

Callback for device unbinding

shutdown

Callback for device shutdown

suspend

Callback for device suspend

resume

Callback for device resume

alert

Alert callback, for example for the SMBus alert protocol

command

Callback for bus-wide signaling (optional)

driver

Device driver model driver

id\_table

List of I2C devices supported by this driver

detect

Callback for device detection

address\_list

The I2C addresses to probe (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\_list* 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.

## COPYRIGHT
