I do have a question regarding I2C. I am using Omap3530 and access several I2C devices.
It is working but terrible slow. For a write and read back it will take around 0.5ms. Kernel is configured for 400kHz
I build a kernel driver and did there
i2cdev3=i2c_get_adapter(3); // aquire interface
and uses this routines:
.int i2cw8(struct i2c_adapter *dev,unsigned char i2cadr,unsigned char addr,unsigned char dat)
{
int ret_val;
if (down_interruptible(&mutex))
;
msg->addr=i2cadr;
msg->flags=0;
msg->len=2; //number of bytes + 1
msg->buf=data;
data[0]=addr;
data[1]=dat;
ret_val=i2c_transfer(dev,msg,1);
up(&mutex);
return 0;
}
unsigned char i2cr8(struct i2c_adapter *dev,unsigned char i2cadr,unsigned char addr)
{
unsigned char ret_val;
if (down_interruptible(&mutex))
;
msg[0].addr=i2cadr;
msg[0].flags=0;
msg[0].len=1; //just the address
msg[0].buf=data;
data[0]=addr;
msg[1].addr=i2cadr;
msg[1].flags=I2C_M_RD;
msg[1].len=1; //number of bytes
msg[1].buf=data;
i2c_transfer(dev,msg,2);
ret_val = data[0];
up(&mutex);
return ret_val;
}
Is there a better/faster way ?
Best regards
Arno