devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Ramona Bolboaca <ramona.bolboaca@analog.com>
Cc: <robh+dt@kernel.org>, <krzysztof.kozlowski+dt@linaro.org>,
	<linux-iio@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 3/3] drivers: iio: accel: Add support for ADXL359 device
Date: Sun, 6 Nov 2022 12:56:40 +0000	[thread overview]
Message-ID: <20221106125640.212471fd@jic23-huawei> (raw)
In-Reply-To: <20221031105129.47740-4-ramona.bolboaca@analog.com>

On Mon, 31 Oct 2022 12:51:29 +0200
Ramona Bolboaca <ramona.bolboaca@analog.com> wrote:

> Add support for ADXL359 device in already existing ADXL355 driver.
> 
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adxl359.pdf
> Signed-off-by: Ramona Bolboaca <ramona.bolboaca@analog.com>

A few really small things I tweaked whilst applying.

Series applied to the togreg branch of iio.git and initially pushed out as
testing for 0-day to see if it can find anything we missed.

Thanks,

Jonathan

> ---
> changes in v2:
>  - Added missing spaces in subject
>  - Added Datasheet tag in commit message
>  - Removed type field from adxl355_chip_info
>  - Added fields for acceleration scale and temperature offset in 
>    adxl355_chip_info structure
>  - Added constant data for acceleration scale and temperature offset specific
>    to each device in adxl35x_chip_info
>  - Moved scale and offset documentation to adxl35x_chip_info definition
>  - Moved device_get_match_data inside if (!chip_data) {} block
>  drivers/iio/accel/adxl355.h      | 21 +++++++-
>  drivers/iio/accel/adxl355_core.c | 85 +++++++++++++++++++++++++-------
>  drivers/iio/accel/adxl355_i2c.c  | 22 +++++++--
>  drivers/iio/accel/adxl355_spi.c  | 19 +++++--
>  4 files changed, 120 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/iio/accel/adxl355.h b/drivers/iio/accel/adxl355.h
> index 6dd49b13e4fd..3a08a1808e86 100644
> --- a/drivers/iio/accel/adxl355.h
> +++ b/drivers/iio/accel/adxl355.h
> @@ -10,12 +10,31 @@
>  
>  #include <linux/regmap.h>
>  
> +enum adxl355_device_type {
> +	ADXL355,
> +	ADXL359,
> +};
> +
> +struct adxl355_fractional_type {
> +	int integer;
> +	int decimal;
> +};
> +
>  struct device;
>  
> +struct adxl355_chip_info {
> +	const char			*name;
> +	u8				part_id;
> +	struct adxl355_fractional_type	accel_scale;
> +	struct adxl355_fractional_type	temp_offset;
> +

No blank line here.

> +};
> +
>  extern const struct regmap_access_table adxl355_readable_regs_tbl;
>  extern const struct regmap_access_table adxl355_writeable_regs_tbl;
> +extern const struct adxl355_chip_info adxl35x_chip_info[];
>  
>  int adxl355_core_probe(struct device *dev, struct regmap *regmap,
> -		       const char *name);
> +		       const struct adxl355_chip_info *chip_info);
>  
>  #endif /* _ADXL355_H_ */
> diff --git a/drivers/iio/accel/adxl355_core.c b/drivers/iio/accel/adxl355_core.c
> index dd08253d66d0..c501ad9af631 100644
> --- a/drivers/iio/accel/adxl355_core.c
> +++ b/drivers/iio/accel/adxl355_core.c
> @@ -60,6 +60,7 @@
>  #define ADXL355_DEVID_AD_VAL		0xAD
>  #define ADXL355_DEVID_MST_VAL		0x1D
>  #define ADXL355_PARTID_VAL		0xED
> +#define ADXL359_PARTID_VAL		0xE9
>  #define ADXL355_RESET_CODE		0x52
>  
>  static const struct regmap_range adxl355_read_reg_range[] = {
> @@ -83,6 +84,60 @@ const struct regmap_access_table adxl355_writeable_regs_tbl = {
>  };
>  EXPORT_SYMBOL_NS_GPL(adxl355_writeable_regs_tbl, IIO_ADXL355);
>  
> +const struct adxl355_chip_info adxl35x_chip_info[] = {
> +	[ADXL355] = {
> +		.name = "adxl355",
> +		.part_id = ADXL355_PARTID_VAL,
> +		/*
> +		 * At +/- 2g with 20-bit resolution, scale is given in datasheet
> +		 * as 3.9ug/LSB = 0.0000039 * 9.80665 = 0.00003824593 m/s^2.
> +		 */
> +		.accel_scale = {
> +			.integer = 0,
> +			.decimal = 38245,
> +		},
> +		/*
> +		 * The datasheet defines an intercept of 1885 LSB at 25 degC
> +		 * and a slope of -9.05 LSB/C. The following formula can be used
> +		 * to find the temperature:
> +		 * Temp = ((RAW - 1885)/(-9.05)) + 25 but this doesn't follow
> +		 * the format of the IIO which is Temp = (RAW + OFFSET) * SCALE.
> +		 * Hence using some rearranging we get the scale as -110.497238
> +		 * and offset as -2111.25.
> +		 */
> +		.temp_offset = {
> +			.integer =  -2111,
> +			.decimal = 250000,
> +		},
> +	},
> +	[ADXL359] = {
> +		.name = "adxl359",
> +		.part_id = ADXL359_PARTID_VAL,
> +		/*
> +		 * At +/- 10g with 20-bit resolution, scale is given in datasheet
> +		 * as 19.5ug/LSB = 0.0000195 * 9.80665 = 0.0.00019122967 m/s^2.
> +		 */
> +		.accel_scale = {
> +			.integer = 0,
> +			.decimal = 191229,
> +		},
> +		/*
> +		 * The datasheet defines an intercept of 1852 LSB at 25 degC
> +		 * and a slope of -9.05 LSB/C. The following formula can be used
> +		 * to find the temperature:
> +		 * Temp = ((RAW - 1852)/(-9.05)) + 25 but this doesn't follow
> +		 * the format of the IIO which is Temp = (RAW + OFFSET) * SCALE.
> +		 * Hence using some rearranging we get the scale as -110.497238
> +		 * and offset as -2079.25.
> +		 */
> +		.temp_offset = {
> +			.integer = -2079,
> +			.decimal = 250000,
> +		},
> +	},
> +};
> +EXPORT_SYMBOL_NS_GPL(adxl35x_chip_info, IIO_ADXL355);
> +
>  enum adxl355_op_mode {
>  	ADXL355_MEASUREMENT,
>  	ADXL355_STANDBY,
> @@ -162,6 +217,7 @@ static const struct adxl355_chan_info adxl355_chans[] = {
>  };
>  
>  struct adxl355_data {
> +	const struct adxl355_chip_info *chip_info;
>  	struct regmap *regmap;
>  	struct device *dev;
>  	struct mutex lock; /* lock to protect op_mode */
> @@ -456,33 +512,23 @@ static int adxl355_read_raw(struct iio_dev *indio_dev,
>  
>  	case IIO_CHAN_INFO_SCALE:
>  		switch (chan->type) {
> -		/*
> -		 * The datasheet defines an intercept of 1885 LSB at 25 degC
> -		 * and a slope of -9.05 LSB/C. The following formula can be used
> -		 * to find the temperature:
> -		 * Temp = ((RAW - 1885)/(-9.05)) + 25 but this doesn't follow
> -		 * the format of the IIO which is Temp = (RAW + OFFSET) * SCALE.
> -		 * Hence using some rearranging we get the scale as -110.497238
> -		 * and offset as -2111.25.
> -		 */
>  		case IIO_TEMP:
> +			/* Temperature scale is -110.497238.

Wrong comment syntax for IIO...

> +			 * See the detailed explanation in adxl35x_chip_info definition above.
> +			 */

...

> diff --git a/drivers/iio/accel/adxl355_i2c.c b/drivers/iio/accel/adxl355_i2c.c
> index f67d57921c81..6cde5ccac06b 100644
> --- a/drivers/iio/accel/adxl355_i2c.c
> +++ b/drivers/iio/accel/adxl355_i2c.c
> @@ -23,6 +23,20 @@ static const struct regmap_config adxl355_i2c_regmap_config = {
>  static int adxl355_i2c_probe(struct i2c_client *client)
>  {
>  	struct regmap *regmap;
> +	const struct adxl355_chip_info *chip_data;
> +	const struct i2c_device_id *adxl355;
> +
> +	chip_data = device_get_match_data(&client->dev);
> +	if (!chip_data) {
> +		adxl355 = to_i2c_driver(client->dev.driver)->id_table;
> +		if (!adxl355)
> +			return -EINVAL;
> +
> +		chip_data = (void *)i2c_match_id(adxl355, client)->driver_data;

Will will shortly have a nice function to wrap this up in a similar fashion to
done for spi_get_device_id()

> +
> +		if (!chip_data)
> +			return -EINVAL;
> +	}


      reply	other threads:[~2022-11-06 12:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-31 10:51 [PATCH v2 0/3] Add ADXL359 support Ramona Bolboaca
2022-10-31 10:51 ` [PATCH v2 1/3] drivers: iio: accel: Use warning if invalid device id is detected Ramona Bolboaca
2022-10-31 10:51 ` [PATCH v2 2/3] dt-bindings: iio: accel: Add docs for ADXL359 Ramona Bolboaca
2022-11-02 15:58   ` Rob Herring
2022-10-31 10:51 ` [PATCH v2 3/3] drivers: iio: accel: Add support for ADXL359 device Ramona Bolboaca
2022-11-06 12:56   ` Jonathan Cameron [this message]

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=20221106125640.212471fd@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ramona.bolboaca@analog.com \
    --cc=robh+dt@kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).