Hi Benoit, On Thu, Jun 18, 2020 at 08:29:55AM -0500, Benoit Parrot wrote: > Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> wrote on Mon [2020-Jun-15 02:58:05 +0300]: > > Turn the reg_(read|write)_field() macros into inline functions for > > additional type safety. Use the FIELD_GET() and FIELD_PREP() macros > > internally instead of reinventing the wheel. > > > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > > --- > > drivers/media/platform/ti-vpe/cal.c | 28 ++++++++++++++++------------ > > 1 file changed, 16 insertions(+), 12 deletions(-) > > > > diff --git a/drivers/media/platform/ti-vpe/cal.c b/drivers/media/platform/ti-vpe/cal.c > > index fa86a53882cc..8c068af936f0 100644 > > --- a/drivers/media/platform/ti-vpe/cal.c > > +++ b/drivers/media/platform/ti-vpe/cal.c > > @@ -6,6 +6,7 @@ > > * Benoit Parrot, <bparrot@xxxxxx> > > */ > > > > +#include <linux/bitfield.h> > > #include <linux/clk.h> > > #include <linux/delay.h> > > #include <linux/interrupt.h> > > @@ -76,13 +77,6 @@ static const struct v4l2_fract > > #define reg_read(dev, offset) ioread32(dev->base + offset) > > #define reg_write(dev, offset, val) iowrite32(val, dev->base + offset) > > > > -#define reg_read_field(dev, offset, mask) get_field(reg_read(dev, offset), \ > > - mask) > > -#define reg_write_field(dev, offset, field, mask) { \ > > - u32 val = reg_read(dev, offset); \ > > - set_field(&val, field, mask); \ > > - reg_write(dev, offset, val); } > > - > > /* ------------------------------------------------------------------ > > * Basic structures > > * ------------------------------------------------------------------ > > @@ -418,6 +412,21 @@ struct cal_ctx { > > bool dma_act; > > }; > > > > +static inline u32 reg_read_field(struct cal_dev *dev, u32 offset, u32 mask) > > +{ > > + return FIELD_GET(mask, reg_read(dev, offset)); > > +} > > + > > +static inline void reg_write_field(struct cal_dev *dev, u32 offset, u32 value, > > + u32 mask) > > +{ > > + u32 val = reg_read(dev, offset); > > + > > + val &= ~mask; > > + val |= FIELD_PREP(mask, value); > > + reg_write(dev, offset, val); > > +} > > + > > static const struct cal_fmt *find_format_by_pix(struct cal_ctx *ctx, > > u32 pixelformat) > > { > > @@ -453,11 +462,6 @@ static inline struct cal_ctx *notifier_to_ctx(struct v4l2_async_notifier *n) > > return container_of(n, struct cal_ctx, notifier); > > } > > > > -static inline int get_field(u32 value, u32 mask) > > -{ > > - return (value & mask) >> __ffs(mask); > > -} > > - > > static inline void set_field(u32 *valp, u32 field, u32 mask) > > { > > u32 val = *valp; > > Is set_field still in use then after this patch? > Any reason to keep it around? Yes, it's still used in a quite few functions. I'm considering addressing that on top, several (but not all) use caes are in functions that perform read-modify-write updates when they could just write the whole register. -- Regards, Laurent Pinchart