I2C设备驱动分析–基于imx6下tsc2007电阻触摸屏设备驱动
1. 主要数据结构说明
1.of_device_id (include/linux/mod_devicetable.h)
/* 用来和设备树中的节点匹配 */
struct of_device_id {
char name[32];
char type[32];
char compatible[128];
const void *data;
};
2. struct device_driver (include/linux/device.h)
struct device_driver {
/* 驱动名称 */
const char *name;
/* 支持的device所依附的bus */
struct bus_type *bus;
/* 一般都是THIS_MODULE */
struct module *owner;
const char *mod_name; /* used for built-in modules */
bool suppress_bind_attrs; /* disables bind/unbind via sysfs */
/* 支持的设备列表,用于匹配设备树节点 */
const struct of_device_id *of_match_table;
const struct acpi_device_id *acpi_match_table;
int (*probe) (struct device *dev);
int (*remove) (struct device *dev);
void (*shutdown) (struct device *dev);
int (*suspend) (struct device *dev, pm_message_t state);
int (*resume) (struct device *dev);
const struct attribute_group **groups;
const struct dev_pm_ops *pm;
/* 私有数据指针 */
struct driver_private *p;
}
3. struct i2c_driver (include/linux/i2c.h)
描述了一套i2c设备驱动方法。
struct i2c_driver {
unsigned int class;
/* 依附attach_adapter函数指针 */
int (*attach_adapter)(struct i2c_adapter *) __deprecated;
/* device和driver匹配上时执行 */
int (*probe)(struct i2c_client *, const struct i2c_device_id *);
int (*remove)(struct i2c_client *);
void (*shutdown)(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;
/* 该驱动支持的设备ID列表 */
const struct i2c_device_id *id_table;
int (*detect)(struct i2c_client *, struct i2c_board_info *);
const unsigned short *