iio: imu: bmi160: added regulator and mount-matrix support
Subsystems (2)
v3 cover iio: imu: bmi160: added regulator and mount-matrix support
v3:
- separate typo fix into another patch
- clean up of documentation
- clean up of patch messages
v2:
- fixed missing description for iio: imu: bmi160: added regulator support
https://lore.kernel.org/linux-iio/[email protected]/
v1:
- initial patch submission
https://lore.kernel.org/linux-iio/[email protected]/
Convert txt format documentation to yaml.
Add documentation about vdd-supply, vddio-supply and mount-matrix.
Add vdd-supply and vddio-supply support.
Add mount-matrix binding support. As chip could have different orientations a mount matrix support is needed to correctly translate these differences.
Jonathan Albrieux (5):
dt-bindings: iio: imu: bmi160: convert txt format to yaml
dt-bindings: iio: imu: bmi160: add regulators and mount-matrix
iio: imu: bmi160: fix typo
iio: imu: bmi160: added regulator support
iio: imu: bmi160: added mount-matrix support
.../devicetree/bindings/iio/imu/bmi160.txt | 37 -------- .../bindings/iio/imu/bosch,bmi160.yaml | 92 +++++++++++++++++++ drivers/iio/imu/bmi160/bmi160.h | 3 + drivers/iio/imu/bmi160/bmi160_core.c | 46 +++++++++- 4 files changed, 140 insertions(+), 38 deletions(-) delete mode 100644 Documentation/devicetree/bindings/iio/imu/bmi160.txt create mode 100644 Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml
Signature · 1 line
2.17.1
PATCH v3 1/5 dt-bindings: iio: imu: bmi160: convert txt format to yaml
Converts documentation from txt format to yaml.
--- .../devicetree/bindings/iio/imu/bmi160.txt | 37 --------- .../bindings/iio/imu/bosch,bmi160.yaml | 76 +++++++++++++++++++ 2 files changed, 76 insertions(+), 37 deletions(-) delete mode 100644 Documentation/devicetree/bindings/iio/imu/bmi160.txt create mode 100644 Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml
Documentation/devicetree/bindings/iio/imu/bmi160.txt deleted +0 -37
@@ -1,37 +0,0 @@ -Bosch BMI160 - Inertial Measurement Unit with Accelerometer, Gyroscope -and externally connectable Magnetometer - -https://www.bosch-sensortec.com/bst/products/all_products/bmi160 - -Required properties: - - compatible : should be "bosch,bmi160" - - reg : the I2C address or SPI chip select number of the sensor - - spi-max-frequency : set maximum clock frequency (only for SPI) - -Optional properties: - - interrupts : interrupt mapping for IRQ - - interrupt-names : set to "INT1" if INT1 pin should be used as interrupt - input, set to "INT2" if INT2 pin should be used instead - - drive-open-drain : set if the specified interrupt pin should be configured as - open drain. If not set, defaults to push-pull. - -Examples: - -bmi160@68 { - compatible = "bosch,bmi160"; - reg = <0x68>; - - interrupt-parent = <&gpio4>; - interrupts = <12 IRQ_TYPE_EDGE_RISING>; - interrupt-names = "INT1"; -}; - -bmi160@0 { - compatible = "bosch,bmi160"; - reg = <0>; - spi-max-frequency = <10000000>; - - interrupt-parent = <&gpio2>; - interrupts = <12 IRQ_TYPE_LEVEL_LOW>; - interrupt-names = "INT2"; -};
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +76 -0
76 lines not on this page · raw message
Signature · 1 line
2.17.1
Jonathan Cameron
maintainerRe: [PATCH v3 1/5] dt-bindings: iio: imu: bmi160: convert txt format to yaml
Quoted 3 lines · On Wed, 20 May 2020 21:46:40 +0200 Jonathan Albrieux…
Converts documentation from txt format to yaml.
Signed-off-by Jonathan Albrieux <[email protected]>
A reminder on the maintainer bit as that thread crossed with this one. Also, drop the spi-max-frequency as we don't need to mention it explicitly for this device.
Thanks,
Jonathan
Quoted 56 lines
--- .../devicetree/bindings/iio/imu/bmi160.txt | 37 --------- .../bindings/iio/imu/bosch,bmi160.yaml | 76 +++++++++++++++++++ 2 files changed, 76 insertions(+), 37 deletions(-) delete mode 100644 Documentation/devicetree/bindings/iio/imu/bmi160.txt create mode 100644 Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yamlDocumentation/devicetree/bindings/iio/imu/bmi160.txt deleted +0
-37@@ -1,37 +0,0 @@ -Bosch BMI160 - Inertial Measurement Unit with Accelerometer, Gyroscope -and externally connectable Magnetometer - -https://www.bosch-sensortec.com/bst/products/all_products/bmi160 - -Required properties: - - compatible : should be "bosch,bmi160" - - reg : the I2C address or SPI chip select number of the sensor - - spi-max-frequency : set maximum clock frequency (only for SPI) - -Optional properties: - - interrupts : interrupt mapping for IRQ - - interrupt-names : set to "INT1" if INT1 pin should be used as interrupt - input, set to "INT2" if INT2 pin should be used instead - - drive-open-drain : set if the specified interrupt pin should be configured as - open drain. If not set, defaults to push-pull. - -Examples: - -bmi160@68 { - compatible = "bosch,bmi160"; - reg = <0x68>; - - interrupt-parent = <&gpio4>; - interrupts = <12 IRQ_TYPE_EDGE_RISING>; - interrupt-names = "INT1"; -}; - -bmi160@0 { - compatible = "bosch,bmi160"; - reg = <0>; - spi-max-frequency = <10000000>; - - interrupt-parent = <&gpio2>; - interrupts = <12 IRQ_TYPE_LEVEL_LOW>; - interrupt-names = "INT2"; -};Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +0
-0
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml line 10
Quoted 10 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +10
-0@@ -0,0 +1,76 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/imu/bosch,bmi160.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Bosch BMI160 + +maintainers: + - Daniel Baluta <[email protected]> (?)
Daniel's reply crossed with this. Given he's moved on to other things he's not happy to be listed as maintainer here.
Given other threads, either put yourself here if you are happy to maintain the binding, or fall back to me but use my kernel.org address.
Jonathan Cameron <[email protected]>
I don't mind either way.
Quoted 5 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +5
-0+ +description: | + Inertial Measurement Unit with Accelerometer, Gyroscope and externally + connectable Magnetometer + https://www.bosch-sensortec.com/bst/products/all_products/bmi160
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml line 25
Quoted 10 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +10
-0+ +properties: + compatible: + const: bosch,bmi160 + + reg: + maxItems: 1 + + spi-max-frequency: + maxItems: 1
spi-max-frequency doesn't need to be here at all. We aren't trying to list
all of the properties that might be present - but rather those that are either required or that are part of the description of the device. This one is a generic spi binding that may or may not be present.
Quoted 51 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +51
-0+ + interrupts: + maxItems: 1 + + interrupt-names: + enum: + - INT1 + - INT2 + description: | + set to "INT1" if INT1 pin should be used as interrupt input, set + to "INT2" if INT2 pin should be used instead + + drive-open-drain: + description: | + set if the specified interrupt pin should be configured as + open drain. If not set, defaults to push-pull. + +required: + - compatible + - reg + +examples: + - | + // Example for I2C + i2c { + #address-cells = <1>; + #size-cells = <0>; + + bmi160@68 { + compatible = "bosch,bmi160"; + reg = <0x68>; + interrupt-parent = <&gpio4>; + interrupts = <12 1>; + interrupt-names = "INT1"; + }; + }; + - | + // Example for SPI + spi { + #address-cells = <1>; + #size-cells = <0>; + + bmi160@0 { + compatible = "bosch,bmi160"; + reg = <0>; + spi-max-frequency = <10000000>; + interrupt-parent = <&gpio2>; + interrupts = <12 1>; + interrupt-names = "INT2"; + }; + };
Re: [PATCH v3 1/5] dt-bindings: iio: imu: bmi160: convert txt format to yaml
Quoted 7 lines · Jonathan Cameron
Quoted 3 lines · On Wed, 20 May 2020 21:46:40 +0200 Jonathan Albrieux…
Converts documentation from txt format to yaml.
Signed-off-by Jonathan Albrieux <[email protected]>
Quoted 8 lines
A reminder on the maintainer bit as that thread crossed with this one. Also, drop the spi-max-frequency as we don't need to mention it explicitly for this device.
Thanks,
Jonathan
Thank you, I'll remove it today.
Quoted 71 lines
Quoted 57 lines
--- .../devicetree/bindings/iio/imu/bmi160.txt | 37 --------- .../bindings/iio/imu/bosch,bmi160.yaml | 76 +++++++++++++++++++ 2 files changed, 76 insertions(+), 37 deletions(-) delete mode 100644 Documentation/devicetree/bindings/iio/imu/bmi160.txt create mode 100644 Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yamlDocumentation/devicetree/bindings/iio/imu/bmi160.txt deleted +0
-37@@ -1,37 +0,0 @@ -Bosch BMI160 - Inertial Measurement Unit with Accelerometer, Gyroscope -and externally connectable Magnetometer - -https://www.bosch-sensortec.com/bst/products/all_products/bmi160 - -Required properties: - - compatible : should be "bosch,bmi160" - - reg : the I2C address or SPI chip select number of the sensor - - spi-max-frequency : set maximum clock frequency (only for SPI) - -Optional properties: - - interrupts : interrupt mapping for IRQ - - interrupt-names : set to "INT1" if INT1 pin should be used as interrupt - input, set to "INT2" if INT2 pin should be used instead - - drive-open-drain : set if the specified interrupt pin should be configured as - open drain. If not set, defaults to push-pull. - -Examples: - -bmi160@68 { - compatible = "bosch,bmi160"; - reg = <0x68>; - - interrupt-parent = <&gpio4>; - interrupts = <12 IRQ_TYPE_EDGE_RISING>; - interrupt-names = "INT1"; -}; - -bmi160@0 { - compatible = "bosch,bmi160"; - reg = <0>; - spi-max-frequency = <10000000>; - - interrupt-parent = <&gpio2>; - interrupts = <12 IRQ_TYPE_LEVEL_LOW>; - interrupt-names = "INT2"; -};Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +0
-0Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml line 10
Quoted 10 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +10
-0@@ -0,0 +1,76 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/imu/bosch,bmi160.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Bosch BMI160 + +maintainers: + - Daniel Baluta <[email protected]> (?)Daniel's reply crossed with this. Given he's moved on to other things he's not happy to be listed as maintainer here.
Quoted 7 lines
Given other threads, either put yourself here if you are happy to maintain the binding, or fall back to me but use my kernel.org address.
Jonathan Cameron <[email protected]>
I don't mind either way.
Thank you, I'll add you then for this binding.
Thank for your help,
Best regards,
Jonathan Albrieux
Quoted 74 lines
Quoted 6 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +5
-0+ +description: | + Inertial Measurement Unit with Accelerometer, Gyroscope and externally + connectable Magnetometer + https://www.bosch-sensortec.com/bst/products/all_products/bmi160Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml line 25
Quoted 10 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +10
-0+ +properties: + compatible: + const: bosch,bmi160 + + reg: + maxItems: 1 + + spi-max-frequency: + maxItems: 1spi-max-frequency doesn't need to be here at all. We aren't trying to list
all of the properties that might be present - but rather those that are either required or that are part of the description of the device. This one is a generic spi binding that may or may not be present.Quoted 51 lines
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml new file +51
-0+ + interrupts: + maxItems: 1 + + interrupt-names: + enum: + - INT1 + - INT2 + description: | + set to "INT1" if INT1 pin should be used as interrupt input, set + to "INT2" if INT2 pin should be used instead + + drive-open-drain: + description: | + set if the specified interrupt pin should be configured as + open drain. If not set, defaults to push-pull. + +required: + - compatible + - reg + +examples: + - | + // Example for I2C + i2c { + #address-cells = <1>; + #size-cells = <0>; + + bmi160@68 { + compatible = "bosch,bmi160"; + reg = <0x68>; + interrupt-parent = <&gpio4>; + interrupts = <12 1>; + interrupt-names = "INT1"; + }; + }; + - | + // Example for SPI + spi { + #address-cells = <1>; + #size-cells = <0>; + + bmi160@0 { + compatible = "bosch,bmi160"; + reg = <0>; + spi-max-frequency = <10000000>; + interrupt-parent = <&gpio2>; + interrupts = <12 1>; + interrupt-names = "INT2"; + }; + };
PATCH v3 2/5 dt-bindings: iio: imu: bmi160: add regulators and mount-matrix
In reply to Jonathan AlbrieuxAdd vdd-supply and vddio-supply support.
Add mount-matrix support.
--- .../bindings/iio/imu/bosch,bmi160.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
Documentation/devicetree/bindings/iio/imu/bosch,bmi160.yaml +16 -0
@@ -40,6 +40,17 @@ properties: set if the specified interrupt pin should be configured as open drain. If not set, defaults to push-pull. + vdd-supply: + maxItems: 1 + description: provide VDD power to the sensor. + + vddio-supply: + maxItems: 1 + description: provide VDD IO power to the sensor. + + mount-matrix: + description: an optional 3x3 mounting rotation matrix + required: - compatible - reg
@@ -54,9 +65,14 @@ examples: bmi160@68 { compatible = "bosch,bmi160"; reg = <0x68>; + vdd-supply = <&pm8916_l17>; + vddio-supply = <&pm8916_l6>; interrupt-parent = <&gpio4>; interrupts = <12 1>; interrupt-names = "INT1"; + mount-matrix = "0", "1", "0", + "-1", "0", "0", + "0", "0", "1"; }; }; - |
Signature · 1 line
2.17.1
PATCH v3 3/5 iio: imu: bmi160: fix typo
In reply to Jonathan AlbrieuxFix a typo in MODULE_AUTHOR() argument.
--- drivers/iio/imu/bmi160/bmi160_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/iio/imu/bmi160/bmi160_core.c +1 -1
@@ -853,6 +853,6 @@ int bmi160_core_probe(struct device *dev, struct regmap *regmap, }EXPORT_SYMBOL_GPL (bmi160_core_probe); -MODULE_AUTHOR ("Daniel Baluta <[email protected]" ); +MODULE_AUTHOR ("Daniel Baluta <[email protected]>" );MODULE_DESCRIPTION ("Bosch BMI160 driver" );MODULE_LICENSE ("GPL v2" );
Signature · 1 line
2.17.1
PATCH v3 4/5 iio: imu: bmi160: added regulator support
In reply to Jonathan AlbrieuxAdd vdd-supply and vddio-supply support.
--- drivers/iio/imu/bmi160/bmi160.h | 2 ++ drivers/iio/imu/bmi160/bmi160_core.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+)
drivers/iio/imu/bmi160/bmi160.h +2 -0
@@ -3,10 +3,12 @@#define BMI160_H_ #include <linux/iio/iio.h> +#include <linux/regulator/consumer.h> struct bmi160_data {struct regmap *regmap;struct iio_trigger *trig; +struct regulator_bulk_data supplies[2 ]; };extern const struct regmap_config bmi160_regmap_config;
drivers/iio/imu/bmi160/bmi160_core.c +24 -0
@@ -15,6 +15,7 @@#include <linux/delay.h> #include <linux/irq.h> #include <linux/of_irq.h> +#include <linux/regulator/consumer.h> #include <linux/iio/iio.h> #include <linux/iio/triggered_buffer.h>
@@ -709,6 +710,12 @@ static int bmi160_chip_init(struct bmi160_data *data, bool use_spi)unsigned int val;struct device *dev =regmap_get_device (data->regmap); + ret =regulator_bulk_enable (ARRAY_SIZE (data->supplies), data->supplies); +if (ret) { +dev_err (dev,"Failed to enable regulators: %d\n" , ret); +return ret; + } + ret =regmap_write (data->regmap,BMI160_REG_CMD ,BMI160_CMD_SOFTRESET );if (ret)return ret;
@@ -793,9 +800,16 @@ int bmi160_probe_trigger(struct iio_dev *indio_dev, int irq, u32 irq_type)static void bmi160_chip_uninit (void *data) {struct bmi160_data *bmi_data = data; +struct device *dev =regmap_get_device (bmi_data->regmap); +int ret;bmi160_set_mode (bmi_data,BMI160_GYRO , false);bmi160_set_mode (bmi_data,BMI160_ACCEL , false); + + ret =regulator_bulk_disable (ARRAY_SIZE (bmi_data->supplies), + bmi_data->supplies); +if (ret) +dev_err (dev,"Failed to disable regulators: %d\n" , ret); } int bmi160_core_probe(struct device *dev, struct regmap *regmap,
@@ -815,6 +829,16 @@ int bmi160_core_probe(struct device *dev, struct regmap *regmap,dev_set_drvdata (dev, indio_dev); data->regmap = regmap; + data->supplies[0 ].supply ="vdd" ; + data->supplies[1 ].supply ="vddio" ; + ret =devm_regulator_bulk_get (dev, +ARRAY_SIZE (data->supplies), + data->supplies); +if (ret) { +dev_err (dev,"Failed to get regulators: %d\n" , ret); +return ret; + } + ret =bmi160_chip_init (data, use_spi);if (ret)return ret;
Signature · 1 line
2.17.1
PATCH v3 5/5 iio: imu: bmi160: added mount-matrix support
In reply to Jonathan AlbrieuxAdd mount-matrix binding support. As chip could have different orientations a mount matrix support is needed to correctly translate these differences.
--- drivers/iio/imu/bmi160/bmi160.h | 1 + drivers/iio/imu/bmi160/bmi160_core.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+)
drivers/iio/imu/bmi160/bmi160.h +1 -0
@@ -9,6 +9,7 @@ struct bmi160_data {struct regmap *regmap;struct iio_trigger *trig;struct regulator_bulk_data supplies[2 ]; +struct iio_mount_matrix orientation; };extern const struct regmap_config bmi160_regmap_config;
drivers/iio/imu/bmi160/bmi160_core.c +20 -0
@@ -110,6 +110,7 @@ .storagebits = 16, \ .endianness = IIO_LE, \ }, \ + .ext_info = bmi160_ext_info, \ }/* scan indexes follow DATA register order */
@@ -265,6 +266,20 @@ static const struct bmi160_odr_item bmi160_odr_table[] = { }, }; +static const struct iio_mount_matrix * +bmi160_get_mount_matrix (const struct iio_dev *indio_dev, +const struct iio_chan_spec *chan) +{ +struct bmi160_data *data =iio_priv (indio_dev); + +return &data->orientation; +} + +static const struct iio_chan_spec_ext_info bmi160_ext_info[] = { +IIO_MOUNT_MATRIX (IIO_SHARED_BY_DIR , bmi160_get_mount_matrix), + { } +}; +static const struct iio_chan_spec bmi160_channels[] = {BMI160_CHANNEL (IIO_ACCEL ,X ,BMI160_SCAN_ACCEL_X ),BMI160_CHANNEL (IIO_ACCEL ,Y ,BMI160_SCAN_ACCEL_Y ),
@@ -839,6 +854,11 @@ int bmi160_core_probe(struct device *dev, struct regmap *regmap,return ret; } + ret =iio_read_mount_matrix (dev,"mount-matrix" , + &data->orientation); +if (ret) +return ret; + ret =bmi160_chip_init (data, use_spi);if (ret)return ret;
Signature · 1 line
2.17.1
Jonathan Cameron
maintainerRe: [PATCH v3 5/5] iio: imu: bmi160: added mount-matrix support
Quoted 4 lines · On Wed, 20 May 2020 21:46:44 +0200 Jonathan Albrieux…
Add mount-matrix binding support. As chip could have different orientations a mount matrix support is needed to correctly translate these differences.
Signed-off-by Jonathan Albrieux <[email protected]>
Other than those bits for the binding doc, the rest of the series
looks good to me. Given timing this will only go into mainline in the
next cycle now anyway so we have plenty of time to tidy up the corners.
Thanks,
Jonathan
Quoted 62 lines
--- drivers/iio/imu/bmi160/bmi160.h | 1 + drivers/iio/imu/bmi160/bmi160_core.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+)drivers/iio/imu/bmi160/bmi160.h +1
-0@@ -9,6 +9,7 @@ struct bmi160_data {struct regmap *regmap;struct iio_trigger *trig;struct regulator_bulk_data supplies[2 ]; +struct iio_mount_matrix orientation; };extern const struct regmap_config bmi160_regmap_config;drivers/iio/imu/bmi160/bmi160_core.c +20
-0@@ -110,6 +110,7 @@ .storagebits = 16, \ .endianness = IIO_LE, \ }, \ + .ext_info = bmi160_ext_info, \ }/* scan indexes follow DATA register order */ @@ -265,6 +266,20 @@ static const struct bmi160_odr_item bmi160_odr_table[] = { }, }; +static const struct iio_mount_matrix * +bmi160_get_mount_matrix (const struct iio_dev *indio_dev, +const struct iio_chan_spec *chan) +{ +struct bmi160_data *data =iio_priv (indio_dev); + +return &data->orientation; +} + +static const struct iio_chan_spec_ext_info bmi160_ext_info[] = { +IIO_MOUNT_MATRIX (IIO_SHARED_BY_DIR , bmi160_get_mount_matrix), + { } +}; +static const struct iio_chan_spec bmi160_channels[] = {BMI160_CHANNEL (IIO_ACCEL ,X ,BMI160_SCAN_ACCEL_X ),BMI160_CHANNEL (IIO_ACCEL ,Y ,BMI160_SCAN_ACCEL_Y ),@@ -839,6 +854,11 @@ int bmi160_core_probe(struct device *dev, struct regmap *regmap,return ret; } + ret =iio_read_mount_matrix (dev,"mount-matrix" , + &data->orientation); +if (ret) +return ret; + ret =bmi160_chip_init (data, use_spi);if (ret)return ret;