RE: [PATCH v2 1/4] iio: dac: ad3530r: Refactor setup to table-driven register bank approach

From: Paller, Kim Seer

Date: Fri Jun 26 2026 - 04:45:22 EST


> -----Original Message-----
> From: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx>
> Sent: Monday, June 15, 2026 6:08 PM
> To: Paller, Kim Seer <KimSeer.Paller@xxxxxxxxxx>
> Cc: Jonathan Cameron <jic23@xxxxxxxxxx>; David Lechner
> <dlechner@xxxxxxxxxxxx>; Sa, Nuno <Nuno.Sa@xxxxxxxxxx>; Andy
> Shevchenko <andy@xxxxxxxxxx>; Hennerich, Michael
> <Michael.Hennerich@xxxxxxxxxx>; Rob Herring <robh@xxxxxxxxxx>; Krzysztof
> Kozlowski <krzk+dt@xxxxxxxxxx>; Conor Dooley <conor+dt@xxxxxxxxxx>; linux-
> iio@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; linux <linux@xxxxxxxxxx>;
> devicetree@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH v2 1/4] iio: dac: ad3530r: Refactor setup to table-driven
> register bank approach
>
> [External]
>
> On Mon, Jun 15, 2026 at 02:20:15PM +0800, Kim Seer Paller wrote:
> > Replace direct register calls in ad3530r_setup() with per-chip
> > register address arrays and bank helpers (ad3530r_set_reg_bank_bits,
> > ad3530r_write_reg_banks). Convert sw_ldac_trig_reg from a static
> > register address to a function pointer for per-bank LDAC trigger
> > register selection. Switch spi_device_id to named initializers.
>
> ...
>
> > +static int ad3530r_set_reg_bank_bits(const struct ad3530r_state *st,
> > + const unsigned int *regs,
> > + unsigned int num_regs,
> > + unsigned int mask)
> > +{
> > + int ret;
> > +
> > + for (unsigned int i = 0; i < num_regs; i++) {
> > + ret = regmap_update_bits(st->regmap, regs[i], mask, mask);
> > + if (ret)
> > + return ret;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +static int ad3530r_write_reg_banks(const struct ad3530r_state *st,
> > + const unsigned int *regs,
> > + unsigned int num_regs,
> > + unsigned int val)
> > +{
> > + int ret;
> > +
> > + for (unsigned int i = 0; i < num_regs; i++) {
> > + ret = regmap_write(st->regmap, regs[i], val);
> > + if (ret)
> > + return ret;
> > + }
> > +
> > + return 0;
> > +}
>
> Can the above helpers use bulk operations or regmap_multi_reg_write()?

I think bulk operations don't apply for the AD3532R case, since bank 0 is around 0x102x
and bank 1 around 0x302x two register banks, not one continuous block.
For regmap_multi_reg_write(), since all the registers get the same value, we would
have to build a reg_sequence, and it ends up being the same number of writes with
just more code. So I think the simple loop helper is better here, but happy to switch if
regmap_multi_reg_write() is the preferred form.

>
> --
> With Best Regards,
> Andy Shevchenko
>