[PATCH v2 1/5] ASoC: add mt6351 codec driver

KaiChieh Chuang kaichieh.chuang at mediatek.com
Fri Apr 20 16:49:24 PDT 2018


sorry for replying this early comment now,
i have to study on tlv first.

> > +/* dl pga gain */
> > +static const char *const dl_pga_gain[] = {
> > +	"8Db", "7Db", "6Db", "5Db", "4Db",
> > +	"3Db", "2Db", "1Db", "0Db", "-1Db",
> > +	"-2Db", "-3Db", "-4Db", "-5Db", "-6Db",
> > +	"-7Db", "-8Db", "-9Db", "-10Db", "-40Db",
> > +};
> 
> These gains should be put in TLVs rather than an enum so userspace can
> handle them (also it should be dB not Db).  You can handle irregular
> step sizes like these with DECLARE_TLV_DB_SCALE(), there's several
> examples in the code already.

We declare this enum for user space to operate on enum directly,
unlike alsa-lib, we use tinyalsa in Android, if declared in tlv,
the mixer control just become a integer control, which is not
informative for user space.

> > +static int dl_pga_get(struct snd_kcontrol *kcontrol,
> > +		      struct snd_ctl_elem_value *ucontrol)
> > +{
> > +	struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
> > +	struct mt6351_priv *priv = snd_soc_codec_get_drvdata(codec);
> > +
> > +	ucontrol->value.integer.value[0] = priv->ana_gain[kcontrol->id.device];
> > +
> > +	if (ucontrol->value.integer.value[0] == 0x1f)	/* reg idx for -40dB*/
> > +		ucontrol->value.integer.value[0] = ARRAY_SIZE(dl_pga_gain) - 1;
> 
> Why do this rewriting?

A little awkward gain register here,
the range is  for 8dB ~ -10dB and -40dB, corresponding to reg index 0 ~
18 and 31.

00000: +8dB.
00001: +7dB.
10010: -10dB
11111: -40dB(Mute).

and where 19 ~ 30 is not defined, and shouldn't be set.

i think tlv not yet support this kind of gain control?

Maybe i'll just declare 8dB ~ -10dB for now.




More information about the Linux-mediatek mailing list