]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
misc: bmp085: add device tree properties
authorEric Andersson <eric.andersson@unixphere.com>
Mon, 9 Apr 2012 20:16:16 +0000 (22:16 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Apr 2012 21:56:36 +0000 (14:56 -0700)
Reviewed-by: Stefan Nilsson <stefan.nilsson@unixphere.com>
Signed-off-by: Eric Andersson <eric.andersson@unixphere.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/devicetree/bindings/misc/bmp085.txt [new file with mode: 0644]
Documentation/devicetree/bindings/vendor-prefixes.txt
drivers/misc/bmp085.c

diff --git a/Documentation/devicetree/bindings/misc/bmp085.txt b/Documentation/devicetree/bindings/misc/bmp085.txt
new file mode 100644 (file)
index 0000000..91dfda2
--- /dev/null
@@ -0,0 +1,20 @@
+BMP085/BMP18x digital pressure sensors
+
+Required properties:
+- compatible: bosch,bmp085
+
+Optional properties:
+- chip-id: configurable chip id for non-default chip revisions
+- temp-measurement-period: temperature measurement period (milliseconds)
+- default-oversampling: default oversampling value to be used at startup,
+  value range is 0-3 with rising sensitivity.
+
+Example:
+
+pressure@77 {
+       compatible = "bosch,bmp085";
+       reg = <0x77>;
+       chip-id = <10>;
+       temp-measurement-period = <100>;
+       default-oversampling = <2>;
+};
index 82ac057a24a948797af5575fd97d46e8161557e4..107d8addf0e4f893e400e12bee190a809d2994cd 100644 (file)
@@ -8,6 +8,7 @@ amcc    Applied Micro Circuits Corporation (APM, formally AMCC)
 apm    Applied Micro Circuits Corporation (APM)
 arm    ARM Ltd.
 atmel  Atmel Corporation
+bosch  Bosch Sensortec GmbH
 cavium Cavium, Inc.
 chrp   Common Hardware Reference Platform
 cortina        Cortina Systems, Inc.
index 6f572bc21879a61326825cffa913aa37216d319e..6adde9e1a0d1d6992e78ddc679d57f3231d0430c 100644 (file)
@@ -50,6 +50,7 @@
 #include <linux/i2c.h>
 #include <linux/slab.h>
 #include <linux/delay.h>
+#include <linux/of.h>
 
 #define BMP085_NAME                    "bmp085"
 #define BMP085_I2C_ADDRESS             0x77
@@ -85,6 +86,7 @@ struct bmp085_data {
        u32     raw_pressure;
        u32     temp_measurement_period;
        unsigned long last_temp_measurement;
+       u8      chip_id;
        s32     b6; /* calculated temperature correction coefficient */
 };
 
@@ -385,6 +387,27 @@ static int bmp085_detect(struct i2c_client *client, struct i2c_board_info *info)
        return 0;
 }
 
+static void __init bmp085_get_of_properties(struct i2c_client *client,
+                                           struct bmp085_data *data)
+{
+#ifdef CONFIG_OF
+       struct device_node *np = client->dev.of_node;
+       u32 prop;
+
+       if (!np)
+               return;
+
+       if (!of_property_read_u32(np, "chip-id", &prop))
+               data->chip_id = prop & 0xff;
+
+       if (!of_property_read_u32(np, "temp-measurement-period", &prop))
+               data->temp_measurement_period = (prop/100)*HZ;
+
+       if (!of_property_read_u32(np, "default-oversampling", &prop))
+               data->oversampling_setting = prop & 0xff;
+#endif
+}
+
 static int bmp085_init_client(struct i2c_client *client)
 {
        struct bmp085_data *data = i2c_get_clientdata(client);
@@ -393,10 +416,15 @@ static int bmp085_init_client(struct i2c_client *client)
        if (status < 0)
                return status;
 
+       /* default settings */
        data->client = client;
+       data->chip_id = BMP085_CHIP_ID;
        data->last_temp_measurement = 0;
        data->temp_measurement_period = 1*HZ;
        data->oversampling_setting = 3;
+
+       bmp085_get_of_properties(client, data);
+
        mutex_init(&data->lock);
 
        return 0;
@@ -446,6 +474,12 @@ static int __devexit bmp085_remove(struct i2c_client *client)
        return 0;
 }
 
+static const struct of_device_id bmp085_of_match[] = {
+       { .compatible = "bosch,bmp085", },
+       { },
+};
+MODULE_DEVICE_TABLE(of, bmp085_of_match);
+
 static const struct i2c_device_id bmp085_id[] = {
        { BMP085_NAME, 0 },
        { }
@@ -455,7 +489,8 @@ MODULE_DEVICE_TABLE(i2c, bmp085_id);
 static struct i2c_driver bmp085_driver = {
        .driver = {
                .owner = THIS_MODULE,
-               .name   = BMP085_NAME
+               .name   = BMP085_NAME,
+               .of_match_table = bmp085_of_match
        },
        .id_table       = bmp085_id,
        .probe          = bmp085_probe,