TLV320AIC3268I Audio Codec is Not Resetting Its Registers Through Hardware Reset

Hi,

We are using tlv320aic2368I in one of our designs (Not as default audio codec). We are programming it through I2C interface.

The following registers we have written for the first time.

"Book 0 / Page 1 / Register 23: Lineout Amplifier Control 2 - 0x00 / 0x01 / 0x17 (B0_P1_R23)" with 0x09  
"Book 0 / Page 1 / Register 22: Lineout Amplifier Control 1 - 0x00 / 0x01 / 0x16 (B0_P1_R22)" with 0x03 

i.e. we have routed IN1L/AUX1L & IN1R/AUX1R to the LOL & LOR. We are able to listen audio.

But after this, we observed the following cases.

  1. we have turned off the power to the board and turned on again, we are able to listen the audio without any programming.
  2. We are applying reset, through software reset register (Book 0 / Page 0 / Register 01), still the IC is not resetting. it automatically playing the audio.

Can you share code/procedure you’re using to perform software reset?

Hi Dominic,

For the software reset i got the book, page and register details from the data sheet. And then i have used i2c_transfer() (While assigning the proper address(0x18), flag(client->flags & I2C_M_TEN) and len(04)

Register address details from the data sheet:

Book 0 / Page 0 / Register 1: Software Reset Register - 0x00 / 0x00 / 0x01 (B0_P0_R1)

Assigning book 0, page 0, reg 0x01 and value 01(Self clearing software reset):

buf1[0] = 0x00; //for book 0

buf1[1] = 0x00; //for page 0

buf1[2] = 0x01; //for register 0x01

buf1[3] = 0x01; //value 01 (Self clearing software reset) for register 0x01

I have trouble finding datasheet for tlv320aic2368I.
But it’s rather unusual for i2c transfer to look like that. Usually payload consists of register address and data to be written. Extra data is being written to consecutive registers. Please double check in the datasheet that it’s the proper way to interface with the chip.

Hi Dominic,

i have verified registers. After writing the first time, i was able to see the I2c transactions through CRO(means the address and the values which need to write). So from the i2c transactions it was clear that i have written proper values, but if i reset both S/W & HW, still audio is playing.

Please find the attached data sheet for the tlv320aic2368I codec.link text

pdf you’ve attached is for TLV320AIC3268 not TLV320AIC2368.
Anyway I think you should contact TI, since you’ve verified that i2c data coming out of Toradex module is OK.

its TLV320AIC3268 only not TLV320AIC2368. I have edited the post.
Ok thank you. I will try to contact with TI.

For TLV320AIC3268, you may have a look at the driver for some other members of that family (they have similar register arrangement):
https://elixir.bootlin.com/linux/v4.16/source/sound/soc/codecs/tlv320aic3x.c#L1511

Ther’re doing soft reset with two 2 byte i2c transfers:

snd_soc_write(codec, AIC3X_PAGE_SELECT, PAGE0_SELECT);
snd_soc_write(codec, AIC3X_RESET, SOFT_RESET);