ASoC: cs42l43: Refactor to use for_each_set_bit()

Refactor the code in cs42l43_mask_to_slots() to use for_each_set_bit().

Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://msgid.link/r/20240125103117.2622095-6-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Charles Keepax 2024-01-25 10:31:16 +00:00 committed by Mark Brown
parent 96c716887c
commit fe04d1632c
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
1 changed files with 20 additions and 15 deletions

View File

@ -6,10 +6,12 @@
// Cirrus Logic International Semiconductor Ltd.
#include <linux/bitops.h>
#include <linux/bits.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/find.h>
#include <linux/gcd.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
@ -547,23 +549,22 @@ static int cs42l43_asp_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
static void cs42l43_mask_to_slots(struct cs42l43_codec *priv, unsigned int mask, int *slots)
static void cs42l43_mask_to_slots(struct cs42l43_codec *priv, unsigned long mask,
int *slots, unsigned int nslots)
{
int i;
int i = 0;
int slot;
for (i = 0; i < CS42L43_ASP_MAX_CHANNELS; ++i) {
int slot = ffs(mask) - 1;
if (slot < 0)
for_each_set_bit(slot, &mask, BITS_PER_TYPE(mask)) {
if (i == nslots) {
dev_warn(priv->dev, "Too many channels in TDM mask: %lx\n",
mask);
return;
}
slots[i] = slot;
mask &= ~(1 << slot);
slots[i++] = slot;
}
if (mask)
dev_warn(priv->dev, "Too many channels in TDM mask\n");
}
static int cs42l43_asp_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
@ -580,8 +581,10 @@ static int cs42l43_asp_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mas
rx_mask = CS42L43_DEFAULT_SLOTS;
}
cs42l43_mask_to_slots(priv, tx_mask, priv->tx_slots);
cs42l43_mask_to_slots(priv, rx_mask, priv->rx_slots);
cs42l43_mask_to_slots(priv, tx_mask, priv->tx_slots,
ARRAY_SIZE(priv->tx_slots));
cs42l43_mask_to_slots(priv, rx_mask, priv->rx_slots,
ARRAY_SIZE(priv->rx_slots));
return 0;
}
@ -2098,8 +2101,10 @@ static int cs42l43_component_probe(struct snd_soc_component *component)
snd_soc_component_init_regmap(component, cs42l43->regmap);
cs42l43_mask_to_slots(priv, CS42L43_DEFAULT_SLOTS, priv->tx_slots);
cs42l43_mask_to_slots(priv, CS42L43_DEFAULT_SLOTS, priv->rx_slots);
cs42l43_mask_to_slots(priv, CS42L43_DEFAULT_SLOTS, priv->tx_slots,
ARRAY_SIZE(priv->tx_slots));
cs42l43_mask_to_slots(priv, CS42L43_DEFAULT_SLOTS, priv->rx_slots,
ARRAY_SIZE(priv->rx_slots));
priv->component = component;
priv->constraint = cs42l43_constraint;