Skip to content

Commit 0e68328

Browse files
mwalleLinus Walleij
authored andcommitted
pinctrl: microchip-sgpio: use regmap_update_bits()
Convert sgpio_clrsetbits() to use regmap_update_bits() and drop the spinlocks because regmap already takes care of the locking. Signed-off-by: Michael Walle <michael@walle.cc> Link: https://lore.kernel.org/r/20220226204507.2511633-4-michael@walle.cc Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
1 parent cd8c48b commit 0e68328

1 file changed

Lines changed: 4 additions & 11 deletions

File tree

drivers/pinctrl/pinctrl-microchip-sgpio.c

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,11 @@ static void sgpio_writel(struct sgpio_priv *priv,
167167
static inline void sgpio_clrsetbits(struct sgpio_priv *priv,
168168
u32 rno, u32 off, u32 clear, u32 set)
169169
{
170-
u32 val = sgpio_readl(priv, rno, off);
171-
172-
val &= ~clear;
173-
val |= set;
170+
u32 addr = sgpio_get_addr(priv, rno, off);
171+
int ret;
174172

175-
sgpio_writel(priv, val, rno, off);
173+
ret = regmap_update_bits(priv->regs, addr, clear | set, set);
174+
WARN_ONCE(ret, "error updating sgpio reg %d\n", ret);
176175
}
177176

178177
static inline void sgpio_configure_bitstream(struct sgpio_priv *priv)
@@ -230,7 +229,6 @@ static void sgpio_output_set(struct sgpio_priv *priv,
230229
int value)
231230
{
232231
unsigned int bit = SGPIO_SRC_BITS * addr->bit;
233-
unsigned long flags;
234232
u32 clr, set;
235233

236234
switch (priv->properties->arch) {
@@ -250,9 +248,7 @@ static void sgpio_output_set(struct sgpio_priv *priv,
250248
return;
251249
}
252250

253-
spin_lock_irqsave(&priv->lock, flags);
254251
sgpio_clrsetbits(priv, REG_PORT_CONFIG, addr->port, clr, set);
255-
spin_unlock_irqrestore(&priv->lock, flags);
256252
}
257253

258254
static int sgpio_output_get(struct sgpio_priv *priv,
@@ -615,16 +611,13 @@ static void microchip_sgpio_irq_setreg(struct irq_data *data,
615611
struct sgpio_bank *bank = gpiochip_get_data(chip);
616612
unsigned int gpio = irqd_to_hwirq(data);
617613
struct sgpio_port_addr addr;
618-
unsigned long flags;
619614

620615
sgpio_pin_to_addr(bank->priv, gpio, &addr);
621616

622-
spin_lock_irqsave(&bank->priv->lock, flags);
623617
if (clear)
624618
sgpio_clrsetbits(bank->priv, reg, addr.bit, BIT(addr.port), 0);
625619
else
626620
sgpio_clrsetbits(bank->priv, reg, addr.bit, 0, BIT(addr.port));
627-
spin_unlock_irqrestore(&bank->priv->lock, flags);
628621
}
629622

630623
static void microchip_sgpio_irq_mask(struct irq_data *data)

0 commit comments

Comments
 (0)