If an object can be considered close to the device that has the proximity
sensor built in is hardware dependent. Allowing to configure the property via
device tree allows to export this device specific value to userspace via
ext_info. This is useful for e.g. iio-sensor-proxy.
This came up when adding proximity support to iio-sensor-proxy [1], [2], it is
not meant as a vcnl4000 thing but rather as something useful for other proximity
sensors too in the future.
I've not converted the vcnl4000 binding docs to yaml but can do so as part of
this series in a v2 if the approach makes sense.
Changes from v3:
- as per review comment by Jonathan Cameron
Fix patch title and description of sysfs patch
https://lore.kernel.org/linux-iio/20200329102705.0a69000c@archlinux/
- Add Reviewed-by by Rob Herring, thanks!
https://lore.kernel.org/linux-iio/20200331214330.GA24010@bogus/
- As per review comments by Rob Herring
https://lore.kernel.org/linux-iio/20200331214517.GA24128@bogus/
- Rename property to proximity-near-level
- document proximity-near-level in a common file
Changes from v2:
- as per review comment by Lars-Peter Clausen
https://lore.kernel.org/linux-iio/[email protected]/
Switch sysfs name to `nearlevel`
- as per review comment by Nishant Malpani
https://lore.kernel.org/linux-iio/[email protected]/
Add manufacturer do binding document name
- as per review comments by Andy Shevchenko
- Drop superfluous blank line
- Check return value of device_property_read_u32 for '!= 0' instead of '< 0'
Changes from v1:
- as per review comments by Jonathan Cameron
https://lore.kernel.org/linux-iio/20200221120519.43b72007@archlinux/
Document new sysfs file in Documentation/ABI/testing/sysfs-bus-iio-proximity
- convert bindings to yaml
- bindings: fix typo in near-level property
[1]: https://gitlab.freedesktop.org/hadess/iio-sensor-proxy/merge_requests/298
[2]: https://lore.kernel.org/linux-iio/[email protected]/
To: Tomas Novotny <[email protected]>, Jonathan Cameron <[email protected]>,Hartmut Knaack <[email protected]>,Lars-Peter Clausen <[email protected]>,Peter Meerwald-Stadler <[email protected]>,"Angus Ainslie (Purism)" <[email protected]>,"Guido Günther" <[email protected]>,Marco Felsch <[email protected]>,Thomas Gleixner <[email protected]>,[email protected],[email protected],[email protected],Andy Shevchenko <[email protected]>,Nishant Malpani <[email protected]>
Guido Günther (5):
dt-bindings: iio: vcnl4000: convert bindings to YAML format
dt-bindings: iio: Introduce common properties for iio sensors
dt-bindings: iio: light: vcnl4000: Add proximity-near-level
iio: vcnl4000: Export near level property for proximity sensor
Documentation: ABI: document IIO in_proximity_nearlevel file
.../ABI/testing/sysfs-bus-iio-proximity | 10 ++++
.../devicetree/bindings/iio/common.yaml | 35 +++++++++++++
.../bindings/iio/light/vcnl4000.txt | 24 ---------
.../bindings/iio/light/vishay,vcnl4000.yaml | 50 +++++++++++++++++++
drivers/iio/light/vcnl4000.c | 25 ++++++++++
5 files changed, 120 insertions(+), 24 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-bus-iio-proximity
create mode 100644 Documentation/devicetree/bindings/iio/common.yaml
delete mode 100644 Documentation/devicetree/bindings/iio/light/vcnl4000.txt
create mode 100644 Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml
--
2.23.0
This value indicates when userspace should consider an object
near to the sensor/device.
Signed-off-by: Guido Günther <[email protected]>
---
.../devicetree/bindings/iio/light/vishay,vcnl4000.yaml | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml b/Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml
index 21ef2eb7a205..da8f2e872535 100644
--- a/Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml
+++ b/Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml
@@ -13,6 +13,9 @@ description: |
Ambient light sensing with proximity detection over an i2c
interface.
+allOf:
+ - $ref: ../common.yaml#
+
properties:
compatible:
enum:
@@ -21,10 +24,11 @@ properties:
- vishay,vcnl4020
- vishay,vcnl4040
- vishay,vcnl4200
-
reg:
maxItems: 1
+ proximity-near-level: true
+
required:
- compatible
- reg
@@ -40,6 +44,7 @@ examples:
light-sensor@51 {
compatible = "vishay,vcnl4200";
reg = <0x51>;
+ proximity-near-level = <220>;
};
};
...
--
2.23.0
Convert the vcnl4000 device tree bindings to the new YAML format.
Signed-off-by: Guido Günther <[email protected]>
Reviewed-by: Rob Herring <[email protected]>
---
.../bindings/iio/light/vcnl4000.txt | 24 ----------
.../bindings/iio/light/vishay,vcnl4000.yaml | 45 +++++++++++++++++++
2 files changed, 45 insertions(+), 24 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/iio/light/vcnl4000.txt
create mode 100644 Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml
diff --git a/Documentation/devicetree/bindings/iio/light/vcnl4000.txt b/Documentation/devicetree/bindings/iio/light/vcnl4000.txt
deleted file mode 100644
index 955af4555c90..000000000000
--- a/Documentation/devicetree/bindings/iio/light/vcnl4000.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-VISHAY VCNL4000 - Ambient Light and proximity sensor
-
-This driver supports the VCNL4000/10/20/40 and VCNL4200 chips
-
-Required properties:
-
- -compatible: must be one of :
- vishay,vcnl4000
- vishay,vcnl4010
- vishay,vcnl4020
- vishay,vcnl4040
- vishay,vcnl4200
-
- -reg: I2C address of the sensor, should be one from below based on the model:
- 0x13
- 0x51
- 0x60
-
-Example:
-
-light-sensor@51 {
- compatible = "vishay,vcnl4200";
- reg = <0x51>;
-};
diff --git a/Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml b/Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml
new file mode 100644
index 000000000000..21ef2eb7a205
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/light/vishay,vcnl4000.yaml
@@ -0,0 +1,45 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/light/vishay,vcnl4000.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: VISHAY VCNL4000 ambient light and proximity sensor
+
+maintainers:
+ - Peter Meerwald <[email protected]>
+
+description: |
+ Ambient light sensing with proximity detection over an i2c
+ interface.
+
+properties:
+ compatible:
+ enum:
+ - vishay,vcnl4000
+ - vishay,vcnl4010
+ - vishay,vcnl4020
+ - vishay,vcnl4040
+ - vishay,vcnl4200
+
+ reg:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+
+additionalProperties: false
+
+examples:
+- |
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ light-sensor@51 {
+ compatible = "vishay,vcnl4200";
+ reg = <0x51>;
+ };
+ };
+...
--
2.23.0
When an object can be considered close to the sensor is hardware
dependent. Allowing to configure the property via device tree
allows to configure this device specific value.
This is useful for e.g. iio-sensor-proxy to indicate to userspace
if an object is close to the sensor.
Signed-off-by: Guido Günther <[email protected]>
---
drivers/iio/light/vcnl4000.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
index ec803c1e81df..985cc39ede8e 100644
--- a/drivers/iio/light/vcnl4000.c
+++ b/drivers/iio/light/vcnl4000.c
@@ -83,6 +83,7 @@ struct vcnl4000_data {
struct mutex vcnl4000_lock;
struct vcnl4200_channel vcnl4200_al;
struct vcnl4200_channel vcnl4200_ps;
+ uint32_t near_level;
};
struct vcnl4000_chip_spec {
@@ -343,6 +344,25 @@ static const struct vcnl4000_chip_spec vcnl4000_chip_spec_cfg[] = {
},
};
+static ssize_t vcnl4000_read_near_level(struct iio_dev *indio_dev,
+ uintptr_t priv,
+ const struct iio_chan_spec *chan,
+ char *buf)
+{
+ struct vcnl4000_data *data = iio_priv(indio_dev);
+
+ return sprintf(buf, "%u\n", data->near_level);
+}
+
+static const struct iio_chan_spec_ext_info vcnl4000_ext_info[] = {
+ {
+ .name = "nearlevel",
+ .shared = IIO_SEPARATE,
+ .read = vcnl4000_read_near_level,
+ },
+ { /* sentinel */ }
+};
+
static const struct iio_chan_spec vcnl4000_channels[] = {
{
.type = IIO_LIGHT,
@@ -351,6 +371,7 @@ static const struct iio_chan_spec vcnl4000_channels[] = {
}, {
.type = IIO_PROXIMITY,
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
+ .ext_info = vcnl4000_ext_info,
}
};
@@ -440,6 +461,10 @@ static int vcnl4000_probe(struct i2c_client *client,
dev_dbg(&client->dev, "%s Ambient light/proximity sensor, Rev: %02x\n",
data->chip_spec->prod, data->rev);
+ if (device_property_read_u32(&client->dev, "proximity-near-level",
+ &data->near_level))
+ data->near_level = 0;
+
indio_dev->dev.parent = &client->dev;
indio_dev->info = &vcnl4000_info;
indio_dev->channels = vcnl4000_channels;
--
2.23.0
On Sun, 5 Apr 2020 15:50:30 +0200, =?UTF-8?q?Guido=20G=C3=BCnther?= wrote:
> This value indicates when userspace should consider an object
> near to the sensor/device.
>
> Signed-off-by: Guido G?nther <[email protected]>
> ---
> .../devicetree/bindings/iio/light/vishay,vcnl4000.yaml | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
Reviewed-by: Rob Herring <[email protected]>
On Tue, 14 Apr 2020 16:50:16 -0500
Rob Herring <[email protected]> wrote:
> On Sun, 5 Apr 2020 15:50:30 +0200, =?UTF-8?q?Guido=20G=C3=BCnther?= wrote:
> > This value indicates when userspace should consider an object
> > near to the sensor/device.
> >
> > Signed-off-by: Guido Günther <[email protected]>
> > ---
> > .../devicetree/bindings/iio/light/vishay,vcnl4000.yaml | 7 ++++++-
> > 1 file changed, 6 insertions(+), 1 deletion(-)
> >
>
> Reviewed-by: Rob Herring <[email protected]>
Applied. Thanks,
On Sun, 5 Apr 2020 15:50:31 +0200
Guido Günther <[email protected]> wrote:
> When an object can be considered close to the sensor is hardware
> dependent. Allowing to configure the property via device tree
> allows to configure this device specific value.
>
> This is useful for e.g. iio-sensor-proxy to indicate to userspace
> if an object is close to the sensor.
>
> Signed-off-by: Guido Günther <[email protected]>
Applied. Thanks,
> ---
> drivers/iio/light/vcnl4000.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/drivers/iio/light/vcnl4000.c b/drivers/iio/light/vcnl4000.c
> index ec803c1e81df..985cc39ede8e 100644
> --- a/drivers/iio/light/vcnl4000.c
> +++ b/drivers/iio/light/vcnl4000.c
> @@ -83,6 +83,7 @@ struct vcnl4000_data {
> struct mutex vcnl4000_lock;
> struct vcnl4200_channel vcnl4200_al;
> struct vcnl4200_channel vcnl4200_ps;
> + uint32_t near_level;
> };
>
> struct vcnl4000_chip_spec {
> @@ -343,6 +344,25 @@ static const struct vcnl4000_chip_spec vcnl4000_chip_spec_cfg[] = {
> },
> };
>
> +static ssize_t vcnl4000_read_near_level(struct iio_dev *indio_dev,
> + uintptr_t priv,
> + const struct iio_chan_spec *chan,
> + char *buf)
> +{
> + struct vcnl4000_data *data = iio_priv(indio_dev);
> +
> + return sprintf(buf, "%u\n", data->near_level);
> +}
> +
> +static const struct iio_chan_spec_ext_info vcnl4000_ext_info[] = {
> + {
> + .name = "nearlevel",
> + .shared = IIO_SEPARATE,
> + .read = vcnl4000_read_near_level,
> + },
> + { /* sentinel */ }
> +};
> +
> static const struct iio_chan_spec vcnl4000_channels[] = {
> {
> .type = IIO_LIGHT,
> @@ -351,6 +371,7 @@ static const struct iio_chan_spec vcnl4000_channels[] = {
> }, {
> .type = IIO_PROXIMITY,
> .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
> + .ext_info = vcnl4000_ext_info,
> }
> };
>
> @@ -440,6 +461,10 @@ static int vcnl4000_probe(struct i2c_client *client,
> dev_dbg(&client->dev, "%s Ambient light/proximity sensor, Rev: %02x\n",
> data->chip_spec->prod, data->rev);
>
> + if (device_property_read_u32(&client->dev, "proximity-near-level",
> + &data->near_level))
> + data->near_level = 0;
> +
> indio_dev->dev.parent = &client->dev;
> indio_dev->info = &vcnl4000_info;
> indio_dev->channels = vcnl4000_channels;