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: 6+ 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-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:49 ` [PATCH 4/5] ASoC: pcm179x: Add pcm1796 as compatible with pcm1792a Roman Smrž
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®