summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChethan Krishna N <chethan.krishna@stericsson.com>2011-08-25 13:44:02 +0530
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:06:07 +0200
commitde5507b7d332266e8fd44f2d0351342c13f1c09f (patch)
treea279534afa50afdeafe2b7374067a313038dcaa9
parent3fda9d6fbd963bdc22cb8d040c59f09cf5513fb1 (diff)
lsm303dlhc: Correct out register reading
Out register reading method for lsm303dlhc sensor chip is corrected ST-Ericsson ID: 356390 ST-Ericsson FOSS-OUT ID: NA ST-Ericsson Linux next: NA Change-Id: Ia1805ad094886a8d23a29148a9d0e3ba460a06f7 Signed-off-by: Chethan Krishna N <chethan.krishna@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/28688 Reviewed-by: QATEST Reviewed-by: Philippe LANGLAIS <philippe.langlais@stericsson.com>
-rw-r--r--drivers/hwmon/Kconfig14
-rw-r--r--drivers/hwmon/Makefile3
-rw-r--r--drivers/hwmon/lsm303dlh_m.c11
-rw-r--r--drivers/hwmon/lsm303dlhc_a.c2
4 files changed, 28 insertions, 2 deletions
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 72524d16630..cd1468b1b3a 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -710,6 +710,20 @@ config SENSORS_LSM303DLH_INPUT_DEVICE
interrupts, need to be enabled only when input device support
is required.
+config SENSORS_LSM303DLHC
+ tristate "ST LSM303DLHC 3-axis accelerometer and 3-axis magnetometer"
+ depends on I2C
+ default n
+ help
+ This driver provides support for the LSM303DLHC chip which includes a
+ 3-axis accelerometer and a 3-axis magnetometer.
+
+ This driver can also be built as modules. If so, the module for
+ accelerometer will be called lsm303dlhc_a and for magnetometer it will
+ be called lsm303dlh_m.
+
+ Say Y here if you have a device containing lsm303dlhc chip.
+
config SENSORS_L3G4200D
tristate "ST L3G4200D 3-axis gyroscope"
depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index adca284522b..e4a4b4b9edb 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -84,7 +84,8 @@ obj-$(CONFIG_SENSORS_LM93) += lm93.o
obj-$(CONFIG_SENSORS_LM95241) += lm95241.o
obj-$(CONFIG_SENSORS_LM95245) += lm95245.o
obj-$(CONFIG_SENSORS_LTC4151) += ltc4151.o
-obj-$(CONFIG_SENSORS_LSM303DLH) += lsm303dlh_a.o lsm303dlh_m.o lsm303dlhc_a.o
+obj-$(CONFIG_SENSORS_LSM303DLH) += lsm303dlh_a.o lsm303dlh_m.o
+obj-$(CONFIG_SENSORS_LSM303DLHC)+= lsm303dlhc_a.o
obj-$(CONFIG_SENSORS_L3G4200D) += l3g4200d.o
obj-$(CONFIG_SENSORS_LTC4215) += ltc4215.o
obj-$(CONFIG_SENSORS_LTC4245) += ltc4245.o
diff --git a/drivers/hwmon/lsm303dlh_m.c b/drivers/hwmon/lsm303dlh_m.c
index 254f44d40c6..aa43d055e67 100644
--- a/drivers/hwmon/lsm303dlh_m.c
+++ b/drivers/hwmon/lsm303dlh_m.c
@@ -319,6 +319,7 @@ static ssize_t lsm303dlh_m_store_rate(struct device *dev,
static int lsm303dlh_m_xyz_read(struct lsm303dlh_m_data *ddata)
{
unsigned char xyz_data[6];
+ short temp;
int ret = lsm303dlh_m_read_multi(ddata, OUT_X_M,
6, xyz_data, "OUT_X_M");
if (ret < 0)
@@ -332,6 +333,16 @@ static int lsm303dlh_m_xyz_read(struct lsm303dlh_m_data *ddata)
ddata->data[2] = (short)
(((xyz_data[4]) << 8) | xyz_data[5]);
+#ifdef SENSORS_LSM303DLHC
+ /*
+ * the out registers are in x, z and y order
+ * so swap y and z values
+ */
+ temp = ddata->data[1];
+ ddata->data[1] = ddata->data[2];
+ ddata->data[2] = temp;
+#endif
+
/* taking orientation of x,y,z axis into account*/
ddata->data[ddata->pdata.axis_map_x] = ddata->pdata.negative_x ?
diff --git a/drivers/hwmon/lsm303dlhc_a.c b/drivers/hwmon/lsm303dlhc_a.c
index 512d511ece4..175a111cc0a 100644
--- a/drivers/hwmon/lsm303dlhc_a.c
+++ b/drivers/hwmon/lsm303dlhc_a.c
@@ -51,7 +51,7 @@
#define SHIFT_ADJ_8G 2 /* ~3.9/16*/
#define SHIFT_ADJ_16G 1 /* ~3.9/16*/
-#define AXISDATA_REG 0x29 /* axis data */
+#define AXISDATA_REG 0x28 /* axis data */
/* lsm303dlh magnetometer registers */
#define IRA_REG_M 0x0A