Thread (6 messages) 6 messages, 5 authors, 2013-08-04

Re: [PATCH 2/2] iio: add Bosch BMA180 acceleration sensor driver

From: Lars-Peter Clausen <hidden>
Date: 2013-08-04 13:48:40
Also in: linux-iio, lkml

On 07/29/2013 04:58 PM, Oleksandr Kravchenko wrote:
quoted hunk ↗ jump to hunk
From: Oleksandr Kravchenko <o.v.kravchenko-hExfYMNmJl/Cnp4W7fqMDg@public.gmane.org>

This patch adds IIO driver for Bosch BMA180 triaxial
acceleration sensor.
http://omapworld.com/BMA180_111_1002839.pdf

Signed-off-by: Oleksandr Kravchenko <o.v.kravchenko-hExfYMNmJl/Cnp4W7fqMDg@public.gmane.org>
---
 .../devicetree/bindings/iio/accel/bma180.txt       |   53 +++
 drivers/iio/accel/Kconfig                          |   10 +
 drivers/iio/accel/Makefile                         |    2 +
 drivers/iio/accel/bma180.c                         |  462 ++++++++++++++++++++
 4 files changed, 527 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/accel/bma180.txt
 create mode 100644 drivers/iio/accel/bma180.c
diff --git a/Documentation/devicetree/bindings/iio/accel/bma180.txt b/Documentation/devicetree/bindings/iio/accel/bma180.txt
new file mode 100644
index 0000000..7c13c84
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/accel/bma180.txt
@@ -0,0 +1,53 @@
+* Bosch BMA180 triaxial acceleration sensor
+
+http://omapworld.com/BMA180_111_1002839.pdf
+
+Required properties:
+
+  - compatible : should be "bosch,bma180"
+  - reg : the I2C address of the sensor
+
+Optional properties:
+
+  - interrupt-parent : should be the phandle for the interrupt controller
+
+  - interrupts : interrupt mapping for GPIO IRQ, it shuld by configured with
+		flags IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING
+
+  - range : select the full scale acceleration range
+		0 : -1g..+1g
+		1 : -1.5g..+1.5g
+		2 : -2g..+2g
+		3 : -3g..+3g
+		4 : -4g..+4g
+		5 : -8g..+8g
+		6 : -16g..+16g
+
+  - bw : select bandwidth bandwidth
+		0 : 10Hz
+		1 : 20Hz
+		2 : 40Hz
+		3 : 75Hz
+		4 : 150Hz
+		5 : 300Hz
+		Don't use bandwidth frequency more than 300Hz couse it
+		influences the frequency of generating new data interrupts
+		and i2c reading phase can be longer than pheriod of interrupt
+		generation.
+
+  - mode_config : 0 - select low noise mode, 1 - select low power mode
+
+  - fuzz : specifies fuzz value that is used to filter noise from the event stream
+
All the four properties above are vendor specific, so they need a vendor
prefix. Also no underscores in property names and no abbreviations. Also I
wonder if some of them should rather be runtime configurable, like range and
bandwidth,
+Example:
+
+bma180@40 {
+	compatible = "bosch,bma180";
+	reg = <0x40>;
+	interrupt-parent = <&gpio6>;
+	interrupts = <18 (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)>;
+	range = <2>;
+	bw = <0>;
+	mode_config = <1>;
+	fuzz = <555>;
+};
[...]
+static int bma180_read_raw(struct iio_dev *indio_dev,
+		struct iio_chan_spec const *chan, int *val, int *val2,
+		long mask)
+{
+	struct bma180_data *data = iio_priv(indio_dev);
+	long tmp = ((s16)data->acc_reg[chan->channel] >> 2)
+		* bma180_range_table[data->range].ratio;
+
+	if (data->acc_reg[chan->channel] < 0)
+		return data->acc_reg[chan->channel];
+
+	*val = tmp / 1000000;
+	*val2 = (tmp % 1000000);
+
This doesn't look as if the device needs a special conversion formula. Just
expose the raw value and ratio as the scale.
+	return IIO_VAL_INT_PLUS_MICRO;
+}
[...]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help