Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 304018
b: refs/heads/master
c: c5a86ab
h: refs/heads/master
v: v3
  • Loading branch information
Eric Andersson authored and Greg Kroah-Hartman committed Apr 18, 2012
1 parent 4c46514 commit 4d54956
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e939ca0a63627d6b2205dd945833ee7da4fc181a
refs/heads/master: c5a86ab6dd6e424c56826421a80b855e24f7caa1
20 changes: 20 additions & 0 deletions trunk/Documentation/devicetree/bindings/misc/bmp085.txt
Original file line number Diff line number Diff line change
@@ -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>;
};
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
37 changes: 36 additions & 1 deletion trunk/drivers/misc/bmp085.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 */
};

Expand Down Expand Up @@ -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);
Expand All @@ -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;
Expand Down Expand Up @@ -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 },
{ }
Expand All @@ -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,
Expand Down

0 comments on commit 4d54956

Please sign in to comment.