Hi Takashi,
On Mon, Jun 5, 2017 at 6:30 PM, Takashi Sakamoto o-takashi@sakamocchi.jp wrote:
To me, the array of 'adc_pga_gain_tlv' includes invalid members as 'SNDRV_CTL_TLVT_DB_RANGE'. In your code, the array represents below table:
Linear range: dB range: coeff: mute 0 <-> 0: 0 <-> 0: 0: 0 1 <-> 1: 300 <-> 300: 0: 0 2 <-> 2: 600 <-> 600: 0: 0 3 <-> 3: 900 <-> 900: 0: 0 4 <-> 4: 1200 <-> 1200: 0: 0 5 <-> 5: 1500 <-> 1500: 0: 0 6 <-> 6: 1800 <-> 1800: 0: 0 7 <-> 7: 2100 <-> 2100: 0: 0 8 <-> 8: 2400 <-> 2400: 0: 0
Can I ask you to ensure that your hardware has jumps for current dB value against given linear value and investigate the reason that maximum value in this table has too large value (2,400) as dB representation.
Thanks for the the info here! Based on the datasheet and newer headers I have updated it to:
static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(adc_pga_gain_tlv, 0, 0, TLV_DB_SCALE_ITEM(-3500, 0, 0), 1, 1, TLV_DB_SCALE_ITEM(0, 0, 0), 2, 2, TLV_DB_SCALE_ITEM(250, 0, 0), 3, 3, TLV_DB_SCALE_ITEM(450, 0, 0), 4, 4, TLV_DB_SCALE_ITEM(700, 0, 0), 5, 5, TLV_DB_SCALE_ITEM(1000, 0, 0), 6, 6, TLV_DB_SCALE_ITEM(1300, 0, 0), 7, 7, TLV_DB_SCALE_ITEM(1600, 0, 0), 8, 8, TLV_DB_SCALE_ITEM(1800, 0, 0), 9, 9, TLV_DB_SCALE_ITEM(2100, 0, 0), 10, 10, TLV_DB_SCALE_ITEM(2400, 0, 0), );
I believe the final entry means 24dB and does not have the large value that you have interpreted. There are many other drivers using similar values like this from rt5616.c:
/* {0, +20, +24, +30, +35, +40, +44, +50, +52} dB */ static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(bst_tlv, 0, 0, TLV_DB_SCALE_ITEM(0, 0, 0), 1, 1, TLV_DB_SCALE_ITEM(2000, 0, 0), 2, 2, TLV_DB_SCALE_ITEM(2400, 0, 0), 3, 5, TLV_DB_SCALE_ITEM(3000, 500, 0), 6, 6, TLV_DB_SCALE_ITEM(4400, 0, 0), 7, 7, TLV_DB_SCALE_ITEM(5000, 0, 0), 8, 8, TLV_DB_SCALE_ITEM(5200, 0, 0), );
I'll test this change and wait for any further review comments before sending a v4. I've also noticed that hpout_vol_tlv can be corrected and simplified.
Thanks Daniel