DT bindings contains more parameters to set so add them to platform data also
to have possibility to use on arch where DT isn't available yet.

Signed-off-by: Marek Belisko <[email protected]>
---
 drivers/misc/bmp085.c      | 21 +++++++++++++++++----
 include/linux/i2c/bmp085.h |  7 +++++++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/drivers/misc/bmp085.c b/drivers/misc/bmp085.c
index 9792ce2..530b4a1 100644
--- a/drivers/misc/bmp085.c
+++ b/drivers/misc/bmp085.c
@@ -408,13 +408,15 @@ static void bmp085_get_of_properties(struct bmp085_data 
*data,
                return;
 
        if (!of_property_read_u32(np, "chip-id", &prop))
-               data->chip_id = prop & 0xff;
+               pdata->chip_id = prop & 0xff;
 
        if (!of_property_read_u32(np, "temp-measurement-period", &prop))
-               data->temp_measurement_period = (prop/100)*HZ;
+               pdata->temp_measurement_period = (prop/100)*HZ;
 
        if (!of_property_read_u32(np, "default-oversampling", &prop))
-               data->oversampling_setting = prop & 0xff;
+               pdata->default_oversampling = prop & 0xff;
+       else
+               pdata->default_oversampling = -1;
 
        pdata->gpio = of_get_named_gpio(np, "gpio", 0);
        of_property_read_u32(np, "irq", &pdata->irq);
@@ -443,9 +445,20 @@ static int bmp085_init_client(struct device *dev, struct 
bmp085_data *data)
                                        GFP_KERNEL);
                if (!pdata)
                        return -ENOMEM;
+
+               bmp085_get_of_properties(data, pdata);
        }
 
-       bmp085_get_of_properties(data, pdata);
+       if (pdata->chip_id)
+               data->chip_id = pdata->chip_id;
+
+       if (pdata->temp_measurement_period > 0)
+               data->temp_measurement_period =
+                       (pdata->temp_measurement_period/100)*HZ;
+
+       if (pdata->default_oversampling >= 0 &&
+               pdata->default_oversampling <= 3)
+               data->oversampling_setting = pdata->default_oversampling;
 
        if (gpio_is_valid(pdata->gpio)) {
                err = devm_gpio_request(dev, pdata->gpio, "bmp085_eoc_irq");
diff --git a/include/linux/i2c/bmp085.h b/include/linux/i2c/bmp085.h
index b66cb98..addb972 100644
--- a/include/linux/i2c/bmp085.h
+++ b/include/linux/i2c/bmp085.h
@@ -5,11 +5,18 @@
 
 /*
  * bmp085 platform data
+ * @chip_id: configurable chip id for non-default chip revisions
+ * @temp_measurement_period: in milliseconds
+ * @default_oversampling: used at startup, range is 0-3 with rising sensitivity
+ * set it to -1 when don't want to change default value (3)
  * @gpio: if is set it is the End Of Conversion line which is high when
  * conversion is finished
  * @irq: if gpio < 0 and irq > 0, then it is an interrupt with no gpio
  */
 struct bmp085_platform_data {
+       int     chip_id;
+       int     temp_measurement_period;
+       int     default_oversampling;
        int     gpio;
        int     irq;
 };
-- 
1.8.1.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to