Skip to content
  1. May 26, 2023
  2. May 24, 2023
  3. May 22, 2023
  4. May 19, 2023
  5. May 17, 2023
  6. May 15, 2023
  7. May 12, 2023
    • Paweł Anikiel's avatar
      ASoC: ssm2602: Add workaround for playback distortions · f63550e2
      Paweł Anikiel authored
      Apply a workaround for what appears to be a hardware quirk.
      
      The problem seems to happen when enabling "whole chip power" (bit D7
      register R6) for the very first time after the chip receives power. If
      either "output" (D4) or "DAC" (D3) aren't powered on at that time,
      playback becomes very distorted later on.
      
      This happens on the Google Chameleon v3, as well as on a ZYBO Z7-10:
      https://ez.analog.com/audio/f/q-a/543726/solved-ssm2603-right-output-offset-issue/480229
      
      
      I suspect this happens only when using an external MCLK signal (which
      is the case for both of these boards).
      
      Here are some experiments run on a Google Chameleon v3. These were run
      in userspace using a wrapper around the i2cset utility:
      ssmset() {
              i2cset -y 0 0x1a $(($1*2)) $2
      }
      
      For each of the following sequences, we apply power to the ssm2603
      chip, set the configuration registers R0-R5 and R7-R8, run the selected
      sequence, and check for distortions on playback.
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x07 # chip, out, dac
        OK
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x87 # out, dac
        ssmset 0x06 0x07 # chip
        OK
      
        (disable MCLK)
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x1f # chip
        ssmset 0x06 0x07 # out, dac
        (enable MCLK)
        OK
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x1f # chip
        ssmset 0x06 0x07 # out, dac
        NOT OK
      
        ssmset 0x06 0x1f # chip
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x07 # out, dac
        NOT OK
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x0f # chip, out
        ssmset 0x06 0x07 # dac
        NOT OK
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x17 # chip, dac
        ssmset 0x06 0x07 # out
        NOT OK
      
      For each of the following sequences, we apply power to the ssm2603
      chip, run the selected sequence, issue a reset with R15, configure
      R0-R5 and R7-R8, run one of the NOT OK sequences from above, and check
      for distortions.
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x07 # chip, out, dac
        OK
      
        (disable MCLK)
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x07 # chip, out, dac
        (enable MCLK after reset)
        NOT OK
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x17 # chip, dac
        NOT OK
      
        ssmset 0x09 0x01 # core
        ssmset 0x06 0x0f # chip, out
        NOT OK
      
        ssmset 0x06 0x07 # chip, out, dac
        NOT OK
      
      Signed-off-by: default avatarPaweł Anikiel <pan@semihalf.com>
      Link: https://lore.kernel.org/r/20230508113037.137627-8-pan@semihalf.com
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      f63550e2
  8. May 11, 2023