I'm new to writing a linux device driver, forgive me if anything stupid is asked and my bad english ^^
I am trying to write a driver for a touchpad that communicates with a processor through I2C.
I tried to add the device driver to the linux platform, and the register was successful, I mean that the driver was loaded, but the probe function did not light up!
Above is the partial driver code that I wrote.
static int i2c_ts_probe(struct i2c_client *client, const struct i2c_device_id * id) { } static int i2c_ts_remove(struct i2c_client *client) { } static const struct i2c_device_id i2c_ts_id[] = { {"Capacitive TS", 0}, { } }; MODULE_DEVICE_TABLE(i2c, i2c_ts_id); static struct i2c_driver i2c_ts = { .id_table = i2c_ts_id, .probe = i2c_ts_probe, .remove = i1c_ts_remobe, .driver = { .name = "i2c_ts", }, }; static int __init i2c_ts_init(void) { return i2c_add_driver(&i2c_ts); } static int __init i2c_ts_exit(void) { return i2c_del_driver(&i2c_ts); } module_init(i2c_ts_init); module_exit(i2c_ts_exit);
The above is a partial platform code (/kernel/arch/arm/mach-pxa/saarb.c) used to register an i2c device.
static struct i2c_board_info i2c_board_info_ts[] = { { .type = i2c_ts, .irq = IRQ_GPIO(mfp_to_gpio(MFP_PIN_GPIO0)), }, }; static void __init saarb_init(void) { ... i2c_register_board_info(0, ARRAY_AND_SIZE(i2c_board_info_ts)); ... }
Any suggestion and comment would be welcome, thanks ^^
linux-device-driver i2c
Chengying
source share