Re: [PATCH] ASoC: codecs: add support for ES8326

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

 



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.

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux