1. 18 May, 2023 20 commits
  2. 17 May, 2023 18 commits
  3. 16 May, 2023 1 commit
  4. 15 May, 2023 1 commit
    • Oswald Buddenhagen's avatar
      ALSA: emu10k1: enable bit-exact playback, part 1: DSP attenuation · 1298bc97
      Oswald Buddenhagen authored
      Fractional multiplication with the maximal value 2^31-1 causes some tiny
      distortion. Instead, we want to multiply with the full 2^31. The catch
      is of course that this cannot be represented in the DSP's signed 32 bit
      registers.
      
      One way to deal with this is to encode 1.0 as a negative number and
      special-case it. As a matter of fact, the SbLive! code path already
      contained such code, though the controls never actually exercised it.
      
      A more efficient approach is to use negative values, which actually
      extend to -2^31. Accordingly, for all the volume adjustments we now use
      the MAC1 instruction which negates the X operand.
      
      The range of the controls in highres mode is extended downwards, so -1
      is the new zero/mute. At maximal excursion, real zero is not mute any
      more, but I don't think anyone will notice this behavior change. ;-)
      
      That also required making the min/max/values in the control structs
      signed. This technically changes the user space interface, but it seems
      implausible that someone would notice - the numbers were actually
      treated as if they were signed anyway (and in the actual mixer iface
      they _are_). And without this change, the min value didn't even make
      sense in the first place (and no-one noticed, because it was always 0).
      Tested-by: default avatarJonathan Dowland <jon@dow.land>
      Signed-off-by: default avatarOswald Buddenhagen <oswald.buddenhagen@gmx.de>
      Link: https://lore.kernel.org/r/20230514170323.3408834-7-oswald.buddenhagen@gmx.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      1298bc97