Re: [PATCH v2 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files

2014-07-08 Thread Dan Carpenter
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

2014-07-08 Thread Josef Gajdusek
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

2014-07-07 Thread Josef Gajdusek
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