Re: [PATCH v2 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files
When you compare the old and new versions of hmc5843_read_raw() then it appears there is a bug fix or something which hasn't been documentented in the changelog. -static int hmc5843_read_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int *val, int *val2, long mask) -{ - struct hmc5843_data *data = iio_priv(indio_dev); - int rval; - int ret; - - switch (mask) { - case IIO_CHAN_INFO_RAW: - return hmc5843_read_measurement(data, chan-scan_index, val); - case IIO_CHAN_INFO_SCALE: - ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_B, rval); - if (ret 0) - return ret; - *val = 0; - *val2 = data-variant-regval_to_nanoscale[rval HMC5843_RANGE_GAIN_OFFSET]; - return IIO_VAL_INT_PLUS_NANO; - case IIO_CHAN_INFO_SAMP_FREQ: - ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_A, rval); - if (ret 0) - return ret; - rval = HMC5843_RATE_MASK; ^ HMC5843_RATE_MASK is 0x1c. - *val = data-variant-regval_to_samp_freq[rval][0]; - *val2 = data-variant-regval_to_samp_freq[rval][1]; - return IIO_VAL_INT_PLUS_MICRO; - } - return -EINVAL; -} +static int hmc5843_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) +{ + struct hmc5843_data *data = iio_priv(indio_dev); + int rval; + int ret; + + switch (mask) { + case IIO_CHAN_INFO_RAW: + return hmc5843_read_measurement(data, chan-scan_index, val); + case IIO_CHAN_INFO_SCALE: + ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_B, rval); + if (ret 0) + return ret; + rval = HMC5843_RANGE_GAIN_OFFSET; + *val = 0; + *val2 = data-variant-regval_to_nanoscale[rval]; + return IIO_VAL_INT_PLUS_NANO; + case IIO_CHAN_INFO_SAMP_FREQ: + ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_A, rval); + if (ret 0) + return ret; + rval = HMC5843_RATE_OFFSET; HMC5843_RATE_OFFSET is 0x02. + *val = data-variant-regval_to_samp_freq[rval][0]; + *val2 = data-variant-regval_to_samp_freq[rval][1]; + return IIO_VAL_INT_PLUS_MICRO; + } + return -EINVAL; +} Ideally this patch would be a straight move and no code changes. regards, dan carpenter ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH v2 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files
On Tue, Jul 08, 2014 at 11:23:51AM +0300, Dan Carpenter wrote: When you compare the old and new versions of hmc5843_read_raw() then it appears there is a bug fix or something which hasn't been documentented in the changelog. -static int hmc5843_read_raw(struct iio_dev *indio_dev, - struct iio_chan_spec const *chan, - int *val, int *val2, long mask) -{ - struct hmc5843_data *data = iio_priv(indio_dev); - int rval; - int ret; - - switch (mask) { - case IIO_CHAN_INFO_RAW: - return hmc5843_read_measurement(data, chan-scan_index, val); - case IIO_CHAN_INFO_SCALE: - ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_B, rval); - if (ret 0) - return ret; - *val = 0; - *val2 = data-variant-regval_to_nanoscale[rval HMC5843_RANGE_GAIN_OFFSET]; - return IIO_VAL_INT_PLUS_NANO; - case IIO_CHAN_INFO_SAMP_FREQ: - ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_A, rval); - if (ret 0) - return ret; - rval = HMC5843_RATE_MASK; ^ HMC5843_RATE_MASK is 0x1c. - *val = data-variant-regval_to_samp_freq[rval][0]; - *val2 = data-variant-regval_to_samp_freq[rval][1]; - return IIO_VAL_INT_PLUS_MICRO; - } - return -EINVAL; -} +static int hmc5843_read_raw(struct iio_dev *indio_dev, + struct iio_chan_spec const *chan, + int *val, int *val2, long mask) +{ + struct hmc5843_data *data = iio_priv(indio_dev); + int rval; + int ret; + + switch (mask) { + case IIO_CHAN_INFO_RAW: + return hmc5843_read_measurement(data, chan-scan_index, val); + case IIO_CHAN_INFO_SCALE: + ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_B, rval); + if (ret 0) + return ret; + rval = HMC5843_RANGE_GAIN_OFFSET; + *val = 0; + *val2 = data-variant-regval_to_nanoscale[rval]; + return IIO_VAL_INT_PLUS_NANO; + case IIO_CHAN_INFO_SAMP_FREQ: + ret = regmap_read(data-regmap, HMC5843_CONFIG_REG_A, rval); + if (ret 0) + return ret; + rval = HMC5843_RATE_OFFSET; HMC5843_RATE_OFFSET is 0x02. + *val = data-variant-regval_to_samp_freq[rval][0]; + *val2 = data-variant-regval_to_samp_freq[rval][1]; + return IIO_VAL_INT_PLUS_MICRO; + } + return -EINVAL; +} Ideally this patch would be a straight move and no code changes. regards, dan carpenter It seems I forgot to change the first commit when I discovered this bug. I will resend fixed version within few minutes. ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v2 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files
This patch splits hmc5843.c to multiple files - the interface-agnostic hmc5843_core.c, i2c specific hmc5843_i2c.c and header file hmc5843.h. This is another step to add support of SPI-enabled hmc5983. Signed-off-by: Josef Gajdusek a...@atx.name --- drivers/staging/iio/magnetometer/Kconfig| 16 +- drivers/staging/iio/magnetometer/Makefile | 3 +- drivers/staging/iio/magnetometer/hmc5843.c | 701 drivers/staging/iio/magnetometer/hmc5843.h | 75 +++ drivers/staging/iio/magnetometer/hmc5843_core.c | 600 drivers/staging/iio/magnetometer/hmc5843_i2c.c | 106 6 files changed, 795 insertions(+), 706 deletions(-) delete mode 100644 drivers/staging/iio/magnetometer/hmc5843.c create mode 100644 drivers/staging/iio/magnetometer/hmc5843.h create mode 100644 drivers/staging/iio/magnetometer/hmc5843_core.c create mode 100644 drivers/staging/iio/magnetometer/hmc5843_i2c.c diff --git a/drivers/staging/iio/magnetometer/Kconfig b/drivers/staging/iio/magnetometer/Kconfig index ad88d61..28c2612 100644 --- a/drivers/staging/iio/magnetometer/Kconfig +++ b/drivers/staging/iio/magnetometer/Kconfig @@ -5,15 +5,23 @@ menu Magnetometer sensors config SENSORS_HMC5843 tristate Honeywell HMC5843/5883/5883L 3-Axis Magnetometer - depends on I2C + depends on (I2C || SPI_MASTER) select IIO_BUFFER select IIO_TRIGGERED_BUFFER - select REGMAP_I2C + select SENSORS_HMC5843_I2C if (I2C) help Say Y here to add support for the Honeywell HMC5843, HMC5883 and HMC5883L 3-Axis Magnetometer (digital compass). - To compile this driver as a module, choose M here: the module - will be called hmc5843. + This driver can also be compiled as a set of modules. + If so, these modules will be created: + - hmc5843_core (core functions) + - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L) + +config SENSORS_HMC5843_I2C + tristate + depends on I2C + depends on SENSORS_HMC5843 + select REGMAP_I2C endmenu diff --git a/drivers/staging/iio/magnetometer/Makefile b/drivers/staging/iio/magnetometer/Makefile index f9bfb2e..65baf1c 100644 --- a/drivers/staging/iio/magnetometer/Makefile +++ b/drivers/staging/iio/magnetometer/Makefile @@ -2,4 +2,5 @@ # Makefile for industrial I/O Magnetometer sensors # -obj-$(CONFIG_SENSORS_HMC5843) += hmc5843.o +obj-$(CONFIG_SENSORS_HMC5843) += hmc5843_core.o +obj-$(CONFIG_SENSORS_HMC5843_I2C) += hmc5843_i2c.o diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c deleted file mode 100644 index 1a48799..000 --- a/drivers/staging/iio/magnetometer/hmc5843.c +++ /dev/null @@ -1,701 +0,0 @@ -/* Copyright (C) 2010 Texas Instruments -Author: Shubhrajyoti Datta shubhrajy...@ti.com -Acknowledgement: Jonathan Cameron ji...@kernel.org for valuable inputs. - -Support for HMC5883 and HMC5883L by Peter Meerwald pme...@pmeerw.net. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include linux/module.h -#include linux/i2c.h -#include linux/regmap.h -#include linux/iio/iio.h -#include linux/iio/sysfs.h -#include linux/iio/trigger_consumer.h -#include linux/iio/buffer.h -#include linux/iio/triggered_buffer.h -#include linux/delay.h - -#define HMC5843_CONFIG_REG_A 0x00 -#define HMC5843_CONFIG_REG_B 0x01 -#define HMC5843_MODE_REG 0x02 -#define HMC5843_DATA_OUT_MSB_REGS 0x03 -#define HMC5843_STATUS_REG 0x09 -#define HMC5843_ID_REG 0x0a -#define HMC5843_ID_END 0x0c - -enum hmc5843_ids { - HMC5843_ID, - HMC5883_ID, - HMC5883L_ID, -}; - -/* - * 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_GAINS8 -#define HMC5843_RANGE_GAIN_MASK0xe0 - -/* Device status */ -#define HMC5843_DATA_READY 0x01 -#define