Raymond Yau wrote: > 2010/5/25 Clemens Ladisch <clemens@xxxxxxxxxx> > > Raymond Yau wrote: > > > I have doubt about DECLARE_TLV_DB_LINEAR(ak4396_db_scale, TLV_DB_GAIN_MUTE, 0); > > > > > > since the datasheet mention that dB range is only -48dB to 0dB > > > > > > ATT = 20 log10 (ATT_DATA / 255) [dB] > > > > > > How can AK4396 has scale of -inf DB to 0dB in the driver code ? > > > > When ATT_DATA = 0, there is no output, which is an attenuation of -inf. > > The next value, ATT_DATA = 1, results in ATT = -48 dB. > > refer to ice1712/prodigy_hifi.c , why the comment is -64dB to 0dB ? > > /* > * DAC volume attenuation mixer control (-64dB to 0dB) > */ Apparently just copied from pontis.c. > static int ak4396_dac_vol_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) > { > uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; > uinfo->count = 2; > uinfo->value.integer.min = 0; /* mute */ > uinfo->value.integer.max = 0xFF; /* linear */ > return 0; > } > ... > static const DECLARE_TLV_DB_SCALE(db_scale_wm_dac, -12700, 100, 1); And this defines a dB scale from -127 dB to +128 dB, which will break PulseAudio's volume calculations. > > This is true regardless of the precision of the multiplier. Even a one- > > bit factor behaves like this; in fact, this would describe a mute switch. > > This mean that the dB range should be calculated from the next step above > the min_dB and max_dB when min_dB regarded as a mute switch No; the AK4396 datasheet mentions -48 dB only because this is the minimum attenuation that isn't completely mute. The minimum of the ATT_DATA registers _is_ zero, i.e. -inf dB, and therefore TLV_DB_GAIN_MUTE is the correct minimum for the dB range. Regards, Clemens _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel