On Wed, 9 Oct 2024 17:16:20 +0200 Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx> wrote: > > > This is a common pattern in this driver, we read and write two registers > > > in one run and then calculate bit offset for the channel, can you please > > > move it in to separate function. This can be done in a separate patch if > > > you like. > > > > The pattern is common but the operations are always different so I didn't > > found a clean way of doing it. > > Here is a listing of it: > > if (chan < 4) > > class = ret >> 4; > > else > > class = ret >> 12; > > > > if (chan < 4) > > val = (ret & 0xff00) | pol; > > else > > val = (ret & 0xff) | (pol << 8); > > > > if (chan < 4) > > val = (u16)(ret | BIT(chan)); > > else > > val = (u16)(ret | BIT(chan + 4)); > > > > if (chan < 4) > > mW = (ret & 0xff) * TPS23881_MW_STEP; > > else > > mW = (ret >> 8) * TPS23881_MW_STEP; > > > > > > Any idea? > > > > something like this: Oh thanks, you rock!! Indeed this should work, thanks for sorting this out. Regards, -- Köry Maincent, Bootlin Embedded Linux and kernel engineering https://bootlin.com