From: Jonathan Cameron <jic23@kernel.org>
To: Carlos Song <carlos.song@nxp.com>
Cc: "lars@metafoo.de" <lars@metafoo.de>,
"rjones@gateworks.com" <rjones@gateworks.com>,
"Jonathan.Cameron@huawei.com" <Jonathan.Cameron@huawei.com>,
Bough Chen <haibo.chen@nxp.com>, dl-linux-imx <linux-imx@nxp.com>,
"linux-iio@vger.kernel.org" <linux-iio@vger.kernel.org>
Subject: Re: [EXT] Re: [PATCH v4 2/4] iio: imu: fxos8700: fix failed initialization ODR mode assignment
Date: Sat, 14 Jan 2023 17:35:43 +0000 [thread overview]
Message-ID: <20230114173543.2be0818e@jic23-huawei> (raw)
In-Reply-To: <VI1PR04MB50057136A46A6FA64DBDDC5CE8FF9@VI1PR04MB5005.eurprd04.prod.outlook.com>
On Tue, 10 Jan 2023 07:44:23 +0000
Carlos Song <carlos.song@nxp.com> wrote:
> > -----Original Message-----
> > From: Jonathan Cameron <jic23@kernel.org>
> > Sent: Saturday, December 31, 2022 10:55 PM
> > To: Carlos Song <carlos.song@nxp.com>
> > Cc: lars@metafoo.de; rjones@gateworks.com;
> > Jonathan.Cameron@huawei.com; Bough Chen <haibo.chen@nxp.com>;
> > dl-linux-imx <linux-imx@nxp.com>; linux-iio@vger.kernel.org
> > Subject: [EXT] Re: [PATCH v4 2/4] iio: imu: fxos8700: fix failed initialization
> > ODR mode assignment
> >
> > Caution: EXT Email
> >
> > On Wed, 28 Dec 2022 17:39:39 +0800
> > carlos.song@nxp.com wrote:
> >
> > > From: Carlos Song <carlos.song@nxp.com>
> > >
> > > The absence of correct offset leads a failed initialization ODR mode
> > > assignment.
> > >
> > > Select MAX ODR mode as the initialization ODR mode by field mask and
> > > FIELD_PREP.
> > >
> > > Fixes: 84e5ddd5c46e ("iio: imu: Add support for the FXOS8700 IMU")
> > > Signed-off-by: Carlos Song <carlos.song@nxp.com>
> > > ---
> > > Changes for V4:
> > > - None
> > > Changes for V3:
> > > - Legal use of FIELD_PREP() and field mask to select initialization
> > > ODR mode
> > > - Rework commit log
> > > ---
> > > drivers/iio/imu/fxos8700_core.c | 8 ++++++--
> > > 1 file changed, 6 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/iio/imu/fxos8700_core.c
> > > b/drivers/iio/imu/fxos8700_core.c index a1af5d0fde5d..de4ced979226
> > > 100644
> > > --- a/drivers/iio/imu/fxos8700_core.c
> > > +++ b/drivers/iio/imu/fxos8700_core.c
> > > @@ -611,6 +611,7 @@ static const struct iio_info fxos8700_info = {
> > > static int fxos8700_chip_init(struct fxos8700_data *data, bool
> > > use_spi) {
> > > int ret;
> > > + int reg;
> > > unsigned int val;
> > > struct device *dev = regmap_get_device(data->regmap);
> > >
> > > @@ -663,8 +664,11 @@ static int fxos8700_chip_init(struct fxos8700_data
> > *data, bool use_spi)
> > > return ret;
> > >
> > > /* Max ODR (800Hz individual or 400Hz hybrid), active mode */
> > > - return regmap_write(data->regmap, FXOS8700_CTRL_REG1,
> > > - FXOS8700_CTRL_ODR_MAX |
> > FXOS8700_ACTIVE);
> > > + ret = regmap_read(data->regmap, FXOS8700_CTRL_REG1, ®);
> > > + if (ret)
> > > + return ret;
> > > + reg = reg | FIELD_PREP(FXOS8700_CTRL_ODR_MSK,
> > > + FXOS8700_CTRL_ODR_MAX) | FXOS8700_ACTIVE;
> > reg |= will work here. However, like in previous patch I'd expect to see the
> > _CTRL_ODR_MSK used in
> > reg &= ~FXOS8700_CTRL_ODR_MASK;
> > reg |= FIELD_PREP(FXOS8700_CTRL_ODR_MSK,
> > FXOS8700_CTRL_ODR_MAX) | FXOS8700_ACTIVE;
> >
> > This is a good place to use regmap_update_bits() as there is no need to see
> > what the previous values were (unlike in previous patch).
> >
> > > + return regmap_write(data->regmap, FXOS8700_CTRL_REG1, reg);
> > > }
> > >
> > > static void fxos8700_chip_uninit(void *data)
>
> This is a good place to use regmap_update_bits(), because I don't need using the regmap_read to
> get the value and perform bit operations:
> @@ -666,8 +666,10 @@ static int fxos8700_chip_init(struct fxos8700_data *data, bool use_spi)
> return ret;
>
> /* Max ODR (800Hz individual or 400Hz hybrid), active mode */
> - return regmap_write(data->regmap, FXOS8700_CTRL_REG1,
> - FXOS8700_CTRL_ODR_MAX | FXOS8700_ACTIVE);
> + return regmap_update_bits(data->regmap, FXOS8700_CTRL_REG1,
> + FXOS8700_CTRL_ODR_MSK + FXOS8700_ACTIVE,
> + FIELD_PREP(FXOS8700_CTRL_ODR_MSK, FXOS8700_CTRL_ODR_MAX) |
> + FXOS8700_ACTIVE);
> }
>
>
> static void fxos8700_chip_uninit(void *data)
>
> Here I also faced a difficult decision:
> most code block of the entire driver code uses regmap_read and regmap_write to modify registers,
> only my two patches use regmap_update_bits. I admit that this is indeed a good place to
> use regmap_update_bits, but do I need to consider the uniformity of the entire driver code
> style when proposing a patch? When using regmap_read and regmap_write, although the
> patch is a bit lengthy and jumbled, it is very uniform in terms of the overall code style.
> Like this:
>
> @@ -663,8 +664,11 @@ static int fxos8700_chip_init(struct fxos8700_data *data, bool use_spi)
> return ret;
>
> /* Max ODR (800Hz individual or 400Hz hybrid), active mode */
> - return regmap_write(data->regmap, FXOS8700_CTRL_REG1,
> - FXOS8700_CTRL_ODR_MAX | FXOS8700_ACTIVE);
> + ret = regmap_read(data->regmap, FXOS8700_CTRL_REG1, ®);
> + if (ret)
> + return ret;
> + reg &= ~FXOS8700_CTRL_ODR_MASK;
> + reg |= FIELD_PREP(FXOS8700_CTRL_ODR_MSK, FXOS8700_CTRL_ODR_MAX) |
> + FXOS8700_ACTIVE;
> + return regmap_write(data->regmap, FXOS8700_CTRL_REG1, reg);
> }
>
> static void fxos8700_chip_uninit(void *data)
>
> How should I weigh them?
If code is simpler / more readable with regmap_update_bits() then that is the better
option. If there are other places in the driver where it is appropriate to change
to this function then it would be great to make that improvement as well (I haven't
looked!)
Jonathan
next prev parent reply other threads:[~2023-01-14 17:22 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-28 9:39 [PATCH v4 0/4] iio: imu: fxos8700: fix bugs about ODR and changes for a good readability carlos.song
2022-12-28 9:39 ` [PATCH v4 1/4] iio: imu: fxos8700: fix incorrect ODR mode readback carlos.song
2022-12-31 14:51 ` Jonathan Cameron
2023-01-10 7:44 ` [EXT] " Carlos Song
2023-01-14 17:34 ` Jonathan Cameron
2022-12-28 9:39 ` [PATCH v4 2/4] iio: imu: fxos8700: fix failed initialization ODR mode assignment carlos.song
2022-12-31 14:54 ` Jonathan Cameron
2023-01-10 7:44 ` [EXT] " Carlos Song
2023-01-14 17:35 ` Jonathan Cameron [this message]
2022-12-28 9:39 ` [PATCH v4 3/4] iio: imu: fxos8700: remove definition FXOS8700_CTRL_ODR_MIN carlos.song
2022-12-28 9:39 ` [PATCH v4 4/4] iio: imu: fxos8700: fix MAGN sensor scale and unit carlos.song
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230114173543.2be0818e@jic23-huawei \
--to=jic23@kernel.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=carlos.song@nxp.com \
--cc=haibo.chen@nxp.com \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=rjones@gateworks.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox