Re: [PATCH 1/2] ASoC: codecs: add support for ES8389

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Feb 26, 2025 at 06:49:48PM +0800, Zhang Yi wrote:

> --- /dev/null
> +++ b/sound/soc/codecs/es8389.c
> @@ -0,0 +1,977 @@
> +/*
> + * es8389.c  --  ES8389/ES8390 ALSA SoC Audio Codec
> + *

This is missing the SPDX header, and the whole comment block should be a
C++ as a result for consistency.

> + * Copyright (C) 2024 Everest Semiconductor Co., Ltd

2025?

> +static const char *es8389_outl_mux_txt[] = {
> +	"normal",
> +	"DAC2 channel to DAC1 channel",
> +};
> +
> +static const char *es8389_outr_mux_txt[] = {
> +	"normal",
> +	"DAC1 channel to DAC2 channel",
> +};

"Normal".

> +static const unsigned int es8389_out_mux_values[] = {
> +	0, 1
> +};

That's just a normal ENUM, it doesn't need to be a VALUE_ENUM.

> +	SOC_ENUM("PGA1 Select", es8389_pga_enum[0]),
> +	SOC_ENUM("PGA2 Select", es8389_pga_enum[1]),

Declare these as individual variables rather than using magic numbers to
index into an array, it's much more robust and legible.

> +	SOC_DOUBLE("ADC OSR Volume ON", ES8389_ADC_MUTE_REG2F, 6, 7, 1, 0),

On/off controls should end in Switch, see control-names.rst.

> +	SOC_DOUBLE("ADC OUTPUT Invert", ES8389_ADC_HPF2_REG25, 5, 6, 1, 0),

Same here.

> +	SOC_DOUBLE("DAC OUTPUT Invert", ES8389_DAC_INV_REG45, 5, 6, 1, 0),

and here.

> +	SOC_SINGLE("Mix ADCR And DACR to DACR", ES8389_DAC_MIX_REG44, 0, 1, 0),
> +	SOC_SINGLE("Mix ADCL And DACL to DACL", ES8389_DAC_MIX_REG44, 1, 1, 0),

These should be DAPM controls.

> +/* codec hifi mclk clock divider coefficients */
> +static const struct _coeff_div  coeff_div[] = {
> +	{32 ,256000 ,8000 ,0x00 ,0x57 ,0x84 ,0xD0 ,0x03 ,0xC1 ,0xB0 ,0x00 ,0x00 ,0x1F ,0x7F ,0xBF ,0xC0 ,0xFF ,0x7F ,0x01 ,0x12 ,0x00 ,0x09 ,0x19 ,0x07},

Usually we write NN, not NN ,

> +	default:
> +		break;
> +	}
> +		regmap_update_bits(es8389->regmap, ES8389_ADC_REG20, ES8389_DAIFMT_MASK, state);
> +		regmap_update_bits(es8389->regmap, ES8389_DAC_REG40, ES8389_DAIFMT_MASK, state);
> +
> +		/* clock inversion */
> +	switch (fmt & SND_SOC_DAIFMT_INV_MASK) {

Indentation here is weird.

> +static void es8389_init(struct snd_soc_component *codec)
> +{
> +	struct es8389_private *es8389 = snd_soc_component_get_drvdata(codec);
> +
> +	regmap_write(es8389->regmap, ES8389_ISO_CTL_REGF3, 0x00);
> +	regmap_write(es8389->regmap, ES8389_RESET_REG00, 0x7E);
> +	regmap_write(es8389->regmap, ES8389_ISO_CTL_REGF3, 0x38);
> +	regmap_write(es8389->regmap, ES8389_ADC_HPF1_REG24, 0x64);
> +	regmap_write(es8389->regmap, ES8389_ADC_HPF2_REG25, 0x04);
> +	regmap_write(es8389->regmap, ES8389_DAC_INV_REG45, 0x03);

What are all these magic writes doing - some of them are likely sensible
but there's an awful lot of magic numbers here and some of the register
names seem like things that people might want to configure.

> +	regmap_write(es8389->regmap, ES8389_MIC1_GAIN_REG72, 0x10);
> +	regmap_write(es8389->regmap, ES8389_MIC2_GAIN_REG73, 0x10);

These for example look very much like user controls.  In general we
stick with the silicon defaults to avoid issues with competing use caes
wanting different values.

> +	//es8389_set_bias_level(codec, SND_SOC_BIAS_STANDBY);

Just remove this if it's commented out.

> +static struct regmap_config es8389_regmap = {
> +	.reg_bits = 8,
> +	.val_bits = 8,
> +
> +	.max_register = ES8389_MAX_REGISTER,
> +
> +	.volatile_reg = es8389_volatile_register,
> +	.cache_type = REGCACHE_RBTREE,
> +};

Unless you've got a specific reason you should use _MAPLE not _RBTREE,
it's a more modern data structure and makes decisions that tend to be
better on current hardware.

> +static int es8389_i2c_probe(struct i2c_client *i2c_client)
> +{
> +	struct es8389_private *es8389;
> +	int ret = -1;
> +	//unsigned int val;

More commented code.

> +	es8389->regmap = devm_regmap_init_i2c(i2c_client, &es8389_regmap);
> +	if (IS_ERR(es8389->regmap)) {
> +		ret = PTR_ERR(es8389->regmap);
> +		dev_err(&i2c_client->dev, "regmap_init() failed: %d\n", ret);

Use dev_err_probe().

> +++ b/sound/soc/codecs/es8389.h
> @@ -0,0 +1,139 @@
> +/*
> +* ES8389.h  --  ES8389 ALSA SoC Audio Codec

Indentation is weird - the *s should be aligned.

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux