From: Jonathan Cameron <jic23@kernel.org>
To: Peter Meerwald <pmeerw@pmeerw.net>
Cc: linux-iio@vger.kernel.org, lars@metafoo.de
Subject: Re: [PATCH 3/8] iio: rename and prefix CONSTANTs to distinguish between HMC5843 and HMC5883
Date: Thu, 10 May 2012 13:11:56 +0100 [thread overview]
Message-ID: <4FABB08C.70409@kernel.org> (raw)
In-Reply-To: <1336515606-12364-4-git-send-email-pmeerw@pmeerw.net>
On 5/8/2012 11:20 PM, Peter Meerwald wrote:
> From: Peter Meerwald<p.meerwald@bct-electronic.com>
>
All appears sane.
> Signed-off-by: Peter Meerwald<pmeerw@pmeerw.net>
Acked-by: Jonathan Cameron <jic23@kernel.org>
> ---
> drivers/staging/iio/magnetometer/hmc5843.c | 128 +++++++++++++++------------
> 1 files changed, 71 insertions(+), 57 deletions(-)
>
> diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
> index 018d3d8..1318f7d 100644
> --- a/drivers/staging/iio/magnetometer/hmc5843.c
> +++ b/drivers/staging/iio/magnetometer/hmc5843.c
> @@ -25,8 +25,6 @@
> #include<linux/iio/iio.h>
> #include<linux/iio/sysfs.h>
>
> -#define HMC5843_I2C_ADDRESS 0x1E
> -
> #define HMC5843_CONFIG_REG_A 0x00
> #define HMC5843_CONFIG_REG_B 0x01
> #define HMC5843_MODE_REG 0x02
> @@ -36,65 +34,80 @@
> #define HMC5843_DATA_OUT_Y_LSB_REG 0x06
> #define HMC5843_DATA_OUT_Z_MSB_REG 0x07
> #define HMC5843_DATA_OUT_Z_LSB_REG 0x08
> +/* Beware: Y and Z are exchanged on HMC5883 */
> +#define HMC5883_DATA_OUT_Z_MSB_REG 0x05
> +#define HMC5883_DATA_OUT_Z_LSB_REG 0x06
> +#define HMC5883_DATA_OUT_Y_MSB_REG 0x07
> +#define HMC5883_DATA_OUT_Y_LSB_REG 0x08
> #define HMC5843_STATUS_REG 0x09
> #define HMC5843_ID_REG_A 0x0A
> #define HMC5843_ID_REG_B 0x0B
> #define HMC5843_ID_REG_C 0x0C
>
> +
> +/*
> + * Beware: identification of the HMC5883 is still "H43";
> + * I2C address is also unchanged
> + */
> #define HMC5843_ID_REG_LENGTH 0x03
> #define HMC5843_ID_STRING "H43"
> +#define HMC5843_I2C_ADDRESS 0x1E
>
> /*
> - * Range settings in (+-)Ga
> - * */
> -#define RANGE_GAIN_OFFSET 0x05
> -
> -#define RANGE_0_7 0x00
> -#define RANGE_1_0 0x01 /* default */
> -#define RANGE_1_5 0x02
> -#define RANGE_2_0 0x03
> -#define RANGE_3_2 0x04
> -#define RANGE_3_8 0x05
> -#define RANGE_4_5 0x06
> -#define RANGE_6_5 0x07 /* Not recommended */
> + * Range gain settings in (+-)Ga
> + * Beware: HMC5843 and HMC5883 have different recommended sensor field
> + * ranges; default corresponds to +-1.0 Ga and +-1.3 Ga, respectively
> + */
> +#define HMC5843_RANGE_GAIN_OFFSET 0x05
> +#define HMC5843_RANGE_GAIN_DEFAULT 0x01
> +#define HMC5843_RANGE_GAIN_MAX 0x07
>
> /*
> * Device status
> */
> -#define DATA_READY 0x01
> -#define DATA_OUTPUT_LOCK 0x02
> -#define VOLTAGE_REGULATOR_ENABLED 0x04
> +#define HMC5843_DATA_READY 0x01
> +#define HMC5843_DATA_OUTPUT_LOCK 0x02
> +/* Does not exist on HMC5883, not used */
> +#define HMC5843_VOLTAGE_REGULATOR_ENABLED 0x04
>
> /*
> * Mode register configuration
> */
> -#define MODE_CONVERSION_CONTINUOUS 0x00
> -#define MODE_CONVERSION_SINGLE 0x01
> -#define MODE_IDLE 0x02
> -#define MODE_SLEEP 0x03
> -
> -/* Minimum Data Output Rate in 1/10 Hz */
> -#define RATE_OFFSET 0x02
> -#define RATE_BITMASK 0x1C
> -#define RATE_5 0x00
> -#define RATE_10 0x01
> -#define RATE_20 0x02
> -#define RATE_50 0x03
> -#define RATE_100 0x04
> -#define RATE_200 0x05
> -#define RATE_500 0x06
> -#define RATE_NOT_USED 0x07
> +#define HMC5843_MODE_CONVERSION_CONTINUOUS 0x00
> +#define HMC5843_MODE_CONVERSION_SINGLE 0x01
> +#define HMC5843_MODE_IDLE 0x02
> +#define HMC5843_MODE_SLEEP 0x03
> +#define HMC5843_MODE_MASK 0x03
> +
> +/*
> + * HMC5843: Minimum data output rate
> + * HMC5883: Typical data output rate
> + */
> +#define HMC5843_RATE_OFFSET 0x02
> +#define HMC5843_RATE_BITMASK 0x1C
> +#define RATE_5 0x00
> +#define RATE_10 0x01
> +#define RATE_20 0x02
> +#define RATE_50 0x03
> +#define RATE_100 0x04
> +#define RATE_200 0x05
> +#define RATE_500 0x06
> +
> +#define HMC5843_RATE_NOT_USED 0x07
>
> /*
> - * Device Configuration
> + * Device measurement configuration
> */
> -#define CONF_NORMAL 0x00
> -#define CONF_POSITIVE_BIAS 0x01
> -#define CONF_NEGATIVE_BIAS 0x02
> -#define CONF_NOT_USED 0x03
> -#define MEAS_CONF_MASK 0x03
> +#define HMC5843_MEAS_CONF_NORMAL 0x00
> +#define HMC5843_MEAS_CONF_POSITIVE_BIAS 0x01
> +#define HMC5843_MEAS_CONF_NEGATIVE_BIAS 0x02
> +#define HMC5843_MEAS_CONF_NOT_USED 0x03
> +#define HMC5843_MEAS_CONF_MASK 0x03
>
> -static int hmc5843_regval_to_nanoscale[] = {
> +/*
> + * Scaling factors: 10000000/Gain
> + */
> +static const int hmc5843_regval_to_nanoscale[] = {
> 6173, 7692, 10309, 12821, 18868, 21739, 25641, 35714
> };
>
> @@ -120,7 +133,7 @@ static const char * const regval_to_samp_freq[] = {
>
> /* Addresses to scan: 0x1E */
> static const unsigned short normal_i2c[] = { HMC5843_I2C_ADDRESS,
> - I2C_CLIENT_END };
> + I2C_CLIENT_END };
>
> /* Each client has this additional data */
> struct hmc5843_data {
> @@ -139,7 +152,7 @@ static s32 hmc5843_configure(struct i2c_client *client,
> /* The lower two bits contain the current conversion mode */
> return i2c_smbus_write_byte_data(client,
> HMC5843_MODE_REG,
> - (operating_mode& 0x03));
> + operating_mode& HMC5843_MODE_MASK);
> }
>
> /* Return the measurement value from the specified channel */
> @@ -153,7 +166,7 @@ static int hmc5843_read_measurement(struct iio_dev *indio_dev,
>
> mutex_lock(&data->lock);
> result = i2c_smbus_read_byte_data(client, HMC5843_STATUS_REG);
> - while (!(result& DATA_READY))
> + while (!(result& HMC5843_DATA_READY))
> result = i2c_smbus_read_byte_data(client, HMC5843_STATUS_REG);
>
> result = i2c_smbus_read_word_data(client, address);
> @@ -208,7 +221,7 @@ static ssize_t hmc5843_set_operating_mode(struct device *dev,
> goto exit;
> }
> dev_dbg(dev, "set Conversion mode to %lu\n", operating_mode);
> - if (operating_mode> MODE_SLEEP) {
> + if (operating_mode> HMC5843_MODE_SLEEP) {
> count = -EINVAL;
> goto exit;
> }
> @@ -253,7 +266,8 @@ static s32 hmc5843_set_meas_conf(struct i2c_client *client,
> struct iio_dev *indio_dev = i2c_get_clientdata(client);
> struct hmc5843_data *data = iio_priv(indio_dev);
> u8 reg_val;
> - reg_val = (meas_conf& MEAS_CONF_MASK) | (data->rate<< RATE_OFFSET);
> + reg_val = (meas_conf& HMC5843_MEAS_CONF_MASK) |
> + (data->rate<< HMC5843_RATE_OFFSET);
> return i2c_smbus_write_byte_data(client, HMC5843_CONFIG_REG_A, reg_val);
> }
>
> @@ -319,8 +333,8 @@ static s32 hmc5843_set_rate(struct i2c_client *client,
> struct hmc5843_data *data = iio_priv(indio_dev);
> u8 reg_val;
>
> - reg_val = (data->meas_conf) | (rate<< RATE_OFFSET);
> - if (rate>= RATE_NOT_USED) {
> + reg_val = (data->meas_conf) | (rate<< HMC5843_RATE_OFFSET);
> + if (rate>= HMC5843_RATE_NOT_USED) {
> dev_err(&client->dev,
> "This data output rate is not supported\n");
> return -EINVAL;
> @@ -379,7 +393,7 @@ static ssize_t show_sampling_frequency(struct device *dev,
> rate = i2c_smbus_read_byte_data(client, this_attr->address);
> if (rate< 0)
> return rate;
> - rate = (rate& RATE_BITMASK)>> RATE_OFFSET;
> + rate = (rate& HMC5843_RATE_BITMASK)>> HMC5843_RATE_OFFSET;
> return sprintf(buf, "%s\n", regval_to_samp_freq[rate]);
> }
> static IIO_DEVICE_ATTR(sampling_frequency,
> @@ -432,13 +446,13 @@ static ssize_t set_range(struct device *dev,
> }
> dev_dbg(dev, "set range to %lu\n", range);
>
> - if (range> RANGE_6_5) {
> + if (range> HMC5843_RANGE_GAIN_MAX) {
> count = -EINVAL;
> goto exit;
> }
>
> data->range = range;
> - range = range<< RANGE_GAIN_OFFSET;
> + range = range<< HMC5843_RANGE_GAIN_OFFSET;
> if (i2c_smbus_write_byte_data(client, this_attr->address, range))
> count = -EINVAL;
>
> @@ -553,12 +567,12 @@ static int hmc5843_probe(struct i2c_client *client,
> err = -ENOMEM;
> goto exit;
> }
> - data = iio_priv(indio_dev);
> - /* default settings at probe */
>
> - data->meas_conf = CONF_NORMAL;
> - data->range = RANGE_1_0;
> - data->operating_mode = MODE_CONVERSION_CONTINUOUS;
> + /* default settings at probe */
> + data = iio_priv(indio_dev);
> + data->meas_conf = HMC5843_MEAS_CONF_NORMAL;
> + data->range = HMC5843_RANGE_GAIN_DEFAULT;
> + data->operating_mode = HMC5843_MODE_CONVERSION_CONTINUOUS;
>
> i2c_set_clientdata(client, indio_dev);
>
> @@ -587,7 +601,7 @@ static int hmc5843_remove(struct i2c_client *client)
>
> iio_device_unregister(indio_dev);
> /* sleep mode to save power */
> - hmc5843_configure(client, MODE_SLEEP);
> + hmc5843_configure(client, HMC5843_MODE_SLEEP);
> iio_device_free(indio_dev);
>
> return 0;
> @@ -596,7 +610,7 @@ static int hmc5843_remove(struct i2c_client *client)
> #ifdef CONFIG_PM_SLEEP
> static int hmc5843_suspend(struct device *dev)
> {
> - hmc5843_configure(to_i2c_client(dev), MODE_SLEEP);
> + hmc5843_configure(to_i2c_client(dev), HMC5843_MODE_SLEEP);
> return 0;
> }
>
next prev parent reply other threads:[~2012-05-10 12:11 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-08 22:19 iio: v2, add support for HMC5883/HMC5883L to HMC5843 driver Peter Meerwald
2012-05-08 22:19 ` [PATCH 1/8] iio: fix access to hmc5843 private data Peter Meerwald
2012-05-09 9:59 ` Shubhrajyoti Datta
2012-05-10 14:19 ` Shubhrajyoti Datta
2012-05-10 9:10 ` Jonathan Cameron
2012-05-10 13:18 ` Peter Meerwald
2012-05-08 22:20 ` [PATCH 2/8] iio: change strict_strtoul() to kstrtoul() in hmc5843 Peter Meerwald
2012-05-10 9:11 ` Jonathan Cameron
2012-05-08 22:20 ` [PATCH 3/8] iio: rename and prefix CONSTANTs to distinguish between HMC5843 and HMC5883 Peter Meerwald
2012-05-10 12:11 ` Jonathan Cameron [this message]
2012-05-08 22:20 ` [PATCH 4/8] iio: rework sampling rate setting in hmc5843 Peter Meerwald
2012-05-10 12:13 ` Jonathan Cameron
2012-05-08 22:20 ` [PATCH 5/8] iio: add check for measurement configuration value passed to hmc5843 Peter Meerwald
2012-05-10 12:15 ` Jonathan Cameron
2012-05-08 22:20 ` [PATCH 6/8] iio: cleanup and move comments in hmc5843 Peter Meerwald
2012-05-10 12:18 ` Jonathan Cameron
2012-05-08 22:20 ` [PATCH 7/8] iio: rename function/data to consistently start with hmc5843_ Peter Meerwald
2012-05-10 12:18 ` Jonathan Cameron
2012-05-08 22:20 ` [PATCH 8/8] iio: add support for hmc5883/hmc5883l to hmc5843 magnetometer driver Peter Meerwald
2012-05-10 12:29 ` Jonathan Cameron
2012-05-09 9:55 ` iio: v2, add support for HMC5883/HMC5883L to HMC5843 driver Shubhrajyoti Datta
2012-05-09 13:33 ` Peter Meerwald
2012-05-09 14:20 ` Jonathan Cameron
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=4FABB08C.70409@kernel.org \
--to=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
/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).