From: "Roman Smrž" <roman@amarulasolutions.com>
To: "Martin Povišer" <povik+lin@cutebit.org>,
"Lars-Peter Clausen" <lars@metafoo.de>,
"Nuno Sá" <nuno.sa@analog.com>,
"Peter Rosin" <peda@lysator.liu.se>,
"Liam Girdwood" <lgirdwood@gmail.com>,
"Mark Brown" <broonie@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Shenghao Ding" <shenghao-ding@ti.com>,
"Kevin Lu" <kevin-lu@ti.com>, "Baojun Xu" <baojun.xu@ti.com>,
"Sen Wang" <sen@ti.com>, "Jaroslav Kysela" <perex@perex.cz>,
"Takashi Iwai" <tiwai@suse.com>
Cc: patches@opensource.cirrus.com, linux-sound@vger.kernel.org,
asahi@lists.linux.dev, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
"Roman Smrž" <roman@amarulasolutions.com>,
linux-amarula@amarulasolutions.com
Subject: [PATCH 2/5] ASoC: pcm179x: Refactor regmap value lookup
Date: Fri, 02 Oct 2026 11:49:31 +0200 [thread overview]
Message-ID: <20261002-work-v1-2-f0e53bc7331f@amarulasolutions.com> (raw)
In-Reply-To: <20261002-work-v1-0-f0e53bc7331f@amarulasolutions.com>
Use a table lookup to find values for fmt register instead of switch
statements to prepare for additional codec variants of the same family.
Signed-off-by: Roman Smrž <roman@amarulasolutions.com>
---
sound/soc/codecs/pcm179x.c | 60 +++++++++++++++++++++++-----------------------
1 file changed, 30 insertions(+), 30 deletions(-)
diff --git a/sound/soc/codecs/pcm179x.c b/sound/soc/codecs/pcm179x.c
index cb70927872aa..61b87dab3266 100644
--- a/sound/soc/codecs/pcm179x.c
+++ b/sound/soc/codecs/pcm179x.c
@@ -65,6 +65,31 @@ struct pcm179x_private {
unsigned int rate;
};
+struct pcm179x_fmt_table {
+ unsigned int fmt; /* SND_SOC_DAIFMT_* */
+ unsigned int width; /* sample width in bits */
+ unsigned int value; /* FMT[2:0] */
+};
+
+static const struct pcm179x_fmt_table pcm1792a_fmt[] = {
+ { SND_SOC_DAIFMT_RIGHT_J, 16, 0 },
+ { SND_SOC_DAIFMT_RIGHT_J, 24, 2 },
+ { SND_SOC_DAIFMT_RIGHT_J, 32, 2 },
+ { SND_SOC_DAIFMT_I2S, 16, 4 },
+ { SND_SOC_DAIFMT_I2S, 24, 5 },
+ { SND_SOC_DAIFMT_I2S, 32, 5 },
+};
+
+static int pcm179x_fmt_value(struct pcm179x_private *priv, unsigned int fmt,
+ unsigned int width)
+{
+ for (unsigned int i = 0; i < ARRAY_SIZE(pcm1792a_fmt); i++)
+ if (pcm1792a_fmt[i].fmt == fmt && pcm1792a_fmt[i].width == width)
+ return pcm1792a_fmt[i].value;
+
+ return -EINVAL;
+}
+
static int pcm179x_set_dai_fmt(struct snd_soc_dai *codec_dai,
unsigned int format)
{
@@ -96,40 +121,15 @@ static int pcm179x_hw_params(struct snd_pcm_substream *substream,
{
struct snd_soc_component *component = dai->component;
struct pcm179x_private *priv = snd_soc_component_get_drvdata(component);
- int val = 0, ret;
+ int val, ret;
priv->rate = params_rate(params);
- switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) {
- case SND_SOC_DAIFMT_RIGHT_J:
- switch (params_width(params)) {
- case 24:
- case 32:
- val = 2;
- break;
- case 16:
- val = 0;
- break;
- default:
- return -EINVAL;
- }
- break;
- case SND_SOC_DAIFMT_I2S:
- switch (params_width(params)) {
- case 24:
- case 32:
- val = 5;
- break;
- case 16:
- val = 4;
- break;
- default:
- return -EINVAL;
- }
- break;
- default:
+ val = pcm179x_fmt_value(priv, priv->format & SND_SOC_DAIFMT_FORMAT_MASK,
+ params_width(params));
+ if (val < 0) {
dev_err(component->dev, "Invalid DAI format\n");
- return -EINVAL;
+ return val;
}
val = val << PCM179X_FMT_SHIFT | PCM179X_ATLD_ENABLE;
--
2.55.0
next prev parent reply other threads:[~2026-10-02 9:49 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-02 9:49 [PATCH 0/5] ASoC: pcm179x: Add support for pcm1795 and pcm1796 Roman Smrž
2026-10-02 9:49 ` [PATCH 1/5] ASoC: dt-bindings: Add ti,pcm1795 and ti,pcm1796 Roman Smrž
2026-10-03 14:34 ` Krzysztof Kozlowski
2026-10-02 9:49 ` Roman Smrž [this message]
2026-10-02 9:49 ` [PATCH 3/5] ASoC: pcm179x: Add left-justified formats for pcm1792a Roman Smrž
2026-10-02 9:57 ` sashiko-bot
2026-10-02 9:49 ` [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a Roman Smrž
2026-10-02 9:57 ` sashiko-bot
2026-10-03 14:35 ` Krzysztof Kozlowski
2026-10-02 9:49 ` [PATCH 5/5] ASoC: pcm179x: Add support for pcm1975 Roman Smrž
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261002-work-v1-2-f0e53bc7331f@amarulasolutions.com \
--to=roman@amarulasolutions.com \
--cc=asahi@lists.linux.dev \
--cc=baojun.xu@ti.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=kevin-lu@ti.com \
--cc=krzk+dt@kernel.org \
--cc=lars@metafoo.de \
--cc=lgirdwood@gmail.com \
--cc=linux-amarula@amarulasolutions.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=patches@opensource.cirrus.com \
--cc=peda@lysator.liu.se \
--cc=perex@perex.cz \
--cc=povik+lin@cutebit.org \
--cc=robh@kernel.org \
--cc=sen@ti.com \
--cc=shenghao-ding@ti.com \
--cc=tiwai@suse.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.