'\" t .\" Title: struct i2c_driver .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: May 2018 .\" Manual: I2C and SMBus Subsystem .\" Source: Kernel Hackers Manual 3.16.56 .\" Language: English .\" .TH "STRUCT I2C_DRIVER" "9" "May 2018" "Kernel Hackers Manual 3\&.16\&" "I2C and SMBus Subsystem" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" struct_i2c_driver \- represent an I2C device driver .SH "SYNOPSIS" .sp .nf 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; }; .fi .SH "MEMBERS" .PP class .RS 4 What kind of i2c device we instantiate (for detect) .RE .PP attach_adapter .RS 4 Callback for bus addition (deprecated) .RE .PP probe .RS 4 Callback for device binding .RE .PP remove .RS 4 Callback for device unbinding .RE .PP shutdown .RS 4 Callback for device shutdown .RE .PP suspend .RS 4 Callback for device suspend .RE .PP resume .RS 4 Callback for device resume .RE .PP alert .RS 4 Alert callback, for example for the SMBus alert protocol .RE .PP command .RS 4 Callback for bus\-wide signaling (optional) .RE .PP driver .RS 4 Device driver model driver .RE .PP id_table .RS 4 List of I2C devices supported by this driver .RE .PP detect .RS 4 Callback for device detection .RE .PP address_list .RS 4 The I2C addresses to probe (for detect) .RE .PP clients .RS 4 List of detected clients we created (for i2c\-core use only) .RE .SH "DESCRIPTION" .PP 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\&. .PP For automatic device detection, both \fIdetect\fR and \fIaddress_list\fR must be defined\&. \fIclass\fR 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\&. .PP If \fIdetect\fR is missing, the driver will still work fine for enumerated devices\&. Detected devices simply won\*(Aqt be supported\&. This is expected for the many I2C/SMBus devices which can\*(Aqt be detected reliably, and the ones which can always be enumerated in practice\&. .PP The i2c_client structure which is handed to the \fIdetect\fR 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\*(Aqt do anything else with it\&. In particular, calling dev_dbg and friends on it is not allowed\&. .SH "COPYRIGHT" .br