I2c read failed

Hello,

I’m working on i2c and I meet a problem.
I have a codec named tlv320aic3106 wired on i2c at <0x18> adress on bus 0. The driver in my Linux kernel that catch it is tlv320aic31x.c

When the driver is desactivated in the kernel, the i2cget command : “i2cget -f -y 0 0x18 0” works fine. But when It’s activated, I have an error: “Error: Read failed”:

So I tried to force i2cdump to see the contents of the registers, but I saw that:

user@pc~# i2cdump -f -y 0 0x18
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
10: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
20: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
30: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
40: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
50: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
60: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
70: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
80: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
90: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
a0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
b0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
c0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
d0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
e0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX
f0: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XXXXXXXXXXXXXXXX

Does someone already encountered this kind of problems? Do you think the driver does something specific that can explain this behaviour? Does the driver hide the registers by itself?

I have another codec MAX9860 in the same bus and even the driver is using it, the i2cdump is fine. There is no cross (XXXX).

If you have an idea, thanks.

Best reguards.

       -f     Force  access  to  the device even if it is already busy. By de‐
              fault, i2cdump will refuse to access a device which  is  already
              under the control of a kernel driver. Using this flag is danger‐
              ous, it can seriously confuse the kernel driver in question.  It
              can also cause i2cdump to return invalid results. So use at your
              own risk and only if you know what you're doing.

Yes, I know that the driver already use the component, but don’t worry, what i’m doing is not dangerous for the component, because I try to write a “0” in the register 0x00 to change the page selection to page 0. I need to force in order to bypass the driver and see the values of registers.

With other drivers and even codec drivers, I have not got this problem. So maybe the driver is doing something specific I don’t understand that makes this error.

( i2cset -f -y 0 0x18 0 0)