TAD5112: Inserting headphone plug into jack causes outputs to be muted

Part Number: TAD5112


Hi,

Developing h/w using the TAD5112 to drive headphones.  I have the h/w working and am sending audio to a 3.5mm jack.  Sometimes when I insert the headphone plug, the audio is muted and remains muted until I "restart" the TAD5112.

Is there a register setting that can disable this "auto-mute"?

thanks

Here is my code current configuration code:

class TAD5112_DAC(object):

    def configure(self):
        self.tad5112_write(TAD5112_REG.PAGE_CFG, 0x00)  # select page 0
        self.tad5112_write(TAD5112_REG.SW_RESET, 0x01)  # s/w reset
        time.sleep(0.01) #10ms
        self.tad5112_write(TAD5112_REG.DEV_MISC_CFG, 0x09)  # exit sleep mode
        time.sleep(0.01) # 10ms - allow device to wake up
        self.tad5112_write(TAD5112_REG.PASI_CFG0, 0b00110100)  # TDM, 32bits, BCLK inverted=AKM, Cirrus

        # OUT1 - DAC is source, Pseudo differential with OUT1M as VCOM and OUT2M for external sensing
        self.tad5112_write(TAD5112_REG.OUT1X_CFG0, 0b001_101_00)  
        self.tad5112_write(TAD5112_REG.OUT1X_CFG1, 0b01_100_000) # OUT1P Headphone drive, 0dB gain.
        self.tad5112_write(TAD5112_REG.OUT1X_CFG2, 0b01_100_000) # OUT1M Headphone drive.
        # OUT2 - DAC is source, Pseudo differential with OUT2M as VCOM
        self.tad5112_write(TAD5112_REG.OUT2X_CFG0, 0b001_100_00) 
        self.tad5112_write(TAD5112_REG.OUT2X_CFG1, 0b01_100_000) # OUT2P Headphone drive, 0dB gain.
        self.tad5112_write(TAD5112_REG.OUT2X_CFG2, 0b01_100_000) # OUT2M Headphone drive.

        self.output_gain_db = -20  # default output gain in dB
        self.tad5112_write(TAD5112_REG.DAC_CH1A_CFG0, 201+self.output_gain_db*2)  # Out1 gain in 0.5dB increments)
        self.tad5112_write(TAD5112_REG.DAC_CH2A_CFG0, 201+self.output_gain_db*2)  # Out2 gain in 0.5dB increments)

        # default to TDM slots 0 and 1 for left and right
        self.tad5112_write(TAD5112_REG.PASI_RX_CH1_CFG, 0x20) # TDM slot 0 -> left
        self.tad5112_write(TAD5112_REG.PASI_RX_CH2_CFG, 0x21) # TDM slot 1 -> right

        self.tad5112_write(TAD5112_REG.CH_EN, 0b00001100)  # Enable Ch1, 2
        self.tad5112_write(TAD5112_REG.PWR_CFG, 0b01000000)  # power DAC up
        return 0 # no error
  • Hi Stephen,

    I would take a look at these lines here:

            self.output_gain_db = -20  # default output gain in dB
            self.tad5112_write(TAD5112_REG.DAC_CH1A_CFG0, 201+self.output_gain_db*2)  # Out1 gain in 0.5dB increments)
            self.tad5112_write(TAD5112_REG.DAC_CH2A_CFG0, 201+self.output_gain_db*2)  # Out2 gain in 0.5dB increments)

    It looks to me that you are setting the digital volume control to -40dB here. Is this what you mean to do? This could cause the output to sound mute, while restarting the chip would reset this to default value of 0dB. If you remove this line, do you still have this issue?

    Best,

    Garret

  • Hi Garret,

    Since the gain registers are in 0.5dB increments, then -20*2 becomes -20dB again when programmed.  -20dB is quite loud and even -40dB is audible

    I'm trying to configure my outputs as pseudo-differential:

            # OUT1 - DAC is source, Pseudo differential with OUT1M as VCOM and OUT2M for external sensing
            self.tad5112_write(TAD5112_REG.OUT1X_CFG0, 0b001_101_00)  
            self.tad5112_write(TAD5112_REG.OUT1X_CFG1, 0b01_100_000) # OUT1P Headphone drive, 0dB gain.
            self.tad5112_write(TAD5112_REG.OUT1X_CFG2, 0b01_100_000) # OUT1M Headphone drive.
            # OUT2 - DAC is source, Pseudo differential with OUT2M as VCOM
            self.tad5112_write(TAD5112_REG.OUT2X_CFG0, 0b001_100_00) 
            self.tad5112_write(TAD5112_REG.OUT2X_CFG1, 0b01_100_000) # OUT2P Headphone drive, 0dB gain.
            self.tad5112_write(TAD5112_REG.OUT2X_CFG2, 0b01_100_000) # OUT2M Headphone drive.
    

    There is some confusion as to how the OUT1x and OUT2x_CFG register's should be programmed for this configuration:

    as the datasheet says do not use b101 for OUT2x_CFG[2:0].  SO what should OUT2x_CFG[2:0] be programmed as?

    thanks

  • Hi Stephen,

    It is possible that the headset insertion during operation is triggering an interrupt. Can you read page 1, register 0x3a after this mute happens and let me know the result?

    Do you have headset detection enabled? You can read more about it in this app note: https://www.ti.com/lit/an/slaaeg7/slaaeg7.pdf

    OUT2x_CFG[2:0] can be programmed as b100 like you have it for pseudo-differential, with the minus outputs both connected to your headset ground. Make sure this is not connected to system ground as this configuration will generate a VCOM voltage at these pins that should not be shorted to ground.

    Best,

    Garret

  • Hi Garret,

    The below code seems to have solved my problem.  Thanks for your help!

            # autorecovery on DAC fault i.e temp short when headphone plug is inserted
            self.tad5112_write(TAD5112_REG.DAC_FLT_CFG0, 0b01000100)