On Fri, Nov 08, 2024 at 11:34:09AM +0200, Tomi Valkeinen wrote:
> On 10/10/2024 17:04, Andy Shevchenko wrote:
> > On Fri, Oct 04, 2024 at 05:46:43PM +0300, Tomi Valkeinen wrote:
> > > Add error handling to ub913_hw_init() using a new helper function,
> > > ub913_update_bits().
...
> > > + ret = ub913_update_bits(priv, UB913_REG_GENERAL_CFG,
> > > + UB913_REG_GENERAL_CFG_PCLK_RISING,
> > > + priv->pclk_polarity_rising ?
> > > + UB913_REG_GENERAL_CFG_PCLK_RISING :
> > > + 0);
> >
> > So, you can use regmap_set_bits() / regmap_clear_bits() instead of this
> > ternary. It also gives one parameter less to the regmap calls.
>
> True... But is it better?
In my opinion yes, because it's clearer on what's going on.
It has no (semi-)hidden choice, so code wise it most likely
will be the same at the end. So we are speaking only about
C-level of readability.
> if (priv->pclk_polarity_rising)
> ret = regmap_set_bits(priv->regmap, UB913_REG_GENERAL_CFG,
> UB913_REG_GENERAL_CFG_PCLK_RISING);
> else
> ret = regmap_clear_bits(priv->regmap, UB913_REG_GENERAL_CFG,
> UB913_REG_GENERAL_CFG_PCLK_RISING);
>
> The call itself is more readable there, but then again, as we're setting the
> value of a bit, I dislike having if/else with two calls for a single
> assignment.
FTR, there was an attempt to add _assign() in similar way how it's done with
bitops (set/clear/assign) to regmap, but had been rejected by Mark. I don't
remember detail why, though.
> Using FIELD_PREP is perhaps a bit better than the ternary:
>
> ret = ub913_update_bits(priv, UB913_REG_GENERAL_CFG,
> UB913_REG_GENERAL_CFG_PCLK_RISING,
> FIELD_PREP(UB913_REG_GENERAL_CFG_PCLK_RISING,
> priv->pclk_polarity_rising));
>
> I think I'd like best a function to set/clear a bitmask with a boolean:
>
> ret = regmap_toggle_bits(priv->regmap, UB913_REG_GENERAL_CFG,
> UB913_REG_GENERAL_CFG_PCLK_RISING,
> priv->pclk_polarity_rising);
>
> For now, I think I'll go with the FIELD_PREP() version. It's perhaps a bit
> better than the ternary.
Okay.
--
With Best Regards,
Andy Shevchenko