Sonde de problème lors de l'écriture d'un pilote de périphérique I2C
Je suis un débutant dans l'écriture de linux pilote de périphérique, pardonnez-moi si quelque chose de stupide un a demandé et mon pauvre anglais^^
Je suis en train d'écrire un pilote pour un écran tactile, qui communiquent avec PROCESSEUR via I2C.
J'ai essayé d'ajouter un pilote de périphérique dans la plate-forme linux, et le registre a été succès, je veux dire que le pilote a été chargé, mais la sonde de la fonction n'a pas tiré!!
Ci-dessus est partielle du code du pilote que j'ai écrit.
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);
Ci-dessus est partielle de code dans la plate-forme (/kernel/arch/arm/mach-pxa/saarb.c) utilisé pour l'enregistrement de l'i2c appareil.
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));
...
}
à toute suggestion et commentaire sera le bienvenu, merci^^
Vous devez vous connecter pour publier un commentaire.
De sorte que le périphérique linux/modèle de pilote peut sonder votre pilote, il doit y avoir un dispositif de demander: ce résultat est obtenu en comparant le nom du pilote ("i2c_ts") et le type de l'appareil dans le i2c_board_info struct. Dans votre cas, je suppose que le type n'est pas égal à "i2c_ts".
Alors je vous suggérons d'utiliser le I2C_BOARD_INFO macro pour instancier votre appareil, comme indiqué dans la Documentation/i2c/instantiating_devices.
Vous n'avait pas non plus donné d'adresse de votre appareil, et I2C_BOARD_INFO en a besoin. Lire la fiche technique de votre écran tactile pour savoir ce que cette adresse est.
Enfin, comme suggéré ci-dessus, assurez-vous que i2c_ts_id est correct. Je ne suis pas sûr qu'il joue un rôle dans l'appareil/le module d'association de mécanisme dans le noyau, mais je dirais que c'est beaucoup moins à confusion, ils partagent tous le même nom.
Méthode de la sonde ne sera appelée lorsque l'appareil correspond au nom de pilote.Comme vous l'avez mentionné le nom de votre pilote comme "i2c_ts' s'il vous plaît vérifier votre appareil arbre pour le nom de l'appareil.Les deux doivent être de même.