devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] phy: add basic support for NXPs TJA1145 CAN transceiver
@ 2025-10-13  9:19 Dimitri Fedrau via B4 Relay
  2025-10-13  9:19 ` [PATCH v3 1/2] dt-bindings: phy: add " Dimitri Fedrau via B4 Relay
  2025-10-13  9:19 ` [PATCH v3 2/2] phy: add basic " Dimitri Fedrau via B4 Relay
  0 siblings, 2 replies; 9+ messages in thread
From: Dimitri Fedrau via B4 Relay @ 2025-10-13  9:19 UTC (permalink / raw)
  To: Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-phy, devicetree, linux-kernel, Dimitri Fedrau,
	Dimitri Fedrau, Marc Kleine-Budde, linux-can

Add basic driver support for NXPs TJA1145 CAN transceiver which brings the
PHY up/down by switching to normal/standby mode using SPI commands.

Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
---
Changes in v3:
- bindings: fix SPI bus unit address format error
- bindings: added resolution of discussion into commit msg
- Checked binding with:
  make dt_binding_check DT_SCHEMA_FILES=nxp,tja1145-can.yaml
  Missed it for V2, didn't do it intentionally. Sorry.
- Link to v2: https://lore.kernel.org/r/20250829-tja1145-support-v2-0-60997f328979@liebherr.com

Changes in v2:
- bindings: Change node name in example to can-phy
- bindings: Fix order of properties, reg property is second
- bindings: Change compatible to match filename
- change compatible to nxp,tja1145-can
- Link to v1: https://lore.kernel.org/r/20250728-tja1145-support-v1-0-ebd8494d545c@liebherr.com

---
Dimitri Fedrau (2):
      dt-bindings: phy: add support for NXPs TJA1145 CAN transceiver
      phy: add basic support for NXPs TJA1145 CAN transceiver

 .../devicetree/bindings/phy/nxp,tja1145-can.yaml   |  79 +++++++++
 drivers/phy/Kconfig                                |  10 ++
 drivers/phy/Makefile                               |   1 +
 drivers/phy/phy-nxp-tja1145.c                      | 185 +++++++++++++++++++++
 4 files changed, 275 insertions(+)
---
base-commit: 920852baf6bdffb2818c0de8ff3437d8f6570dc2
change-id: 20250726-tja1145-support-d6ccdc4d2da3

Best regards,
-- 
Dimitri Fedrau <dimitri.fedrau@liebherr.com>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v3 1/2] dt-bindings: phy: add support for NXPs TJA1145 CAN transceiver
  2025-10-13  9:19 [PATCH v3 0/2] phy: add basic support for NXPs TJA1145 CAN transceiver Dimitri Fedrau via B4 Relay
@ 2025-10-13  9:19 ` Dimitri Fedrau via B4 Relay
  2025-10-13 19:41   ` Conor Dooley
  2025-10-13  9:19 ` [PATCH v3 2/2] phy: add basic " Dimitri Fedrau via B4 Relay
  1 sibling, 1 reply; 9+ messages in thread
From: Dimitri Fedrau via B4 Relay @ 2025-10-13  9:19 UTC (permalink / raw)
  To: Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-phy, devicetree, linux-kernel, Dimitri Fedrau,
	Dimitri Fedrau, Marc Kleine-Budde, linux-can

From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>

Adding documentation for NXPs TJA1145 CAN transceiver, which resides like
the ti,tcan104x-can.yaml in the same directory as other generic PHY
subsystem bindings. At the moment there is only support for simple PHYs
by using regulator bindings in combination with can-transceiver.yaml or
PHYs that implement the generic PHY subsystem like the NXP TJA1145.

Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
---
 .../devicetree/bindings/phy/nxp,tja1145-can.yaml   | 79 ++++++++++++++++++++++
 1 file changed, 79 insertions(+)

diff --git a/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml b/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3b81a2e1ead8452ed5fcf2021f33d628d4e12346
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml
@@ -0,0 +1,79 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/nxp,tja1145-can.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: TJA1145 CAN transceiver
+
+maintainers:
+  - Dimitri Fedrau <dimitri.fedrau@liebherr.com>
+
+allOf:
+  - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+  compatible:
+    const: nxp,tja1145-can
+
+  reg:
+    maxItems: 1
+
+  "#phy-cells":
+    const: 0
+
+  spi-max-frequency:
+    maximum: 4000000
+
+  spi-cpha: true
+
+  spi-cs-setup-delay-ns:
+    minimum: 50
+    default: 50
+
+  spi-cs-hold-delay-ns:
+    minimum: 50
+    default: 50
+
+  spi-cs-inactive-delay-ns:
+    minimum: 250
+    default: 250
+
+  vcc-supply:
+    description:
+      CAN transceiver supply voltage
+
+  vio-supply:
+    description:
+      Supply voltage for I/O level adaptor
+
+  vbat-supply:
+    description:
+      Battery supply voltage
+
+required:
+  - compatible
+  - reg
+  - "#phy-cells"
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    spi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        can-phy@0 {
+            compatible = "nxp,tja1145-can";
+            reg = <0>;
+            #phy-cells = <0>;
+            spi-max-frequency = <4000000>;
+            spi-cpha;
+            spi-cs-setup-delay-ns = <50>;
+            spi-cs-hold-delay-ns = <50>;
+            spi-cs-inactive-delay-ns = <250>;
+            vcc-supply = <&reg_5v0>;
+            vio-supply = <&reg_3v3>;
+            vbat-supply = <&reg_24v0>;
+        };
+    };

-- 
2.39.5



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 2/2] phy: add basic support for NXPs TJA1145 CAN transceiver
  2025-10-13  9:19 [PATCH v3 0/2] phy: add basic support for NXPs TJA1145 CAN transceiver Dimitri Fedrau via B4 Relay
  2025-10-13  9:19 ` [PATCH v3 1/2] dt-bindings: phy: add " Dimitri Fedrau via B4 Relay
@ 2025-10-13  9:19 ` Dimitri Fedrau via B4 Relay
  2025-10-13  9:36   ` Marc Kleine-Budde
  2025-10-13  9:51   ` Marc Kleine-Budde
  1 sibling, 2 replies; 9+ messages in thread
From: Dimitri Fedrau via B4 Relay @ 2025-10-13  9:19 UTC (permalink / raw)
  To: Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley
  Cc: linux-phy, devicetree, linux-kernel, Dimitri Fedrau,
	Dimitri Fedrau, Marc Kleine-Budde, linux-can

From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>

Add basic driver support for NXPs TJA1145 CAN transceiver which brings the
PHY up/down by switching to normal/standby mode using SPI commands.

Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
---
 drivers/phy/Kconfig           |  10 +++
 drivers/phy/Makefile          |   1 +
 drivers/phy/phy-nxp-tja1145.c | 185 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 196 insertions(+)

diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 678dd0452f0aa0597773433f04d2a9ba77474d2a..2f2c8f29cce2beb20c584adfe8acfe23de14e128 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -101,6 +101,16 @@ config PHY_NXP_PTN3222
 	  schemes. It supports all three USB 2.0 data rates: Low Speed, Full
 	  Speed and High Speed.
 
+config PHY_NXP_TJA1145
+	tristate "NXP TJA1145 CAN transceiver PHY"
+	select GENERIC_PHY
+	select REGMAP_SPI
+	depends on SPI
+	help
+	  This option enables support for NXPs TJA1145 CAN transceiver as a PHY.
+	  This driver provides function for putting the transceiver in various
+	  functional modes using SPI commands.
+
 source "drivers/phy/allwinner/Kconfig"
 source "drivers/phy/amlogic/Kconfig"
 source "drivers/phy/broadcom/Kconfig"
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index bfb27fb5a494283d7fd05dd670ebd1b12df8b1a1..48eac644d1e2b20f986f80de95b40c26d080358b 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -13,6 +13,7 @@ obj-$(CONFIG_PHY_SNPS_EUSB2)		+= phy-snps-eusb2.o
 obj-$(CONFIG_USB_LGM_PHY)		+= phy-lgm-usb.o
 obj-$(CONFIG_PHY_AIROHA_PCIE)		+= phy-airoha-pcie.o
 obj-$(CONFIG_PHY_NXP_PTN3222)		+= phy-nxp-ptn3222.o
+obj-$(CONFIG_PHY_NXP_TJA1145)		+= phy-nxp-tja1145.o
 obj-y					+= allwinner/	\
 					   amlogic/	\
 					   broadcom/	\
diff --git a/drivers/phy/phy-nxp-tja1145.c b/drivers/phy/phy-nxp-tja1145.c
new file mode 100644
index 0000000000000000000000000000000000000000..4d3aa5bfcd88d5755fa37e0d42bfa8293dee2155
--- /dev/null
+++ b/drivers/phy/phy-nxp-tja1145.c
@@ -0,0 +1,185 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2025 Liebherr-Electronics and Drives GmbH
+ */
+#include <linux/bitfield.h>
+#include <linux/module.h>
+#include <linux/regmap.h>
+
+#include <linux/phy/phy.h>
+#include <linux/spi/spi.h>
+
+#define TJA1145_MODE_CTRL		0x01
+#define TJA1145_MODE_CTRL_MC		GENMASK(2, 0)
+#define TJA1145_MODE_CRTL_STBY		BIT(2)
+#define TJA1145_MODE_CRTL_NORMAL	TJA1145_MODE_CTRL_MC
+
+#define TJA1145_CAN_CTRL		0x20
+#define TJA1145_CAN_CTRL_CMC		GENMASK(1, 0)
+#define TJA1145_CAN_CTRL_ACTIVE		BIT(1)
+
+#define TJA1145_IDENT			0x7e
+#define TJA1145_IDENT_TJA1145T		0x70
+
+#define TJA1145_SPI_READ_BIT		BIT(0)
+#define TJA1145T_MAX_BITRATE		1000000
+
+static int tja1145_phy_power_on(struct phy *phy)
+{
+	struct regmap *map = phy_get_drvdata(phy);
+	int ret;
+
+	/*
+	 * Switch operating mode to normal which is the active operating mode.
+	 * In this mode, the device is fully operational.
+	 */
+	ret = regmap_update_bits(map, TJA1145_MODE_CTRL, TJA1145_MODE_CTRL_MC,
+				 TJA1145_MODE_CRTL_NORMAL);
+	if (ret)
+		return ret;
+
+	/*
+	 * Switch to CAN operating mode active where the PHY can transmit and
+	 * receive data.
+	 */
+	return regmap_update_bits(map, TJA1145_CAN_CTRL, TJA1145_CAN_CTRL_CMC,
+				  TJA1145_CAN_CTRL_ACTIVE);
+}
+
+static int tja1145_phy_power_off(struct phy *phy)
+{
+	struct regmap *map = phy_get_drvdata(phy);
+
+	/*
+	 * Switch to operating mode standby, the PHY is unable to transmit or
+	 * receive data in standby mode.
+	 */
+	return regmap_update_bits(map, TJA1145_MODE_CTRL, TJA1145_MODE_CTRL_MC,
+				  TJA1145_MODE_CRTL_STBY);
+}
+
+static const struct phy_ops tja1145_phy_ops = {
+	.power_on = tja1145_phy_power_on,
+	.power_off = tja1145_phy_power_off,
+};
+
+static const struct regmap_range tja1145_wr_holes_ranges[] = {
+	regmap_reg_range(0x00, 0x00),
+	regmap_reg_range(0x02, 0x03),
+	regmap_reg_range(0x05, 0x05),
+	regmap_reg_range(0x0b, 0x1f),
+	regmap_reg_range(0x21, 0x22),
+	regmap_reg_range(0x24, 0x25),
+	regmap_reg_range(0x30, 0x4b),
+	regmap_reg_range(0x4d, 0x60),
+	regmap_reg_range(0x62, 0x62),
+	regmap_reg_range(0x65, 0x67),
+	regmap_reg_range(0x70, 0xff),
+};
+
+static const struct regmap_access_table tja1145_wr_table = {
+	.no_ranges = tja1145_wr_holes_ranges,
+	.n_no_ranges = ARRAY_SIZE(tja1145_wr_holes_ranges),
+};
+
+static const struct regmap_range tja1145_rd_holes_ranges[] = {
+	regmap_reg_range(0x00, 0x00),
+	regmap_reg_range(0x02, 0x02),
+	regmap_reg_range(0x05, 0x05),
+	regmap_reg_range(0x0b, 0x1f),
+	regmap_reg_range(0x21, 0x21),
+	regmap_reg_range(0x24, 0x25),
+	regmap_reg_range(0x30, 0x4a),
+	regmap_reg_range(0x4d, 0x5f),
+	regmap_reg_range(0x62, 0x62),
+	regmap_reg_range(0x65, 0x67),
+	regmap_reg_range(0x70, 0x7d),
+	regmap_reg_range(0x7f, 0xff),
+};
+
+static const struct regmap_access_table tja1145_rd_table = {
+	.no_ranges = tja1145_rd_holes_ranges,
+	.n_no_ranges = ARRAY_SIZE(tja1145_rd_holes_ranges),
+};
+
+
+static const struct regmap_config tja1145_regmap_config = {
+	.reg_bits = 8,
+	.reg_shift = -1,
+	.val_bits = 8,
+	.wr_table = &tja1145_wr_table,
+	.rd_table = &tja1145_rd_table,
+	.read_flag_mask = TJA1145_SPI_READ_BIT,
+	.max_register = TJA1145_IDENT,
+};
+
+static int tja1145_check_ident(struct device *dev, struct regmap *map)
+{
+	unsigned int val;
+	int ret;
+
+	ret = regmap_read(map, TJA1145_IDENT, &val);
+	if (ret)
+		return ret;
+
+	if (val != TJA1145_IDENT_TJA1145T) {
+		dev_err(dev, "Expected device id: 0x%02x, got: 0x%02x\n",
+			TJA1145_IDENT_TJA1145T, val);
+		return -ENODEV;
+	}
+
+	return 0;
+}
+
+static int tja1145_probe(struct spi_device *spi)
+{
+	struct phy_provider *phy_provider;
+	struct device *dev = &spi->dev;
+	struct regmap *map;
+	struct phy *phy;
+	int ret;
+
+	map = devm_regmap_init_spi(spi, &tja1145_regmap_config);
+	if (IS_ERR(map))
+		return dev_err_probe(dev, PTR_ERR(map), "failed to init regmap\n");
+
+	ret = tja1145_check_ident(dev, map);
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to identify device\n");
+
+	phy = devm_phy_create(dev, dev->of_node, &tja1145_phy_ops);
+	if (IS_ERR(phy))
+		return dev_err_probe(dev, PTR_ERR(phy), "failed to create PHY\n");
+
+	phy->attrs.max_link_rate = TJA1145T_MAX_BITRATE;
+	phy_set_drvdata(phy, map);
+	phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+
+	return PTR_ERR_OR_ZERO(phy_provider);
+}
+
+static const struct spi_device_id tja1145_spi_id[] = {
+	{ "tja1145" },
+	{ }
+};
+MODULE_DEVICE_TABLE(spi, tja1145_spi_id);
+
+static const struct of_device_id tja1145_of_match[] = {
+	{ .compatible = "nxp,tja1145-can" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, tja1145_of_match);
+
+static struct spi_driver tja1145_driver = {
+	.driver = {
+		.name = "tja1145",
+		.of_match_table = tja1145_of_match,
+	},
+	.probe = tja1145_probe,
+	.id_table = tja1145_spi_id,
+};
+module_spi_driver(tja1145_driver);
+
+MODULE_DESCRIPTION("NXP TJA1145 CAN transceiver PHY driver");
+MODULE_AUTHOR("Dimitri Fedrau <dimitri.fedrau@liebherr.com>");
+MODULE_LICENSE("GPL");

-- 
2.39.5



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 2/2] phy: add basic support for NXPs TJA1145 CAN transceiver
  2025-10-13  9:19 ` [PATCH v3 2/2] phy: add basic " Dimitri Fedrau via B4 Relay
@ 2025-10-13  9:36   ` Marc Kleine-Budde
  2025-10-13  9:51   ` Marc Kleine-Budde
  1 sibling, 0 replies; 9+ messages in thread
From: Marc Kleine-Budde @ 2025-10-13  9:36 UTC (permalink / raw)
  To: Dimitri Fedrau via B4 Relay
  Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-phy, devicetree,
	linux-kernel, Dimitri Fedrau, Dimitri Fedrau, linux-can

[-- Attachment #1: Type: text/plain, Size: 5825 bytes --]

On 13.10.2025 11:19:19, Dimitri Fedrau via B4 Relay wrote:
> From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> 
> Add basic driver support for NXPs TJA1145 CAN transceiver which brings the
> PHY up/down by switching to normal/standby mode using SPI commands.
> 
> Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> ---
>  drivers/phy/Kconfig           |  10 +++
>  drivers/phy/Makefile          |   1 +
>  drivers/phy/phy-nxp-tja1145.c | 185 ++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 196 insertions(+)
> 
> diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
> index 678dd0452f0aa0597773433f04d2a9ba77474d2a..2f2c8f29cce2beb20c584adfe8acfe23de14e128 100644
> --- a/drivers/phy/Kconfig
> +++ b/drivers/phy/Kconfig
> @@ -101,6 +101,16 @@ config PHY_NXP_PTN3222
>  	  schemes. It supports all three USB 2.0 data rates: Low Speed, Full
>  	  Speed and High Speed.
>  
> +config PHY_NXP_TJA1145
> +	tristate "NXP TJA1145 CAN transceiver PHY"
> +	select GENERIC_PHY
> +	select REGMAP_SPI
> +	depends on SPI
> +	help
> +	  This option enables support for NXPs TJA1145 CAN transceiver as a PHY.
> +	  This driver provides function for putting the transceiver in various
> +	  functional modes using SPI commands.
> +
>  source "drivers/phy/allwinner/Kconfig"
>  source "drivers/phy/amlogic/Kconfig"
>  source "drivers/phy/broadcom/Kconfig"
> diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
> index bfb27fb5a494283d7fd05dd670ebd1b12df8b1a1..48eac644d1e2b20f986f80de95b40c26d080358b 100644
> --- a/drivers/phy/Makefile
> +++ b/drivers/phy/Makefile
> @@ -13,6 +13,7 @@ obj-$(CONFIG_PHY_SNPS_EUSB2)		+= phy-snps-eusb2.o
>  obj-$(CONFIG_USB_LGM_PHY)		+= phy-lgm-usb.o
>  obj-$(CONFIG_PHY_AIROHA_PCIE)		+= phy-airoha-pcie.o
>  obj-$(CONFIG_PHY_NXP_PTN3222)		+= phy-nxp-ptn3222.o
> +obj-$(CONFIG_PHY_NXP_TJA1145)		+= phy-nxp-tja1145.o
>  obj-y					+= allwinner/	\
>  					   amlogic/	\
>  					   broadcom/	\
> diff --git a/drivers/phy/phy-nxp-tja1145.c b/drivers/phy/phy-nxp-tja1145.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..4d3aa5bfcd88d5755fa37e0d42bfa8293dee2155
> --- /dev/null
> +++ b/drivers/phy/phy-nxp-tja1145.c
> @@ -0,0 +1,185 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright (C) 2025 Liebherr-Electronics and Drives GmbH
> + */
> +#include <linux/bitfield.h>
> +#include <linux/module.h>
> +#include <linux/regmap.h>
> +
> +#include <linux/phy/phy.h>
> +#include <linux/spi/spi.h>
> +
> +#define TJA1145_MODE_CTRL		0x01
> +#define TJA1145_MODE_CTRL_MC		GENMASK(2, 0)
> +#define TJA1145_MODE_CRTL_STBY		BIT(2)
> +#define TJA1145_MODE_CRTL_NORMAL	TJA1145_MODE_CTRL_MC
> +
> +#define TJA1145_CAN_CTRL		0x20
> +#define TJA1145_CAN_CTRL_CMC		GENMASK(1, 0)
> +#define TJA1145_CAN_CTRL_ACTIVE		BIT(1)
> +
> +#define TJA1145_IDENT			0x7e
> +#define TJA1145_IDENT_TJA1145T		0x70
> +
> +#define TJA1145_SPI_READ_BIT		BIT(0)
> +#define TJA1145T_MAX_BITRATE		1000000
> +
> +static int tja1145_phy_power_on(struct phy *phy)
> +{
> +	struct regmap *map = phy_get_drvdata(phy);
> +	int ret;
> +
> +	/*
> +	 * Switch operating mode to normal which is the active operating mode.
> +	 * In this mode, the device is fully operational.
> +	 */
> +	ret = regmap_update_bits(map, TJA1145_MODE_CTRL, TJA1145_MODE_CTRL_MC,
> +				 TJA1145_MODE_CRTL_NORMAL);
> +	if (ret)
> +		return ret;
> +
> +	/*
> +	 * Switch to CAN operating mode active where the PHY can transmit and
> +	 * receive data.
> +	 */
> +	return regmap_update_bits(map, TJA1145_CAN_CTRL, TJA1145_CAN_CTRL_CMC,
> +				  TJA1145_CAN_CTRL_ACTIVE);
> +}
> +
> +static int tja1145_phy_power_off(struct phy *phy)
> +{
> +	struct regmap *map = phy_get_drvdata(phy);
> +
> +	/*
> +	 * Switch to operating mode standby, the PHY is unable to transmit or
> +	 * receive data in standby mode.
> +	 */
> +	return regmap_update_bits(map, TJA1145_MODE_CTRL, TJA1145_MODE_CTRL_MC,
> +				  TJA1145_MODE_CRTL_STBY);
> +}
> +
> +static const struct phy_ops tja1145_phy_ops = {
> +	.power_on = tja1145_phy_power_on,
> +	.power_off = tja1145_phy_power_off,
> +};
> +
> +static const struct regmap_range tja1145_wr_holes_ranges[] = {
> +	regmap_reg_range(0x00, 0x00),
> +	regmap_reg_range(0x02, 0x03),
> +	regmap_reg_range(0x05, 0x05),
> +	regmap_reg_range(0x0b, 0x1f),
> +	regmap_reg_range(0x21, 0x22),
> +	regmap_reg_range(0x24, 0x25),
> +	regmap_reg_range(0x30, 0x4b),
> +	regmap_reg_range(0x4d, 0x60),
> +	regmap_reg_range(0x62, 0x62),
> +	regmap_reg_range(0x65, 0x67),
> +	regmap_reg_range(0x70, 0xff),
> +};
> +
> +static const struct regmap_access_table tja1145_wr_table = {
> +	.no_ranges = tja1145_wr_holes_ranges,
> +	.n_no_ranges = ARRAY_SIZE(tja1145_wr_holes_ranges),
> +};
> +
> +static const struct regmap_range tja1145_rd_holes_ranges[] = {
> +	regmap_reg_range(0x00, 0x00),
> +	regmap_reg_range(0x02, 0x02),
> +	regmap_reg_range(0x05, 0x05),
> +	regmap_reg_range(0x0b, 0x1f),
> +	regmap_reg_range(0x21, 0x21),
> +	regmap_reg_range(0x24, 0x25),
> +	regmap_reg_range(0x30, 0x4a),
> +	regmap_reg_range(0x4d, 0x5f),
> +	regmap_reg_range(0x62, 0x62),
> +	regmap_reg_range(0x65, 0x67),
> +	regmap_reg_range(0x70, 0x7d),
> +	regmap_reg_range(0x7f, 0xff),
> +};
> +
> +static const struct regmap_access_table tja1145_rd_table = {
> +	.no_ranges = tja1145_rd_holes_ranges,
> +	.n_no_ranges = ARRAY_SIZE(tja1145_rd_holes_ranges),
> +};
> +
> +

Nitpick: double newline.

Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde          |
Embedded Linux                   | https://www.pengutronix.de |
Vertretung Nürnberg              | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-9   |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 2/2] phy: add basic support for NXPs TJA1145 CAN transceiver
  2025-10-13  9:19 ` [PATCH v3 2/2] phy: add basic " Dimitri Fedrau via B4 Relay
  2025-10-13  9:36   ` Marc Kleine-Budde
@ 2025-10-13  9:51   ` Marc Kleine-Budde
  2025-10-13 11:36     ` Dimitri Fedrau
  1 sibling, 1 reply; 9+ messages in thread
From: Marc Kleine-Budde @ 2025-10-13  9:51 UTC (permalink / raw)
  To: Dimitri Fedrau via B4 Relay
  Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-phy, devicetree,
	linux-kernel, Dimitri Fedrau, Dimitri Fedrau, linux-can

[-- Attachment #1: Type: text/plain, Size: 662 bytes --]

On 13.10.2025 11:19:19, Dimitri Fedrau via B4 Relay wrote:
> Add basic driver support for NXPs TJA1145 CAN transceiver which brings the
> PHY up/down by switching to normal/standby mode using SPI commands.

The PHY supports standby and sleep mode. Does the PHY framework provide
a way to configure this?

Why do you put the transceiver into standby not in sleep mode?

regards,
Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde          |
Embedded Linux                   | https://www.pengutronix.de |
Vertretung Nürnberg              | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-9   |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 2/2] phy: add basic support for NXPs TJA1145 CAN transceiver
  2025-10-13  9:51   ` Marc Kleine-Budde
@ 2025-10-13 11:36     ` Dimitri Fedrau
  2025-10-13 11:44       ` Marc Kleine-Budde
  0 siblings, 1 reply; 9+ messages in thread
From: Dimitri Fedrau @ 2025-10-13 11:36 UTC (permalink / raw)
  To: Marc Kleine-Budde
  Cc: Dimitri Fedrau via B4 Relay, Vinod Koul, Kishon Vijay Abraham I,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-phy,
	devicetree, linux-kernel, Dimitri Fedrau, linux-can

Am Mon, Oct 13, 2025 at 11:51:51AM +0200 schrieb Marc Kleine-Budde:
> On 13.10.2025 11:19:19, Dimitri Fedrau via B4 Relay wrote:
> > Add basic driver support for NXPs TJA1145 CAN transceiver which brings the
> > PHY up/down by switching to normal/standby mode using SPI commands.
> 
> The PHY supports standby and sleep mode. Does the PHY framework provide
> a way to configure this?
> 

Didn't find anything related.

> Why do you put the transceiver into standby not in sleep mode?
> 
Datasheet states:

Standby mode is the first-level power-saving mode of the TJA1145A,
featuring low current consumption. The transceiver is unable to transmit
or receive data in Standby mode, but the INH pin remains active so voltage
regulators controlled by this pin will be active.

Sleep mode is the second-level power saving mode of the TJA1145A. In Sleep
mode, the transceiver behaves as in Standby Mode with the exception that
pin INH is set to a high-ohmic state. Voltage regulators controlled by this
pin will be switched off, and the current into pin BAT will be reduced to a
minimum.

I'm assuming that the sleep state would fit into some suspend,
power-off, ... scenario, because the INH pin maybe used to control
regulators.

Best regards,
Dimitri Fedrau

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 2/2] phy: add basic support for NXPs TJA1145 CAN transceiver
  2025-10-13 11:36     ` Dimitri Fedrau
@ 2025-10-13 11:44       ` Marc Kleine-Budde
  0 siblings, 0 replies; 9+ messages in thread
From: Marc Kleine-Budde @ 2025-10-13 11:44 UTC (permalink / raw)
  To: Dimitri Fedrau
  Cc: Dimitri Fedrau via B4 Relay, Vinod Koul, Kishon Vijay Abraham I,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-phy,
	devicetree, linux-kernel, Dimitri Fedrau, linux-can

[-- Attachment #1: Type: text/plain, Size: 1860 bytes --]

On 13.10.2025 13:36:05, Dimitri Fedrau wrote:
> Am Mon, Oct 13, 2025 at 11:51:51AM +0200 schrieb Marc Kleine-Budde:
> > On 13.10.2025 11:19:19, Dimitri Fedrau via B4 Relay wrote:
> > > Add basic driver support for NXPs TJA1145 CAN transceiver which brings the
> > > PHY up/down by switching to normal/standby mode using SPI commands.
> > 
> > The PHY supports standby and sleep mode. Does the PHY framework provide
> > a way to configure this?
> > 
> 
> Didn't find anything related.
> 
> > Why do you put the transceiver into standby not in sleep mode?
> > 
> Datasheet states:
> 
> Standby mode is the first-level power-saving mode of the TJA1145A,
> featuring low current consumption. The transceiver is unable to transmit
> or receive data in Standby mode, but the INH pin remains active so voltage
> regulators controlled by this pin will be active.
> 
> Sleep mode is the second-level power saving mode of the TJA1145A. In Sleep
> mode, the transceiver behaves as in Standby Mode with the exception that
> pin INH is set to a high-ohmic state. Voltage regulators controlled by this
> pin will be switched off, and the current into pin BAT will be reduced to a
> minimum.
> 
> I'm assuming that the sleep state would fit into some suspend,
> power-off, ... scenario, because the INH pin maybe used to control
> regulators.

That makes sense, and I think it depends heavily on the use case of the
system. This can be implemented as soon as the need arises.

For the whole series:

Reviewed-by: Marc Kleine-Budde <mkl@pengutronix.de>

regards,
Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde          |
Embedded Linux                   | https://www.pengutronix.de |
Vertretung Nürnberg              | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-9   |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] dt-bindings: phy: add support for NXPs TJA1145 CAN transceiver
  2025-10-13  9:19 ` [PATCH v3 1/2] dt-bindings: phy: add " Dimitri Fedrau via B4 Relay
@ 2025-10-13 19:41   ` Conor Dooley
  2025-10-14 12:19     ` Dimitri Fedrau
  0 siblings, 1 reply; 9+ messages in thread
From: Conor Dooley @ 2025-10-13 19:41 UTC (permalink / raw)
  To: dimitri.fedrau
  Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-phy, devicetree,
	linux-kernel, Dimitri Fedrau, Marc Kleine-Budde, linux-can

[-- Attachment #1: Type: text/plain, Size: 3318 bytes --]

On Mon, Oct 13, 2025 at 11:19:18AM +0200, Dimitri Fedrau via B4 Relay wrote:
> From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> 
> Adding documentation for NXPs TJA1145 CAN transceiver, which resides like
> the ti,tcan104x-can.yaml in the same directory as other generic PHY
> subsystem bindings. At the moment there is only support for simple PHYs
> by using regulator bindings in combination with can-transceiver.yaml or
> PHYs that implement the generic PHY subsystem like the NXP TJA1145.
> 
> Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> ---
>  .../devicetree/bindings/phy/nxp,tja1145-can.yaml   | 79 ++++++++++++++++++++++
>  1 file changed, 79 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml b/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml
> new file mode 100644
> index 0000000000000000000000000000000000000000..3b81a2e1ead8452ed5fcf2021f33d628d4e12346
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml
> @@ -0,0 +1,79 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/phy/nxp,tja1145-can.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: TJA1145 CAN transceiver
> +
> +maintainers:
> +  - Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> +
> +allOf:
> +  - $ref: /schemas/spi/spi-peripheral-props.yaml#
> +
> +properties:
> +  compatible:
> +    const: nxp,tja1145-can

I'd drop the -can here, since I don't think the device can be anything
else?

> +
> +  reg:
> +    maxItems: 1
> +
> +  "#phy-cells":
> +    const: 0
> +
> +  spi-max-frequency:
> +    maximum: 4000000
> +
> +  spi-cpha: true

Is this optionally cpha or always? I'd mark it required if it is always
needed for the device to function.

> +
> +  spi-cs-setup-delay-ns:
> +    minimum: 50
> +    default: 50
> +
> +  spi-cs-hold-delay-ns:
> +    minimum: 50
> +    default: 50
> +
> +  spi-cs-inactive-delay-ns:
> +    minimum: 250
> +    default: 250
> +
> +  vcc-supply:
> +    description:
> +      CAN transceiver supply voltage
> +
> +  vio-supply:
> +    description:
> +      Supply voltage for I/O level adaptor
> +
> +  vbat-supply:
> +    description:
> +      Battery supply voltage
> +
> +required:
> +  - compatible
> +  - reg
> +  - "#phy-cells"
> +
> +unevaluatedProperties: false

If the properties you've listed above from spi-peripheral-props are the
only ones suitable for the device, I think additionalProperties: false
is sufficient here.

Cheers,
Conor.

pw-bot: changes-requested

> +
> +examples:
> +  - |
> +    spi {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        can-phy@0 {
> +            compatible = "nxp,tja1145-can";
> +            reg = <0>;
> +            #phy-cells = <0>;
> +            spi-max-frequency = <4000000>;
> +            spi-cpha;
> +            spi-cs-setup-delay-ns = <50>;
> +            spi-cs-hold-delay-ns = <50>;
> +            spi-cs-inactive-delay-ns = <250>;
> +            vcc-supply = <&reg_5v0>;
> +            vio-supply = <&reg_3v3>;
> +            vbat-supply = <&reg_24v0>;
> +        };
> +    };
> 
> -- 
> 2.39.5
> 
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/2] dt-bindings: phy: add support for NXPs TJA1145 CAN transceiver
  2025-10-13 19:41   ` Conor Dooley
@ 2025-10-14 12:19     ` Dimitri Fedrau
  0 siblings, 0 replies; 9+ messages in thread
From: Dimitri Fedrau @ 2025-10-14 12:19 UTC (permalink / raw)
  To: Conor Dooley
  Cc: dimitri.fedrau, Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-phy, devicetree,
	linux-kernel, Marc Kleine-Budde, linux-can

Am Mon, Oct 13, 2025 at 08:41:49PM +0100 schrieb Conor Dooley:
> On Mon, Oct 13, 2025 at 11:19:18AM +0200, Dimitri Fedrau via B4 Relay wrote:
> > From: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> > 
> > Adding documentation for NXPs TJA1145 CAN transceiver, which resides like
> > the ti,tcan104x-can.yaml in the same directory as other generic PHY
> > subsystem bindings. At the moment there is only support for simple PHYs
> > by using regulator bindings in combination with can-transceiver.yaml or
> > PHYs that implement the generic PHY subsystem like the NXP TJA1145.
> > 
> > Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> > ---
> >  .../devicetree/bindings/phy/nxp,tja1145-can.yaml   | 79 ++++++++++++++++++++++
> >  1 file changed, 79 insertions(+)
> > 
> > diff --git a/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml b/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml
> > new file mode 100644
> > index 0000000000000000000000000000000000000000..3b81a2e1ead8452ed5fcf2021f33d628d4e12346
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/phy/nxp,tja1145-can.yaml
> > @@ -0,0 +1,79 @@
> > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/phy/nxp,tja1145-can.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: TJA1145 CAN transceiver
> > +
> > +maintainers:
> > +  - Dimitri Fedrau <dimitri.fedrau@liebherr.com>
> > +
> > +allOf:
> > +  - $ref: /schemas/spi/spi-peripheral-props.yaml#
> > +
> > +properties:
> > +  compatible:
> > +    const: nxp,tja1145-can
> 
> I'd drop the -can here, since I don't think the device can be anything
> else?
>
Will drop the -can. Device cannot be anything else.

> > +
> > +  reg:
> > +    maxItems: 1
> > +
> > +  "#phy-cells":
> > +    const: 0
> > +
> > +  spi-max-frequency:
> > +    maximum: 4000000
> > +
> > +  spi-cpha: true
> 
> Is this optionally cpha or always? I'd mark it required if it is always
> needed for the device to function.
> 
According to the datasheet it is cpha. Didn't test if the device is
running with a different configuration. I mark it as required then.

> > +
> > +  spi-cs-setup-delay-ns:
> > +    minimum: 50
> > +    default: 50
> > +
> > +  spi-cs-hold-delay-ns:
> > +    minimum: 50
> > +    default: 50
> > +
> > +  spi-cs-inactive-delay-ns:
> > +    minimum: 250
> > +    default: 250
> > +
> > +  vcc-supply:
> > +    description:
> > +      CAN transceiver supply voltage
> > +
> > +  vio-supply:
> > +    description:
> > +      Supply voltage for I/O level adaptor
> > +
> > +  vbat-supply:
> > +    description:
> > +      Battery supply voltage
> > +
> > +required:
> > +  - compatible
> > +  - reg
> > +  - "#phy-cells"
> > +
> > +unevaluatedProperties: false
> 
> If the properties you've listed above from spi-peripheral-props are the
> only ones suitable for the device, I think additionalProperties: false
> is sufficient here.
> 
I switch to additionalProperties: false then

Best regards,
Dimitri Fedrau

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-10-14 12:19 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-13  9:19 [PATCH v3 0/2] phy: add basic support for NXPs TJA1145 CAN transceiver Dimitri Fedrau via B4 Relay
2025-10-13  9:19 ` [PATCH v3 1/2] dt-bindings: phy: add " Dimitri Fedrau via B4 Relay
2025-10-13 19:41   ` Conor Dooley
2025-10-14 12:19     ` Dimitri Fedrau
2025-10-13  9:19 ` [PATCH v3 2/2] phy: add basic " Dimitri Fedrau via B4 Relay
2025-10-13  9:36   ` Marc Kleine-Budde
2025-10-13  9:51   ` Marc Kleine-Budde
2025-10-13 11:36     ` Dimitri Fedrau
2025-10-13 11:44       ` Marc Kleine-Budde

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).