Hopefully someone knows the answer to this question about LG's volume output and gain scheme.
There's a 75 step volume control that operates in the analogue domain. Typically on most amplifiers the volume control has both attenuation and gain of the signal. But some volume controls are just attenuation-only.
What's the case with LG phones? Does volume level 75 essentially represent '0' gain and '0' attenuation? Or is the '0' level somewhere lower at level 60 for example?
I typically use my LG with an external portable amplifier. I want to avoid over-amping the signal. The phone sets itself to 'External Device' output mode. I set the volume to level 60 on the LG HiFi volume control.
I'm really just guessing here by setting my LG volume to 60 for external mode output and wish I knew how this volume control worked to avoid over-amping and also bit-loss from too much attenuation.
That is an excellent question. I am almost certain the answer is attenuation, but only almost.
I haven't seen the data sheet for the ES9218p, but to my understanding the OpAmp is an integrated part. ES9218 is a current-out DAC, so its output stage consists of an I/V converter (turning the current into voltage) as well as an amp.
Based on studies of the es9218p codec source (the driver for the DAC) I know the following:
1) The AVC (Analog Volume Control) levels are programmed into registers of the 9218p. So however the output stage is implemented, it is controlled by the DAC.
In the codec the volume steps control a combination of 25 AVC levels (from 0 to -25 dB) and 80 so-called "Master trim levels" (from 0 to -40 dB). I don't know exactly how they interact to form our 75 volume levels. I am guessing they combine analog gain control with some digital control in order to minimize loss of resolution (from digital control) while keeping the number of AVC levels more manageable. I am sure others can better interpret that.
But it is almost certain that they are attenuation from max output. See the following tables from the codec (this is for V30. V40, G7, V35 have different volume curves):
Code:
static const u32 master_trim_tbl[] = {
/* 0 db */ 0x7FFFFFFF,
/*- 0.5 db */ 0x78D6FC9D,
/*- 1 db */ 0x721482BF,
/*- 1.5 db */ 0x6BB2D603,
/*- 2 db */ 0x65AC8C2E,
/*- 2.5 db */ 0x5FFC888F,
/*- 3 db */ 0x5A9DF7AA,
/*- 3.5 db */ 0x558C4B21,
/*- 4 db */ 0x50C335D3,
/*- 4.5 db */ 0x4C3EA838,
/*- 5 db */ 0x47FACCEF,
/*- 5.5 db */ 0x43F4057E,
/*- 6 db */ 0x4026E73C,
/*- 6.5 db */ 0x3C90386F,
/*- 7 db */ 0x392CED8D,
/*- 7.5 db */ 0x35FA26A9,
/*- 8 db */ 0x32F52CFE,
/*- 8.5 db */ 0x301B70A7,
/*- 9 db */ 0x2D6A866F,
/*- 9.5 db */ 0x2AE025C2,
/*- 10 db */ 0x287A26C4,
/*- 10.5db */ 0x26368073,
/*- 11 db */ 0x241346F5,
/*- 11.5db */ 0x220EA9F3,
/*- 12 db */ 0x2026F30F,
/*- 12.5db */ 0x1E5A8471,
/*- 13 db */ 0x1CA7D767,
/*- 13.5db */ 0x1B0D7B1B,
/*- 14 db */ 0x198A1357,
/*- 14.5db */ 0x181C5761,
/*- 15 db */ 0x16C310E3,
/*- 15.5db */ 0x157D1AE1,
/*- 16 db */ 0x144960C5,
/*- 16.5db */ 0x1326DD70,
/*- 17 db */ 0x12149A5F,
/*- 17.5db */ 0x1111AEDA,
/*- 18 db */ 0x101D3F2D,
/*- 18.5db */ 0xF367BED,
/*- 19 db */ 0xE5CA14C,
/*- 19.5db */ 0xD8EF66D,
/*- 20 db */ 0xCCCCCCC,
/*- 20.5db */ 0xC157FA9,
/*- 21 db */ 0xB687379,
/*- 21.5db */ 0xAC51566,
/*- 22 db */ 0xA2ADAD1,
/*- 22.5db */ 0x99940DB,
/*- 23 db */ 0x90FCBF7,
/*- 23.5db */ 0x88E0783,
/*- 24 db */ 0x8138561,
/*- 24.5db */ 0x79FDD9F,
/*- 25 db */ 0x732AE17,
/*- 25.5db */ 0x6CB9A26,
/*- 26 db */ 0x66A4A52,
/*- 26.5db */ 0x60E6C0B,
/*- 27 db */ 0x5B7B15A,
/*- 27.5db */ 0x565D0AA,
/*- 28 db */ 0x518847F,
/*- 28.5db */ 0x4CF8B43,
/*- 29 db */ 0x48AA70B,
/*- 29.5db */ 0x4499D60,
/*- 30 db */ 0x40C3713,
/*- 30.5db */ 0x3D2400B,
/*- 31 db */ 0x39B8718,
/*- 31.5db */ 0x367DDCB,
/*- 32 db */ 0x337184E,
/*- 32.5db */ 0x3090D3E,
/*- 33 db */ 0x2DD958A,
/*- 33.5db */ 0x2B48C4F,
/*- 34 db */ 0x28DCEBB,
/*- 34.5db */ 0x2693BF0,
/*- 35 db */ 0x246B4E3,
/*- 35.5db */ 0x2261C49,
/*- 36 db */ 0x207567A,
/*- 36.5db */ 0x1EA4958,
/*- 37 db */ 0x1CEDC3C,
/*- 37.5db */ 0x1B4F7E2,
/*- 38 db */ 0x19C8651,
/*- 38.5db */ 0x18572CA,
/*- 39 db */ 0x16FA9BA,
/*- 39.5db */ 0x15B18A4,
/*- 40 db */ 0x147AE14,
};
static const u8 avc_vol_tbl[] = {
/* 0 db */ 0x40,
/*- 1 db */ 0x41,
/*- 2 db */ 0x42,
/*- 3 db */ 0x43,
/*- 4 db */ 0x44,
/*- 5 db */ 0x45,
/*- 6 db */ 0x46,
/*- 7 db */ 0x47,
/*- 8 db */ 0x48,
/*- 9 db */ 0x49,
/*- 10 db */ 0x4A,
/*- 11 db */ 0x4B,
/*- 12 db */ 0x4C,
/*- 13 db */ 0x4D,
/*- 14 db */ 0x4E,
/*- 15 db */ 0x4F,
/*- 16 db */ 0X50,
/*- 17 db */ 0X51,
/*- 18 db */ 0X52,
/*- 19 db */ 0X53,
/*- 20 db */ 0X54,
/*- 21 db */ 0X55,
/*- 22 db */ 0X56,
/*- 23 db */ 0X57,
/*- 24 db */ 0X58,
};
2) The DAC itself has TWO amplification modes (not THREE): HifiOne providing up to 1Vrms, and HifiTwo providing up to 2Vrms.
Normal mode (<50Ohm) obviously uses HifiOne (1Vrms) and High Impedance mode (>50Ohm) uses HifiTwo (2Vrms). Aux mode (>600Ohm) is implemented as HiFiOne (1Vrms) but allowing the full 1v output, whereas Normal mode is limited to less than 1Vrms through AVC.
So when using Aux mode (plugging the phone into an external amp) you will get 1Vrms at a volume setting of 75 -- as Amir found in his G7 review. And that is in principal your preferred setting for minimum noise and distortion: Volume 75 equals '0' attenuation.
Now, somewhere in this thread some of our more knowledgeable members (I believe @csglinux and @charleski, but I could remember wrong) measured distortion at max volume level (75) which dropped quite a bit when going down just one step (74). And that's why 75 is only your best setting in principal, and 72-74 may perform better.
So for your amp, assume that you will get 1 volt from the phone and set the amp's gain or sensitivity control accordingly for maximum volume -- to avoid clipping and blowing out speakers/headphones/ears.
I hope that answers your question. And I hope the answer is correct
Edit: Corrected typo in (2) above that swapped Aux and Normal mode. Obviously Normal mode is the one with limited output.
Last edited: