首先当然是初始化:
添加I2C 驱动 mxt_driver
static int __init mxt_init(void) { return i2c_add_driver(&mxt_driver); } static void __exit mxt_exit(void) { i2c_del_driver(&mxt_driver); } module_init(mxt_init); module_exit(mxt_exit); /* Module information */ MODULE_AUTHOR("Joonyoung Shim <jy0922.shim@samsung.com>"); MODULE_DESCRIPTION("Atmel maXTouch Touchscreen driver"); MODULE_LICENSE("GPL");
mxt_driver 内容如下:
static struct i2c_driver mxt_driver = { .driver = { .name = "atmel_mxt_ts", .owner = THIS_MODULE, #ifdef CONFIG_PM .pm = &mxt_pm_ops, #endif }, .probe = mxt_probe, .remove = __devexit_p(mxt_remove), .id_table = mxt_id, };
- 里面主要有 mxt_probe 和mxt_id:
mxt_id 是一个i2c_device_id 的 table:
static const struct i2c_device_id mxt_id[] = { { "qt602240_ts", 0 }, { "atmel_mxt_ts", 0 }, { "mxt224", 0 }, { "mxt1386", 0 }, { } }; MODULE_DEVICE_TABLE(i2c, mxt_id);
- mxt_probe 开始探测匹配i2c设备:
static int __devinit mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) { const struct mxt_platform_data *pdata = client->dev.platform_data; struct mxt_data *data; struct input_dev *input_dev; int error;