[RFC PATCH 2/2] tcan4x5x: set nwkrq voltage

Sean Nyekjaer <[email protected]> Thu, 6 Aug 2026 09:48:59 +0200
Newsgroups gmane.comp.boot-loaders.u-boot
Message-ID <20260806074917.418220-2-sean__4452.69459612376$1786003128$gmane$org@geanix.com>
nwkrq can be driven from vio or vsup voltage, read from devicetree to
determine which rail should drive nwkrq.

Signed-off-by: Sean Nyekjaer <[email protected]>
---
 drivers/misc/tcan4x5x.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/drivers/misc/tcan4x5x.c b/drivers/misc/tcan4x5x.c
index a304f3db9df..e9e63f06e13 100644
--- a/drivers/misc/tcan4x5x.c
+++ b/drivers/misc/tcan4x5x.c
@@ -10,6 +10,7 @@
 
 #define TCAN4X5X_CONFIG 0x800
 #define TCAN4X5X_MODE_BITS (BIT(7) | BIT(6))
+#define TCAN4X5X_NWKRQ_VOLTAGE_VIO BIT(19)
 
 struct tcan4x5x_transfer {
 	u8 cmd;
@@ -87,6 +88,28 @@ static int tcan4x5x_enable_sleep(struct udevice *dev)
 	return ret;
 }
 
+static int tcan4x5x_nwkrq_vio(struct udevice *dev)
+{
+	u32 val;
+	int ret;
+
+	ret = tcan4x5x_read_reg(dev, TCAN4X5X_CONFIG, &val);
+	if (ret) {
+		log_err("failed to read from tcan4x5x\n");
+		return ret;
+	}
+
+	log_debug("read %x\n", val);
+	val |= TCAN4X5X_NWKRQ_VOLTAGE_VIO;
+	log_debug("write %x\n", val);
+
+	ret = tcan4x5x_write_reg(dev, TCAN4X5X_CONFIG, val);
+	if (ret)
+		log_err("reg write failed (%d)\n", ret);
+
+	return ret;
+}
+
 static int tcan4x5x_probe(struct udevice *dev)
 {
 	struct gpio_desc rst;
@@ -119,6 +142,13 @@ static int tcan4x5x_probe(struct udevice *dev)
 	 */
 	udelay(1000);
 
+	if (dev_read_bool(dev, "ti,nwkrq-voltage-vio")) {
+		log_debug("set nwkrq voltage to vio\n");
+		ret = tcan4x5x_nwkrq_vio(dev);
+		if (ret)
+			return ret;
+	}
+
 	return tcan4x5x_enable_sleep(dev);
 }
 
-- 
2.55.0