1 pièce(s) jointe(s)
ouverture I2c en kernel space
salut !
je cherche a ecrire un driver utilisant l'i2c,
en jettant un coup d'oeil sur i2c-dev.c
j'ai pu comprendre une partie des primitives dont j'aurais besoin (i2c_master_send, i2c_spin_lock...), cela dit, un petit probleme perciste....
dans mon cas le driver ne doit faire q'un certain nombre d'initialisations en envoyant des "commandes" via le bus i2c.
je n'ai donc pas besoin d'ecrire de fonction open read etc...une fois chargé, le driver doit faire ses initialisation et c'est tout.
ce que je n'arrive pas a comprendre, c'est comment ouvrir l'i2c en kernel space...
j'ai voulu m'inspirer de:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| int i2cdev_open (struct inode *inode, struct file *file)
{
unsigned int minor = MINOR(inode->i_rdev);
struct i2c_client *client;
if ((minor >= I2CDEV_ADAPS_MAX) || ! (i2cdev_adaps[minor])) {
#ifdef DEBUG
printk(KERN_DEBUG "i2c-dev.o: Trying to open unattached adapter i2c-%d\n",
minor);
#endif
return -ENODEV;
}
/* Note that we here allocate a client for later use, but we will *not*
register this client! Yes, this is safe. No, it is not very clean. */
if(! (client = kmalloc(sizeof(struct i2c_client),GFP_KERNEL)))
return -ENOMEM;
memcpy(client,&i2cdev_client_template,sizeof(struct i2c_client));
client->adapter = i2cdev_adaps[minor];
file->private_data = client;
if (i2cdev_adaps[minor]->inc_use)
i2cdev_adaps[minor]->inc_use(i2cdev_adaps[minor]);
#ifdef DEBUG
printk(KERN_DEBUG "i2c-dev.o: opened i2c-%d\n",minor);
#endif
return 0;
} |
mais je ne voi pas trop comment...recuperer ce fameux client qui devrai correspondre a mon /dev/i2c-0 (que je dois aussi passer en argument à i2c_master_send()
quelqu'un aurai une idée ?