2010-08-24 17 views
0

J'ai deux caméras connectées à mon système Linux. Les caméras sont contrôlées via I2C. Le pilote de périphérique d'une seule caméra est basé sur le pilote de périphérique i2c-core. Je veux basculer entre les deux caméras. Par conséquent, je veux changer l'adresse I2C à la volée pour contrôler l'un ou l'autre appareil photo.Modification de l'adresse I2C à la volée d'un pilote de périphérique Linux

Est-ce raisonnable? Si oui, existe-t-il une fonction, qui fait cela ou est-il nécessaire de détacher et d'attacher le client avec i2c_detach_client et i2c_attach_client, respectivement?

Merci pour tout conseil, Stefan

+0

Actuellement, j'ai ajouté un ioctl qui écrase l'entrée 'addr' de la structure' client'. Ne fonctionne pas encore. Très probablement la deuxième caméra n'est pas encore correctement paramétrée ... – stefangachter

Répondre

1

Si je comprends bien votre question, vous devriez obtenir un appareil pour chaque caméra sous/dev /, pourquoi ne pas ouvrir les deux appareils au lieu d'essayer de faire quelque chose qui vous obligera à réécrire grandes parties du conducteur?

Je vous suggère de jeter un oeil à la documentation trouvée ici: http://www.mjmwired.net/kernel/Documentation/i2c (s'il vous plaît noter les différents sujets sur le côté gauche).

+0

Merci pour le commentaire. Hm, le problème est que les deux caméras partagent le bus de données. De plus, l'adresse I2C est déjà câblée dans le driver. Donc, il n'est pas possible d'ouvrir deux appareils. Pendant ce temps, mon hack fonctionne en changeant l'adresse I2C à la volée, mais ce n'est pas encore la solution "clean" que j'aimerais avoir. – stefangachter

0

La solution répertoriée dans votre commentaire devrait fonctionner. J'ai déjà écrit un pilote I2C générique avec une interface ioctl qui ne fait que définir l'entrée client-> addr et qui m'a permis de tester le bus.

Notez que les fonctions i2c_detach_client et i2c_attach_client ont été supprimées dans les noyaux les plus récents.