Sonde problem beim schreiben von einem I2C-device-Treiber
Ich bin ein Neuling im schreiben von linux device driver, verzeihen Sie mir, wenn etwas doof einen gefragt, und mein schlechtes Englisch^^
Ich bin versucht, zu schreiben, einen Treiber für ein touch-panel, das kommunizieren mit der CPU über I2C.
Ich versucht, um einen Gerätetreiber in linux-Plattform, und die Registrierung war erfolgreich, ich meine, der Treiber wurde geladen, aber der probe-Funktion nicht ausgelöst!!!!!
Oben ist teilweise code der Treiber, den ich schrieb.
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);
Oben ist teilweise code in der Plattform (/kernel/arch/arm/mach-pxa/saarb.c) verwendet für die Registrierung des i2c-Geräts.
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));
...
}
jede Anregung und Kommentar ist willkommen, danke^^
InformationsquelleAutor ChengYing | 2010-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, dass die linux-Gerät/Treiber-Modell kann die Sonde Ihre Fahrer, es muss ein Gerät anfordern: dies wird erreicht durch vergleichen der name des Treibers ("i2c_ts") und den Typ des Geräts in die i2c_board_info struct. In deinem Fall Schätze ich, dass der Typ nicht gleich "i2c_ts".
Also ich würde empfehlen, dass Sie die I2C_BOARD_INFO makro zu instanziieren Sie Ihr Gerät, wie beschrieben, in Documentation/i2c/instantiating_devices.
Hatte man auch nicht eine Adresse an Ihr Gerät, und I2C_BOARD_INFO braucht. Lesen Sie das Datenblatt für Ihre touchscreen, um zu wissen, was die Adresse ist.
Schließlich, wie oben angedeutet, sicher sein, dass i2c_ts_id korrekt ist. Ich bin nicht sicher, es spielt eine Rolle in das Gerät/Modul Verband-Mechanismus im kernel, aber ich würde sagen, es ist weit weniger verwirrend, Sie alle teilen den gleichen Namen.
InformationsquelleAutor Longfield
Sonde Methode wird nur aufgerufen werden, wenn das Gerät entspricht der name des Treibers.Wie Sie erwähnt haben, Ihre Treiber-Namen wie 'i2c_ts' bitte überprüfen Sie Ihre Geräte-Baum für den Namen des Geräts.Beide sollten identisch sein.
InformationsquelleAutor a.saurabh