Re: [PATCH v2 3/7] iio: tsl2772: add support for reading power settings from device tree
From: Jonathan Cameron <jic23@kernel.org>
Date: 2018-07-21 17:36:08
Also in:
linux-arm-msm, linux-iio, lkml
On Tue, 17 Jul 2018 04:41:54 -0400 Brian Masney [off-list ref] wrote:
This patch adds support for optionally reading the prox_diode and prox_power settings from device tree. This was tested using a LG Nexus 5 (hammerhead) which requires a different diode than the driver default for the IR LED. Signed-off-by: Brian Masney <redacted>
I think we can make this binding more 'generic' as right now the amstaos bindings aren't even general enough to apply to future amstaos devices that need a similar binding. I'm always anti defines rather than real values in DT (where possible) and I think there is no reason not to use real values here. Jonathan
quoted hunk ↗ jump to hunk
--- The next patch in the series removes the tsl2772 driver from the trivial-devices.txt file. I separated it out so that change can go through device tree. .../devicetree/bindings/iio/light/tsl2772.txt | 39 +++++++++++++++++++ drivers/iio/light/tsl2772.c | 16 ++++++++ include/dt-bindings/iio/amstaos,tsl2772.h | 24 ++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/light/tsl2772.txt create mode 100644 include/dt-bindings/iio/amstaos,tsl2772.hdiff --git a/Documentation/devicetree/bindings/iio/light/tsl2772.txt b/Documentation/devicetree/bindings/iio/light/tsl2772.txt new file mode 100644 index 000000000000..ab553d52b9fc --- /dev/null +++ b/Documentation/devicetree/bindings/iio/light/tsl2772.txt@@ -0,0 +1,39 @@ +* AMS/TAOS ALS and proximity sensor + +Required properties: + + - compatible: Should be one of + "amstaos,tsl2571" + "amstaos,tsl2671" + "amstaos,tmd2671" + "amstaos,tsl2771" + "amstaos,tmd2771" + "amstaos,tsl2572" + "amstaos,tsl2672" + "amstaos,tmd2672" + "amstaos,tsl2772" + "amstaos,tmd2772" + - reg: the I2C address of the device + +Optional properties: + + - amstaos,prox_diode - must be TSL2772_DIODE0, TSL2772_DIODE1, or + TSL2772_DIODE_BOTH. + - amstaos,prox_power - must be TSL2772_100_mA, TSL2772_50_mA, TSL2772_25_mA, + or TSL2772_13_mA. + - interrupt-parent: should be the phandle for the interrupt controller + - interrupts: the sole interrupt generated by the device + + Refer to interrupt-controller/interrupts.txt for generic interrupt client + node bindings. + +Example: + +#include <dt-bindings/iio/amstaos,tsl2772.h> + +tsl2772@39 { + compatible = "amstaos,tsl2772"; + reg = <0x39>; + interrupts-extended = <&msmgpio 61 IRQ_TYPE_EDGE_FALLING>; + amstaos,prox_diode = <TSL2772_DIODE0>; +};diff --git a/drivers/iio/light/tsl2772.c b/drivers/iio/light/tsl2772.c index 34d42a2504c9..0be57f2ecb02 100644 --- a/drivers/iio/light/tsl2772.c +++ b/drivers/iio/light/tsl2772.c@@ -515,6 +515,18 @@ static int tsl2772_get_prox(struct iio_dev *indio_dev) return ret; } +#ifdef CONFIG_OF +static void tsl2772_parse_dt(struct tsl2772_chip *chip) +{ + struct device_node *of_node = chip->client->dev.of_node; + + of_property_read_u32(of_node, "amstaos,prox_diode", + &chip->settings.prox_diode); + of_property_read_u32(of_node, "amstaos,prox_power", + &chip->settings.prox_power); +} +#endif + /** * tsl2772_defaults() - Populates the device nominal operating parameters * with those provided by a 'platform' data struct or@@ -541,6 +553,10 @@ static void tsl2772_defaults(struct tsl2772_chip *chip) memcpy(chip->tsl2772_device_lux, tsl2772_default_lux_table_group[chip->id], TSL2772_DEFAULT_TABLE_BYTES); + +#ifdef CONFIG_OF + tsl2772_parse_dt(chip); +#endif } /**diff --git a/include/dt-bindings/iio/amstaos,tsl2772.h b/include/dt-bindings/iio/amstaos,tsl2772.h new file mode 100644 index 000000000000..ad6f9fbc0845 --- /dev/null +++ b/include/dt-bindings/iio/amstaos,tsl2772.h@@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Device driver for monitoring ambient light intensity (lux) + * and proximity (prox) within the TAOS TSL2772 family of devices. + * + * Copyright (c) 2012 TAOS Corporation. + * Copyright (c) 2017-2018 Brian Masney <masneyb@onstation.org> + */ + +#ifndef _DT_BINDINGS_AMSTAOS_TSL2772_H +#define _DT_BINDINGS_AMSTAOS_TSL2772_H + +/* Proximity diode to use */ +#define TSL2772_DIODE0 0x01 +#define TSL2772_DIODE1 0x02 +#define TSL2772_DIODE_BOTH 0x03
Can we have two separate parameters to enable them?
+ +/* LED Power */ +#define TSL2772_100_mA 0x00 +#define TSL2772_50_mA 0x01 +#define TSL2772_25_mA 0x02 +#define TSL2772_13_mA 0x03
I'd like to see real numbers rather than defines. List the valid values in the binding then match them to register addresses in the driver. A different instance of this binding for a different taos device might have different values that are valid.
+ +#endif /* _DT_BINDINGS_AMSTAOS_TSL2772_H */