2013-03-30 4 views
6

Je travaille sur un pilote mfd. Il y a un seul bus i2c, partagé par quatre périphériques clients i2c (sur un seul CI). L'API i2c_new_dummy est utilisée lors de la connexion d'un adaptateur à chacun des clients.Que fait un i2c_new_dummy?

Pourquoi est-il nécessaire d'avoir une logique d'adaptateur différente pour différents clients? Comment fonctionne un périphérique mfd?

Répondre

7

Comme nous le savons, le bus I2C aura 127 clients de la définition de spécification; un 7bitadresse avec 1bit pour lire/écrire.

Le premier octet est le dispositif I2Cadresse, et le dispositif correspondant à cette adresse, abaissera le bit ACK. Ensuite suit les données, la plupart du temps ce sera l'adresse d'un registre. Par conséquent, si vous avez quatre clients I2C, vous obtiendrez quatre périphériques et quatre handles client, même s'ils sont contenus dans le SOC.

Mais parfois vous n'avez pas besoin de beaucoup.

Un autre cas est le courant SOC, une puce (comme tps65910) aura beaucoup de fonctions, y compris mise sous tension, CODEC, et ainsi de suite. Chaque pilote utilisera I2C pour définir le registre. Vous ne pouvez pas demander un handle pour un pilote, c'est pourquoi il appelle i2c_new_dummy.

Commentaires à partir du noyau i2c-core.c,

/** 
* i2c_new_dummy - return a new i2c device bound to a dummy driver 
* @adapter: the adapter managing the device 
* @address: seven bit address to be used 
* Context: can sleep 
* 
* This returns an I2C client bound to the "dummy" driver, intended for use 
* with devices that consume multiple addresses. Examples of such chips 
* include various EEPROMS (like 24c04 and 24c08 models). 
* 
* These dummy devices have two main uses. First, most I2C and SMBus calls 
* except i2c_transfer() need a client handle; the dummy will be that handle. 
* And second, this prevents the specified address from being bound to a 
* different driver. 
* 
* This returns the new i2c client, which should be saved for later use with 
* i2c_unregister_device(); or NULL to indicate an error. 
*/ 
+0

+1 pour citer la documentation du noyau. –

+0

@liyaoshi: merci. très clair..! – kzs