[PATCH] ASoC: codecs: add support for the TI SRC4392 codec

Mark Brown broonie at kernel.org
Mon Aug 8 13:32:27 CEST 2022


On Mon, Aug 08, 2022 at 05:19:52PM +1000, Matt Flax wrote:
> The src4xxx keyword is used for	future capability to integrate
> other codecs similar to the src4392 to the same	code base.

Formating here is really weird.

> +	tristate "Texas Instruments SRC4XXX DIR/DIT and SRC codecs"
> +	help
> +		Enable support for the TI SRC4XXX family of codecs. These include the
> +		scr4392 which has digital receivers, transmitters, and
> +		a sample rate converter, including numerous ports.

Please keep this to 80 columns.

> @@ -0,0 +1,55 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Driver for SRC4XXX codecs
> + *
> + * Copyright 2021-2022 Deqx Pty Ltd
> + * Author: Natt Flax <flatmax at flatmax.com>

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

> +static const struct of_device_id src4xxx_of_match[] = {
> +	{ .compatible = "ti,src4392", },
> +	{ }
> +};
> +MODULE_DEVICE_TABLE(of, src4xxx_of_match);

This is adding a DT binding, that binding should be documented.

> +static const struct snd_kcontrol_new dit_mux_control =
> +	SOC_DAPM_ENUM("Dig. Out src", dit_mux_enum);

Please write words out fully as is idiomatic for ALSA.

> +static const char * const src_mclk_text[] = {
> +	"Master (MCLK)", "Master (RXCLKI)", "Recovered receiver clk",
> +};
> +static SOC_ENUM_SINGLE_DECL(src_mclk_enum, SRC4XXX_SCR_CTL_2D, 2,
> +	src_mclk_text);
> +static const struct snd_kcontrol_new src_mclk_control =
> +	SOC_DAPM_ENUM("SRC master clock select", src_mclk_enum);

I would normally expect this to be controlled by the machine driver -
why expose it to userspace?

> +static int src4xxx_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
> +{
> +	struct snd_soc_component *component = dai->component;
> +	struct src4xxx *src4xxx = snd_soc_component_get_drvdata(component);
> +	unsigned int ctrl;
> +
> +	dev_info(dai->dev, "__func__ enter 0x%x id=%d\n",
> +		fmt, dai->id);

This is way too noisy, in general this sort of print is redundant and it
certainly shouldn't be something like dev_info() which is often printed
to the console by default.  In general the driver should be silent in
normal operation, especially on the console.

> +	switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
> +	case SND_SOC_DAIFMT_I2S:
> +	ctrl |= SRC4XXX_BUS_I2S;
> +		break;
> +	case SND_SOC_DAIFMT_LEFT_J:
> +		ctrl |= SRC4XXX_BUS_LEFT_J;

The indentation here is weird and inconsistent...

> +	int reg = SRC4XXX_PORTA_CTL_04;
> +	int ret;
> +
> +	if (dai->id == SRC4XXX_PORTB)
> +		reg = SRC4XXX_PORTB_CTL_06;

Write a switch statement to select the register, it would be a lot
clearer.

> +		if (ret) {
> +			dev_err(component->dev,
> +		"Couldn't set the TX's div register to %d << %d = 0x%x\n",

Again really strange indentation.

> +	/* enable the BTI and TSLIP interrupts */
> +	ret = regmap_update_bits(src4xxx->regmap, SRC4XXX_SRC_DIT_IRQ_MSK_0B,
> +		SRC4XXX_SRC_BTI_EN | SRC4XXX_SRC_TSLIP_EN,
> +		SRC4XXX_SRC_BTI_EN | SRC4XXX_SRC_TSLIP_EN);
> +	if (ret < 0)
> +		dev_err(dev,
> +			"Failed to enable BTI and TSLIP interrupts : %d\n",
> +			ret);

The driver never requests an interrupt?

> +	if (ret == 0)
> +		dev_info(dev, "src4392 probe ok %d\n", ret);
> +	return ret;
> +}
> +EXPORT_SYMBOL(src4xxx_probe);

This is using _GPL() APIs from ASoC and regmap, it should be _GPL too.

> +void src4xxx_remove(struct device *dev)
> +{
> +	dev_info(dev, "__func__\n");
> +}
> +EXPORT_SYMBOL(src4xxx_remove);

This is just noise, remove the function entirely.
-------------- 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/20220808/e6df6f2b/attachment.sig>


More information about the Alsa-devel mailing list