* [PATCH v3 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties
2022-05-12 11:07 [PATCH v3 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
@ 2022-05-12 11:07 ` Markuss Broks
2022-05-13 8:53 ` Krzysztof Kozlowski
2022-05-12 11:07 ` [PATCH v3 2/5] proximity: vl53l0x: Prefer pre-initialized interrupt flags Markuss Broks
` (3 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Markuss Broks @ 2022-05-12 11:07 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks,
Konrad Dybcio, Marijn Suijten, AngeloGioacchino Del Regno,
Song Qiang, Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Andy Gross, Bjorn Andersson, Liam Girdwood,
Mark Brown, linux-iio, devicetree, linux-arm-msm
This patch adds the optional properties for the VL53L0X ToF sensor to the
device-tree binding.
Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
---
.../devicetree/bindings/iio/proximity/st,vl53l0x.yaml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml b/Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml
index 656460d9d8c8..322befc41de6 100644
--- a/Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml
+++ b/Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml
@@ -19,6 +19,11 @@ properties:
interrupts:
maxItems: 1
+ reset-gpios:
+ maxItems: 1
+
+ vdd-supply: true
+
required:
- compatible
- reg
--
2.36.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties
2022-05-12 11:07 ` [PATCH v3 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties Markuss Broks
@ 2022-05-13 8:53 ` Krzysztof Kozlowski
0 siblings, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2022-05-13 8:53 UTC (permalink / raw)
To: Markuss Broks, linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Konrad Dybcio,
Marijn Suijten, AngeloGioacchino Del Regno, Song Qiang,
Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Andy Gross, Bjorn Andersson, Liam Girdwood,
Mark Brown, linux-iio, devicetree, linux-arm-msm
On 12/05/2022 13:07, Markuss Broks wrote:
> This patch adds the optional properties for the VL53L0X ToF sensor to the
> device-tree binding.
>
> Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
Same comments as your v2.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 2/5] proximity: vl53l0x: Prefer pre-initialized interrupt flags
2022-05-12 11:07 [PATCH v3 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
2022-05-12 11:07 ` [PATCH v3 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties Markuss Broks
@ 2022-05-12 11:07 ` Markuss Broks
2022-05-12 11:07 ` [PATCH v3 3/5] proximity: vl53l0x: Handle the VDD regulator Markuss Broks
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Markuss Broks @ 2022-05-12 11:07 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks,
Konrad Dybcio, Marijn Suijten, AngeloGioacchino Del Regno,
Song Qiang, Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Andy Gross, Bjorn Andersson, Liam Girdwood,
Mark Brown, linux-iio, devicetree, linux-arm-msm
On some boards interrupt type might be different than falling edge,
like hardcoded in driver. Leave interrupt flags as they were pre-configured
from the device-tree. If they're not provided, default to falling edge
interrupts.
Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
---
drivers/iio/proximity/vl53l0x-i2c.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/iio/proximity/vl53l0x-i2c.c b/drivers/iio/proximity/vl53l0x-i2c.c
index 661a79ea200d..12a3e2eff464 100644
--- a/drivers/iio/proximity/vl53l0x-i2c.c
+++ b/drivers/iio/proximity/vl53l0x-i2c.c
@@ -16,6 +16,7 @@
#include <linux/delay.h>
#include <linux/i2c.h>
+#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/module.h>
@@ -57,11 +58,15 @@ static irqreturn_t vl53l0x_handle_irq(int irq, void *priv)
static int vl53l0x_configure_irq(struct i2c_client *client,
struct iio_dev *indio_dev)
{
+ int irq_flags = irq_get_trigger_type(client->irq);
struct vl53l0x_data *data = iio_priv(indio_dev);
int ret;
+ if (!irq_flags)
+ irq_flags = IRQF_TRIGGER_FALLING;
+
ret = devm_request_irq(&client->dev, client->irq, vl53l0x_handle_irq,
- IRQF_TRIGGER_FALLING, indio_dev->name, indio_dev);
+ irq_flags, indio_dev->name, indio_dev);
if (ret) {
dev_err(&client->dev, "devm_request_irq error: %d\n", ret);
return ret;
--
2.36.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 3/5] proximity: vl53l0x: Handle the VDD regulator
2022-05-12 11:07 [PATCH v3 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
2022-05-12 11:07 ` [PATCH v3 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties Markuss Broks
2022-05-12 11:07 ` [PATCH v3 2/5] proximity: vl53l0x: Prefer pre-initialized interrupt flags Markuss Broks
@ 2022-05-12 11:07 ` Markuss Broks
2022-05-12 16:55 ` Jonathan Cameron
2022-05-12 11:07 ` [PATCH v3 4/5] proximity: vl53l0x: Handle the reset GPIO Markuss Broks
2022-05-12 11:07 ` [PATCH v3 5/5] arm64: dts: qcom: msm8998-xperia: Introduce ToF sensor support Markuss Broks
4 siblings, 1 reply; 8+ messages in thread
From: Markuss Broks @ 2022-05-12 11:07 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks,
Konrad Dybcio, Marijn Suijten, AngeloGioacchino Del Regno,
Song Qiang, Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Andy Gross, Bjorn Andersson, Liam Girdwood,
Mark Brown, linux-iio, devicetree, linux-arm-msm
Handle the regulator supplying the VDD pin of VL53L0X.
Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
---
drivers/iio/proximity/vl53l0x-i2c.c | 37 +++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/drivers/iio/proximity/vl53l0x-i2c.c b/drivers/iio/proximity/vl53l0x-i2c.c
index 12a3e2eff464..d8523e3981e8 100644
--- a/drivers/iio/proximity/vl53l0x-i2c.c
+++ b/drivers/iio/proximity/vl53l0x-i2c.c
@@ -43,6 +43,7 @@
struct vl53l0x_data {
struct i2c_client *client;
struct completion completion;
+ struct regulator *vdd_supply;
};
static irqreturn_t vl53l0x_handle_irq(int irq, void *priv)
@@ -192,10 +193,31 @@ static const struct iio_info vl53l0x_info = {
.read_raw = vl53l0x_read_raw,
};
+static void vl53l0x_power_off(void *_data)
+{
+ struct vl53l0x_data *data = _data;
+
+ regulator_disable(data->vdd_supply);
+}
+
+static int vl53l0x_power_on(struct vl53l0x_data *data)
+{
+ int ret;
+
+ ret = regulator_enable(data->vdd_supply);
+ if (ret)
+ return ret;
+
+ usleep_range(3200, 5000);
+
+ return 0;
+}
+
static int vl53l0x_probe(struct i2c_client *client)
{
struct vl53l0x_data *data;
struct iio_dev *indio_dev;
+ int error;
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
if (!indio_dev)
@@ -210,6 +232,21 @@ static int vl53l0x_probe(struct i2c_client *client)
I2C_FUNC_SMBUS_BYTE_DATA))
return -EOPNOTSUPP;
+ data->vdd_supply = devm_regulator_get_optional(&client->dev, "vdd");
+ if (IS_ERR(data->vdd_supply))
+ return dev_err_probe(&client->dev, PTR_ERR(data->vdd_supply),
+ "Unable to get VDD regulator\n");
+
+ error = devm_add_action_or_reset(&client->dev, vl53l0x_power_off, data);
+ if (error)
+ return dev_err_probe(&client->dev, error,
+ "Failed to install poweroff action\n");
+
+ error = vl53l0x_power_on(data);
+ if (error)
+ return dev_err_probe(&client->dev, error,
+ "Failed to power on the chip\n");
+
indio_dev->name = "vl53l0x";
indio_dev->info = &vl53l0x_info;
indio_dev->channels = vl53l0x_channels;
--
2.36.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 3/5] proximity: vl53l0x: Handle the VDD regulator
2022-05-12 11:07 ` [PATCH v3 3/5] proximity: vl53l0x: Handle the VDD regulator Markuss Broks
@ 2022-05-12 16:55 ` Jonathan Cameron
0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2022-05-12 16:55 UTC (permalink / raw)
To: Markuss Broks
Cc: linux-kernel, ~postmarketos/upstreaming, phone-devel,
Konrad Dybcio, Marijn Suijten, AngeloGioacchino Del Regno,
Song Qiang, Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Andy Gross, Bjorn Andersson, Liam Girdwood,
Mark Brown, linux-iio, devicetree, linux-arm-msm
On Thu, 12 May 2022 14:07:55 +0300
Markuss Broks <markuss.broks@gmail.com> wrote:
> Handle the regulator supplying the VDD pin of VL53L0X.
>
> Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
Hi Markuss,
One ordering question inline.
> ---
> drivers/iio/proximity/vl53l0x-i2c.c | 37 +++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/drivers/iio/proximity/vl53l0x-i2c.c b/drivers/iio/proximity/vl53l0x-i2c.c
> index 12a3e2eff464..d8523e3981e8 100644
> --- a/drivers/iio/proximity/vl53l0x-i2c.c
> +++ b/drivers/iio/proximity/vl53l0x-i2c.c
> @@ -43,6 +43,7 @@
> struct vl53l0x_data {
> struct i2c_client *client;
> struct completion completion;
> + struct regulator *vdd_supply;
> };
>
> static irqreturn_t vl53l0x_handle_irq(int irq, void *priv)
> @@ -192,10 +193,31 @@ static const struct iio_info vl53l0x_info = {
> .read_raw = vl53l0x_read_raw,
> };
>
> +static void vl53l0x_power_off(void *_data)
> +{
> + struct vl53l0x_data *data = _data;
> +
> + regulator_disable(data->vdd_supply);
> +}
> +
> +static int vl53l0x_power_on(struct vl53l0x_data *data)
> +{
> + int ret;
> +
> + ret = regulator_enable(data->vdd_supply);
> + if (ret)
> + return ret;
> +
> + usleep_range(3200, 5000);
> +
> + return 0;
> +}
> +
> static int vl53l0x_probe(struct i2c_client *client)
> {
> struct vl53l0x_data *data;
> struct iio_dev *indio_dev;
> + int error;
>
> indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
> if (!indio_dev)
> @@ -210,6 +232,21 @@ static int vl53l0x_probe(struct i2c_client *client)
> I2C_FUNC_SMBUS_BYTE_DATA))
> return -EOPNOTSUPP;
>
> + data->vdd_supply = devm_regulator_get_optional(&client->dev, "vdd");
> + if (IS_ERR(data->vdd_supply))
> + return dev_err_probe(&client->dev, PTR_ERR(data->vdd_supply),
> + "Unable to get VDD regulator\n");
> +
> + error = devm_add_action_or_reset(&client->dev, vl53l0x_power_off, data);
I don't follow why you have this before the power_on. We haven't enabled the
regulator yet so shouldn't be turning it off if we get an error whilst trying
to enable it. The or_reset part is to ensure that even if this call
fails to register a devm action it will still call the callback thus allowing
you safely do this after turning the power on.
> + if (error)
> + return dev_err_probe(&client->dev, error,
> + "Failed to install poweroff action\n");
> +
> + error = vl53l0x_power_on(data);
> + if (error)
> + return dev_err_probe(&client->dev, error,
> + "Failed to power on the chip\n");
> +
> indio_dev->name = "vl53l0x";
> indio_dev->info = &vl53l0x_info;
> indio_dev->channels = vl53l0x_channels;
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 4/5] proximity: vl53l0x: Handle the reset GPIO
2022-05-12 11:07 [PATCH v3 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
` (2 preceding siblings ...)
2022-05-12 11:07 ` [PATCH v3 3/5] proximity: vl53l0x: Handle the VDD regulator Markuss Broks
@ 2022-05-12 11:07 ` Markuss Broks
2022-05-12 11:07 ` [PATCH v3 5/5] arm64: dts: qcom: msm8998-xperia: Introduce ToF sensor support Markuss Broks
4 siblings, 0 replies; 8+ messages in thread
From: Markuss Broks @ 2022-05-12 11:07 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks,
Konrad Dybcio, Marijn Suijten, AngeloGioacchino Del Regno,
Song Qiang, Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Andy Gross, Bjorn Andersson, Liam Girdwood,
Mark Brown, linux-iio, devicetree, linux-arm-msm
Handle the GPIO connected to the XSHUT/RST_N pin of VL53L0X.
Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
---
drivers/iio/proximity/vl53l0x-i2c.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/iio/proximity/vl53l0x-i2c.c b/drivers/iio/proximity/vl53l0x-i2c.c
index d8523e3981e8..ef099dd174c1 100644
--- a/drivers/iio/proximity/vl53l0x-i2c.c
+++ b/drivers/iio/proximity/vl53l0x-i2c.c
@@ -15,6 +15,7 @@
*/
#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
@@ -44,6 +45,7 @@ struct vl53l0x_data {
struct i2c_client *client;
struct completion completion;
struct regulator *vdd_supply;
+ struct gpio_desc *reset_gpio;
};
static irqreturn_t vl53l0x_handle_irq(int irq, void *priv)
@@ -197,6 +199,8 @@ static void vl53l0x_power_off(void *_data)
{
struct vl53l0x_data *data = _data;
+ gpiod_set_value_cansleep(data->reset_gpio, 1);
+
regulator_disable(data->vdd_supply);
}
@@ -208,6 +212,8 @@ static int vl53l0x_power_on(struct vl53l0x_data *data)
if (ret)
return ret;
+ gpiod_set_value_cansleep(data->reset_gpio, 0);
+
usleep_range(3200, 5000);
return 0;
@@ -237,6 +243,11 @@ static int vl53l0x_probe(struct i2c_client *client)
return dev_err_probe(&client->dev, PTR_ERR(data->vdd_supply),
"Unable to get VDD regulator\n");
+ data->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(data->reset_gpio))
+ return dev_err_probe(&client->dev, PTR_ERR(data->reset_gpio),
+ "Cannot get reset GPIO\n");
+
error = devm_add_action_or_reset(&client->dev, vl53l0x_power_off, data);
if (error)
return dev_err_probe(&client->dev, error,
--
2.36.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 5/5] arm64: dts: qcom: msm8998-xperia: Introduce ToF sensor support
2022-05-12 11:07 [PATCH v3 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
` (3 preceding siblings ...)
2022-05-12 11:07 ` [PATCH v3 4/5] proximity: vl53l0x: Handle the reset GPIO Markuss Broks
@ 2022-05-12 11:07 ` Markuss Broks
4 siblings, 0 replies; 8+ messages in thread
From: Markuss Broks @ 2022-05-12 11:07 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks,
Konrad Dybcio, Marijn Suijten, AngeloGioacchino Del Regno,
Song Qiang, Jonathan Cameron, Lars-Peter Clausen, Rob Herring,
Krzysztof Kozlowski, Andy Gross, Bjorn Andersson, Liam Girdwood,
Mark Brown, linux-iio, devicetree, linux-arm-msm
This patch adds device tree support for the VL53L0X ToF sensor
found on all Yoshino devices.
Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
---
.../dts/qcom/msm8998-sony-xperia-yoshino.dtsi | 33 +++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/msm8998-sony-xperia-yoshino.dtsi b/arch/arm64/boot/dts/qcom/msm8998-sony-xperia-yoshino.dtsi
index 47488a1aecae..a95fa29aa18b 100644
--- a/arch/arm64/boot/dts/qcom/msm8998-sony-xperia-yoshino.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm8998-sony-xperia-yoshino.dtsi
@@ -245,6 +245,24 @@ &blsp2_uart1 {
status = "okay";
};
+&blsp2_i2c2 {
+ status = "okay";
+
+ proximity@29 {
+ compatible = "st,vl53l0x";
+ reg = <0x29>;
+
+ interrupt-parent = <&tlmm>;
+ interrupts = <22 IRQ_TYPE_EDGE_FALLING>;
+
+ reset-gpios = <&tlmm 27 GPIO_ACTIVE_LOW>;
+ vdd-supply = <&cam_vio_vreg>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&tof_int &tof_reset>;
+ };
+};
+
&ibb {
regulator-min-microamp = <800000>;
regulator-max-microamp = <800000>;
@@ -621,6 +639,21 @@ hall_sensor0_default: acc-cover-open {
input-enable;
};
+ tof_int: tof-int {
+ pins = "gpio22";
+ function = "gpio";
+ bias-pull-up;
+ drive-strength = <2>;
+ input-enable;
+ };
+
+ tof_reset: tof-reset {
+ pins = "gpio27";
+ function = "gpio";
+ bias-disable;
+ drive-strength = <2>;
+ };
+
ts_int_n: ts-int-n {
pins = "gpio125";
function = "gpio";
--
2.36.1
^ permalink raw reply related [flat|nested] 8+ messages in thread