staging:iio:hmc5843: Add support for i2c hmc5983
authorJosef Gajdusek <atx@atalax.net>
Tue, 22 Jul 2014 15:02:00 +0000 (16:02 +0100)
committerJonathan Cameron <jic23@kernel.org>
Wed, 23 Jul 2014 20:48:20 +0000 (21:48 +0100)
This patch adds support for the hmc5983 i2c interface.
This chip is almost identical to the hmc5883. The difference being added
temperature compensation, additional available sample rate (220Hz) and an SPI
interface.

Signed-off-by: Josef Gajdusek <atx@atx.name>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Documentation/devicetree/bindings/iio/magnetometer/hmc5843.txt
drivers/staging/iio/magnetometer/Kconfig
drivers/staging/iio/magnetometer/hmc5843.h
drivers/staging/iio/magnetometer/hmc5843_core.c
drivers/staging/iio/magnetometer/hmc5843_i2c.c

index b8cbdd517abc507f4b57d528ca4dd3bd19eacadd..8e191eef014e6112696b3c82678fb20dbe3dc553 100644 (file)
@@ -6,6 +6,7 @@ Required properties:
   Other models which are supported with driver are:
        "honeywell,hmc5883"
        "honeywell,hmc5883l"
+       "honeywell,hmc5983"
   - reg : the I2C address of the magnetometer - typically 0x1e
 
 Optional properties:
index 0a27f987c2011861fed5e3f36205b4341727c4a0..c086f33b6311d1bc2163bed451accbbb819094ba 100644 (file)
@@ -20,6 +20,6 @@ config SENSORS_HMC5843_I2C
          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)
+         - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)
 
 endmenu
index 06b2712a67fd9f324500325a3fd30a882617d11b..b784e3eb4591edec159129f709f5a72672bfe460 100644 (file)
@@ -29,6 +29,7 @@ enum hmc5843_ids {
        HMC5843_ID,
        HMC5883_ID,
        HMC5883L_ID,
+       HMC5983_ID,
 };
 
 struct hmc5843_data {
index 08fb0be100ff93fd31a109de76a41dc90e0402c0..914ae1acd31d65572b20a91029262a97e77b53bd 100644 (file)
@@ -101,6 +101,11 @@ static const int hmc5883_regval_to_samp_freq[][2] = {
        {75, 0}
 };
 
+static const int hmc5983_regval_to_samp_freq[][2] = {
+       {0, 750000}, {1, 500000}, {3, 0}, {7, 500000}, {15, 0}, {30, 0},
+       {75, 0}, {220, 0}
+};
+
 /* Describe chip variants */
 struct hmc5843_chip_info {
        const struct iio_chan_spec *channels;
@@ -457,7 +462,7 @@ static const struct iio_chan_spec hmc5843_channels[] = {
        IIO_CHAN_SOFT_TIMESTAMP(3),
 };
 
-/* Beware: Y and Z are exchanged on HMC5883 */
+/* Beware: Y and Z are exchanged on HMC5883 and 5983 */
 static const struct iio_chan_spec hmc5883_channels[] = {
        HMC5843_CHANNEL(X, 0),
        HMC5843_CHANNEL(Z, 1),
@@ -504,6 +509,15 @@ static const struct hmc5843_chip_info hmc5843_chip_info_tbl[] = {
                .n_regval_to_nanoscale =
                                ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
        },
+       [HMC5983_ID] = {
+               .channels = hmc5883_channels,
+               .regval_to_samp_freq = hmc5983_regval_to_samp_freq,
+               .n_regval_to_samp_freq =
+                               ARRAY_SIZE(hmc5983_regval_to_samp_freq),
+               .regval_to_nanoscale = hmc5883l_regval_to_nanoscale,
+               .n_regval_to_nanoscale =
+                               ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
+       }
 };
 
 static int hmc5843_init(struct hmc5843_data *data)
@@ -516,7 +530,7 @@ static int hmc5843_init(struct hmc5843_data *data)
        if (ret < 0)
                return ret;
        if (id[0] != 'H' || id[1] != '4' || id[2] != '3') {
-               dev_err(data->dev, "no HMC5843/5883/5883L sensor\n");
+               dev_err(data->dev, "no HMC5843/5883/5883L/5983 sensor\n");
                return -ENODEV;
        }
 
@@ -620,5 +634,5 @@ int hmc5843_common_remove(struct device *dev)
 EXPORT_SYMBOL(hmc5843_common_remove);
 
 MODULE_AUTHOR("Shubhrajyoti Datta <shubhrajyoti@ti.com>");
-MODULE_DESCRIPTION("HMC5843/5883/5883L core driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 core driver");
 MODULE_LICENSE("GPL");
index 5593a7d93a1bb54cf988fe01c3ae23ee7e3c3977..6acd614cdbc6529ae22d4df7c53548f1e3852455 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * i2c driver for hmc5843/5843/5883/5883l
+ * i2c driver for hmc5843/5843/5883/5883l/5983
  *
  * Split from hmc5843.c
  * Copyright (C) Josef Gajdusek <atx@atx.name>
@@ -73,6 +73,7 @@ static const struct i2c_device_id hmc5843_id[] = {
        { "hmc5843", HMC5843_ID },
        { "hmc5883", HMC5883_ID },
        { "hmc5883l", HMC5883L_ID },
+       { "hmc5983", HMC5983_ID },
        { }
 };
 MODULE_DEVICE_TABLE(i2c, hmc5843_id);
@@ -81,6 +82,7 @@ static const struct of_device_id hmc5843_of_match[] = {
        { .compatible = "honeywell,hmc5843", .data = (void *)HMC5843_ID },
        { .compatible = "honeywell,hmc5883", .data = (void *)HMC5883_ID },
        { .compatible = "honeywell,hmc5883l", .data = (void *)HMC5883L_ID },
+       { .compatible = "honeywell,hmc5983", .data = (void *)HMC5983_ID },
        {}
 };
 MODULE_DEVICE_TABLE(of, hmc5843_of_match);
@@ -98,5 +100,5 @@ static struct i2c_driver hmc5843_driver = {
 module_i2c_driver(hmc5843_driver);
 
 MODULE_AUTHOR("Josef Gajdusek <atx@atx.name>");
-MODULE_DESCRIPTION("HMC5843/5883/5883L i2c driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 i2c driver");
 MODULE_LICENSE("GPL");