[PATCH v5 4/4] update tas27xx.c to support either TAS2764 or TAS2780
Amadeusz Sławiński
amadeuszx.slawinski at linux.intel.com
Wed Mar 30 19:25:22 CEST 2022
On 3/30/2022 4:45 PM, Raphael-Xu wrote:
Missing commit message in this patch and previous one. Even one sentence
explaining what you are doing and why is better then nothing.
Overall the series looks a lot better now, I still wonder if changing
coding style makes sense, but ultimately it's your code, so as long as
it patches checkpatch I will leave decision to Mark.
And there are few nitpicks, below in this patch.
> Signed-off-by: Raphael-Xu <13691752556 at 139.com>
> ---
> sound/soc/codecs/tas27xx.c | 378 ++++++++++++++++++++++++++-----------
> 1 file changed, 263 insertions(+), 115 deletions(-)
>
> diff --git a/sound/soc/codecs/tas27xx.c b/sound/soc/codecs/tas27xx.c
> index 8118429bb2f5..bb845d4797ce 100644
> --- a/sound/soc/codecs/tas27xx.c
> +++ b/sound/soc/codecs/tas27xx.c
...
> @@ -146,8 +182,9 @@ static int tas27xx_dac_event(struct snd_soc_dapm_widget *w,
> snd_soc_dapm_to_component(w->dapm);
> struct tas27xx_priv *tas27xx =
> snd_soc_component_get_drvdata(component);
> - int ret;
> + int ret = 0;
>
> + mutex_lock(&tas27xx->codec_lock);
> switch (event) {
> case SND_SOC_DAPM_POST_PMU:
> ret = snd_soc_component_update_bits(component,
> @@ -163,13 +200,16 @@ static int tas27xx_dac_event(struct snd_soc_dapm_widget *w,
> break;
> default:
> dev_err(tas27xx->dev, "Unsupported event\n");
> - return -EINVAL;
> + ret = -EINVAL;
There seems to be one tab to many here.
> }
> -
> - if (ret < 0)
> - return ret;
> -
> - return 0;
> + if (ret < 0) {
> + pr_err("%s:%u:errCode:0x%0x:PWR_CTRL error\n",
> + __func__, __LINE__, ret);
> + } else {
> + ret = 0;
> + }
> + mutex_unlock(&tas27xx->codec_lock);
> + return ret;
> }
>
> static const struct snd_kcontrol_new isense_switch =
> @@ -207,55 +247,96 @@ static const struct snd_soc_dapm_route tas27xx_audio_map[] = {
> static int tas27xx_mute(struct snd_soc_dai *dai, int mute, int direction)
> {
> struct snd_soc_component *component = dai->component;
> - int ret;
> + struct tas27xx_priv *tas27xx =
> + snd_soc_component_get_drvdata(component);
> + int ret = 0;
> +
> + mutex_lock(&tas27xx->codec_lock);
>
> + if (mute == 0) {
alternatively if (!mute), but you can leave as is
> + ret = snd_soc_component_update_bits(component,
> + TAS27XX_CLK_CFG,
> + TAS27XX_CLK_CFG_MASK,
> + TAS27XX_CLK_CFG_ENABLE);
> + if (ret < 0) {
> + dev_err(tas27xx->dev,
> + "%s:%u: Failed to CLK_CFG_ENABLE\n",
> + __func__, __LINE__);
> + goto EXIT;
> + }
> + usleep_range(2000, 2000);
> + }
> ret = snd_soc_component_update_bits(component, TAS27XX_PWR_CTRL,
> - TAS27XX_PWR_CTRL_MASK,
> - mute ? TAS27XX_PWR_CTRL_MUTE : 0);
> -
> - if (ret < 0)
> - return ret;
> + TAS27XX_PWR_CTRL_MASK,
> + mute ? TAS27XX_PWR_CTRL_MUTE : 0);
> + if (ret >= 0) {
> + tas27xx->mb_power_up = mute?false:true;
> + ret = 0;
> + }
>
> - return 0;
> + if (ret < 0) {
You could probably just use } else { here with above if.
> + pr_err("%s:%u: Failed to set powercontrol\n",
> + __func__, __LINE__);
> + }
> +EXIT:
> + mutex_unlock(&tas27xx->codec_lock);
> + return ret;
> }
>
...
>
> static const struct snd_soc_dai_ops tas27xx_dai_ops = {
> @@ -495,13 +615,13 @@ static struct snd_soc_dai_driver tas27xx_dai_driver[] = {
> },
> .capture = {
> .stream_name = "ASI1 Capture",
> - .channels_min = 0,
> + .channels_min = 1,
> .channels_max = 2,
> .rates = TAS27XX_RATES,
> .formats = TAS27XX_FORMATS,
> },
> .ops = &tas27xx_dai_ops,
> - .symmetric_rate = 1,
> + .symmetric_rates = 1,
I'm pretty sure struct snd_soc_dai_driver uses .symmetric_rate, so this
change would result in build failure?
> },
> };
>
> @@ -509,7 +629,7 @@ static int tas27xx_codec_probe(struct snd_soc_component *component)
> {
> struct tas27xx_priv *tas27xx =
> snd_soc_component_get_drvdata(component);
> - int ret;
> + int ret = 0;
>
> tas27xx->component = component;
>
...
>
> static DECLARE_TLV_DB_SCALE(tas27xx_digital_tlv, 1100, 50, 0);
> @@ -551,8 +685,10 @@ static const struct snd_kcontrol_new tas27xx_snd_controls[] = {
>
> static const struct snd_soc_component_driver soc_component_driver_tas27xx = {
> .probe = tas27xx_codec_probe,
> +#ifdef CONFIG_PM
> .suspend = tas27xx_codec_suspend,
> .resume = tas27xx_codec_resume,
> +#endif
> .set_bias_level = tas27xx_set_bias_level,
> .controls = tas27xx_snd_controls,
> .num_controls = ARRAY_SIZE(tas27xx_snd_controls),
> @@ -590,6 +726,12 @@ static const struct regmap_range_cfg tas27xx_regmap_ranges[] = {
> },
> };
>
> +static bool tas27xx_volatile(struct device *dev,
> + unsigned int reg)
> +{
> + return true;
> +}
> +
This seems bit weird, are all registers considered volatile?
> static const struct regmap_config tas27xx_i2c_regmap = {
> .reg_bits = 8,
> .val_bits = 8,
> @@ -599,6 +741,7 @@ static const struct regmap_config tas27xx_i2c_regmap = {
> .ranges = tas27xx_regmap_ranges,
> .num_ranges = ARRAY_SIZE(tas27xx_regmap_ranges),
> .max_register = 1 * 128,
> + .volatile_reg = tas27xx_volatile,
> };
>
> static int tas27xx_parse_dt(struct device *dev, struct tas27xx_priv *tas27xx)
...
More information about the Alsa-devel
mailing list