* [PATCH 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties
2022-05-10 20:42 [PATCH 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
@ 2022-05-10 20:42 ` Markuss Broks
2022-05-10 20:42 ` [PATCH 2/5] proximity: vl53l0x: Get interrupt type from DT Markuss Broks
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Markuss Broks @ 2022-05-10 20:42 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks, 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.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 2/5] proximity: vl53l0x: Get interrupt type from DT
2022-05-10 20:42 [PATCH 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
2022-05-10 20:42 ` [PATCH 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties Markuss Broks
@ 2022-05-10 20:42 ` Markuss Broks
2022-05-10 20:42 ` [PATCH 3/5] proximity: vl53l0x: Handle the VDD regulator Markuss Broks
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Markuss Broks @ 2022-05-10 20:42 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks, 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 TRIGGER_FALLING,
like hardcoded in driver. Leave interrupt flags as they were pre-configured
from the device-tree.
Signed-off-by: Markuss Broks <markuss.broks@gmail.com>
---
drivers/iio/proximity/vl53l0x-i2c.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/iio/proximity/vl53l0x-i2c.c b/drivers/iio/proximity/vl53l0x-i2c.c
index 661a79ea200d..16f809c479cb 100644
--- a/drivers/iio/proximity/vl53l0x-i2c.c
+++ b/drivers/iio/proximity/vl53l0x-i2c.c
@@ -61,7 +61,7 @@ static int vl53l0x_configure_irq(struct i2c_client *client,
int ret;
ret = devm_request_irq(&client->dev, client->irq, vl53l0x_handle_irq,
- IRQF_TRIGGER_FALLING, indio_dev->name, indio_dev);
+ 0, indio_dev->name, indio_dev);
if (ret) {
dev_err(&client->dev, "devm_request_irq error: %d\n", ret);
return ret;
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 3/5] proximity: vl53l0x: Handle the VDD regulator
2022-05-10 20:42 [PATCH 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
2022-05-10 20:42 ` [PATCH 1/5] dt-bindings: proximity: vl53l0x: Document optional supply and GPIO properties Markuss Broks
2022-05-10 20:42 ` [PATCH 2/5] proximity: vl53l0x: Get interrupt type from DT Markuss Broks
@ 2022-05-10 20:42 ` Markuss Broks
2022-05-10 20:42 ` [PATCH 4/5] proximity: vl53l0x: Handle the reset GPIO Markuss Broks
2022-05-10 20:42 ` [PATCH 5/5] arm64: dts: qcom: msm8998-xperia: Introduce ToF sensor support Markuss Broks
4 siblings, 0 replies; 7+ messages in thread
From: Markuss Broks @ 2022-05-10 20:42 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks, 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 16f809c479cb..74aeb2548ef6 100644
--- a/drivers/iio/proximity/vl53l0x-i2c.c
+++ b/drivers/iio/proximity/vl53l0x-i2c.c
@@ -42,6 +42,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)
@@ -187,10 +188,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)
@@ -205,6 +227,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.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 4/5] proximity: vl53l0x: Handle the reset GPIO
2022-05-10 20:42 [PATCH 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
` (2 preceding siblings ...)
2022-05-10 20:42 ` [PATCH 3/5] proximity: vl53l0x: Handle the VDD regulator Markuss Broks
@ 2022-05-10 20:42 ` Markuss Broks
2022-05-10 20:42 ` [PATCH 5/5] arm64: dts: qcom: msm8998-xperia: Introduce ToF sensor support Markuss Broks
4 siblings, 0 replies; 7+ messages in thread
From: Markuss Broks @ 2022-05-10 20:42 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks, 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 74aeb2548ef6..47022bc1504e 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/interrupt.h>
#include <linux/module.h>
@@ -43,6 +44,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)
@@ -192,6 +194,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);
}
@@ -203,6 +207,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;
@@ -232,6 +238,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.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH 5/5] arm64: dts: qcom: msm8998-xperia: Introduce ToF sensor support
2022-05-10 20:42 [PATCH 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
` (3 preceding siblings ...)
2022-05-10 20:42 ` [PATCH 4/5] proximity: vl53l0x: Handle the reset GPIO Markuss Broks
@ 2022-05-10 20:42 ` Markuss Broks
4 siblings, 0 replies; 7+ messages in thread
From: Markuss Broks @ 2022-05-10 20:42 UTC (permalink / raw)
To: linux-kernel
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks, 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..ba85177bdb1c 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,23 @@ &blsp2_uart1 {
status = "okay";
};
+&blsp2_i2c2 {
+ status = "okay";
+
+ proximity@29 {
+ compatible = "st,vl53l0x";
+ reg = <0x29>;
+
+ interrupt-parent = <&tlmm>;
+ interrupts = <22 IRQ_TYPE_LEVEL_LOW>;
+
+ reset-gpios = <&tlmm 27 GPIO_ACTIVE_LOW>;
+ vdd-supply = <&cam_vio_vreg>;
+
+ pinctrl-0 = <&tof_default>;
+ };
+};
+
&ibb {
regulator-min-microamp = <800000>;
regulator-max-microamp = <800000>;
@@ -621,6 +638,22 @@ hall_sensor0_default: acc-cover-open {
input-enable;
};
+ tof_default: tof-default {
+ tof-int {
+ pins = "gpio22";
+ function = "gpio";
+ bias-pull-up;
+ drive-strength = <2>;
+ input-enable;
+ };
+ tof-reset {
+ pins = "gpio27";
+ function = "gpio";
+ bias-disable;
+ drive-strength = <2>;
+ };
+ };
+
ts_int_n: ts-int-n {
pins = "gpio125";
function = "gpio";
--
2.35.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/5] proximity: vl53l0x: Handle the reset GPIO
2022-05-23 17:53 [PATCH v5 0/5] Add support for ToF sensor on Yoshino platform Markuss Broks
@ 2022-05-23 17:53 ` Markuss Broks
0 siblings, 0 replies; 7+ messages in thread
From: Markuss Broks @ 2022-05-23 17:53 UTC (permalink / raw)
To: linux-kernel, jic23
Cc: ~postmarketos/upstreaming, phone-devel, Markuss Broks,
Konrad Dybcio, Marijn Suijten, AngeloGioacchino Del Regno,
Song Qiang, 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 8581a873919f..36c48a824725 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 = vl53l0x_power_on(data);
if (error)
return dev_err_probe(&client->dev, error,
--
2.36.1
^ permalink raw reply related [flat|nested] 7+ messages in thread