[PATCH] ASoC: codecs: add support for ES8326

Mark Brown broonie at kernel.org
Tue Apr 5 16:02:15 CEST 2022


On Tue, Apr 05, 2022 at 09:12:20PM +0800, Zhu Ning wrote:

> The ES8326 codec is not compatible with ES8316 and requires a dedicated driver.

This looks mostly good - a few things below but nothing huge that should
require big restructurings or anything.

> +++ b/sound/soc/codecs/es8326.c
> @@ -0,0 +1,753 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * es8326.c -- es8326 ALSA SoC audio driver
> + * Copyright Everest Semiconductor Co., Ltd

Please make the entire comment a C++ one so things look more
intentional.

> +#include <linux/clk.h>
> +#include <linux/gpio.h>

The driver doesn't actually seem to use the GPIO APIs?

> +	/* The lock protects the situation that an irq is generated
> +	 * while the previous irq is still being processed.
> +	 */
> +	struct mutex lock;

It doesn't seem to, it seems to protect registrations and
deregistrations from racing against each other?  The actual interrupt
handling doesn't use it.

> +	SOC_SINGLE_TLV("ADC Analog PGA Gain", ES8326_PAGGAIN_23, 0, 10, 0, adc_analog_pga_tlv),

Control name should end in Volume - see control-names.rst.

> +	regmap_write(es8326->regmap, ES8326_CLK_CTL_01, ES8326_CLK_ON);
> +	/* Two channel ADC */
> +	regmap_write(es8326->regmap, ES8326_PULLUP_CTL_F9, 0x02);
> +	regmap_write(es8326->regmap, ES8326_CLK_INV_02, 0x00);
> +	regmap_write(es8326->regmap, ES8326_CLK_DIV_CPC_0C, 0x1F);
> +	regmap_write(es8326->regmap, ES8326_CLK_TRI_0E, 0x00);
> +	regmap_write(es8326->regmap, ES8326_CLK_VMIDS1_10, 0xC8);
> +	regmap_write(es8326->regmap, ES8326_CLK_VMIDS2_11, 0x88);
> +	regmap_write(es8326->regmap, ES8326_CLK_CAL_TIME_12, 0x20);
> +	regmap_write(es8326->regmap, ES8326_DAC_MUTE_14, 0x00);
> +	regmap_write(es8326->regmap, ES8326_ANA_LOWPOWER_19, 0xF0);
> +	regmap_write(es8326->regmap, ES8326_SYS_BIAS_1D, 0x08);
> +	regmap_write(es8326->regmap, ES8326_DAC2HPMIX_25, 0x22);
> +	regmap_write(es8326->regmap, ES8326_ADC_SCALE_29, 0x00);
> +	regmap_write(es8326->regmap, ES8326_ADC1_SRC_2A, es8326->mic1_src);
> +	regmap_write(es8326->regmap, ES8326_ADC2_SRC_2B, es8326->mic2_src);
> +	regmap_write(es8326->regmap, ES8326_HP_CAL_4A, 0x00);
> +	regmap_write(es8326->regmap, ES8326_DAC_DSM_4D, 0x08);
> +	regmap_write(es8326->regmap, ES8326_DAC_RAMPRATE_4E, 0x20);
> +	regmap_write(es8326->regmap, ES8326_DAC_VPPSCALE_4F, 0x15);
> +	regmap_write(es8326->regmap, ES8326_HPJACK_TIMER_56, 0x88);
> +	regmap_write(es8326->regmap, ES8326_HP_DET_57,
> +		     ES8326_HP_DET_SRC_PIN9 | es8326->jack_pol);
> +	regmap_write(es8326->regmap, ES8326_INT_SOURCE_58, 0x08);
> +	regmap_write(es8326->regmap, ES8326_INTOUT_IO_59, 0x45);
> +	regmap_write(es8326->regmap, ES8326_RESET_00, ES8326_CSM_ON);
> +	snd_soc_component_update_bits(component, ES8326_PAGGAIN_23,
> +				      ES8326_MIC_SEL_MASK, ES8326_MIC1_SEL);

This looks like some or all of it is doing routing which would normally
be configured from userspace using controls - the ADC1/2 sources and
DAC controls jump out for example.  Some of it like the pullups might
make sense fixed, or as DT properties like the jack detect polarity is
here, but not all of it.

> +#ifdef CONFIG_OF
> +static const struct i2c_device_id es8326_i2c_id[] = {
> +	{"es8326", 0 },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(i2c, es8326_i2c_id);
> +#endif

This should be unconditional, the ifdefs should be around
es8326_of_match instead.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20220405/7914f905/attachment-0001.sig>


More information about the Alsa-devel mailing list