* [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup emperor platform
@ 2026-03-18 8:54 Bruno Thomsen
2026-03-18 8:54 ` [PATCH 2/2] dt-bindings: omap: add kamstrup am335x " Bruno Thomsen
2026-03-18 17:41 ` [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup " Conor Dooley
0 siblings, 2 replies; 4+ messages in thread
From: Bruno Thomsen @ 2026-03-18 8:54 UTC (permalink / raw)
To: devicetree, linux-omap
Cc: Lars Alex Pedersen, Conor Dooley, Krzysztof Kozlowski,
Rob Herring, Tony Lindgren, Roger Quadros, Kevin Hilman,
Andreas Kemnade, Aaro Koskinen, Bruno Thomsen
Device tree can be used on the following 3 products:
- Kamstrup READy Concentrator 1M (RC1M)
- Kamstrup READy Concentrator 2M (RC2M)
- Kamstrup READy Concentrator 2C (RC2C)
Concentrators are used as 868MHz gateway for heat, cooling and water
meters using wM-Bus, Kamstrup LinkIQ or OMS LPWAN communication protocols.
RC1M only support one way communication (Rx only) where RC2M and RC2C
support full two way communication (Rx/Tx) with meters.
Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com>
Co-developed-by: Lars Alex Pedersen <lapeddk@gmail.com>
Signed-off-by: Lars Alex Pedersen <lapeddk@gmail.com>
---
Note: AM33XX_PADCONF lines are longer then 100 columns but it's a common
warning in am335x DTS.
arch/arm/boot/dts/ti/omap/am335x-emperor.dts | 690 +++++++++++++++++++
1 file changed, 690 insertions(+)
create mode 100644 arch/arm/boot/dts/ti/omap/am335x-emperor.dts
diff --git a/arch/arm/boot/dts/ti/omap/am335x-emperor.dts b/arch/arm/boot/dts/ti/omap/am335x-emperor.dts
new file mode 100644
index 000000000000..b135708e73fb
--- /dev/null
+++ b/arch/arm/boot/dts/ti/omap/am335x-emperor.dts
@@ -0,0 +1,690 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Device Tree Source for Kamstrup READy Concentrator 1M/2M/2C.
+ *
+ * Copyright (C) 2025 Kamstrup A/S
+ * Author: Bruno Thomsen <bruno.thomsen@gmail.com>
+ * Lars Alex Pedersen <lapeddk@gmail.com>
+ */
+/dts-v1/;
+
+#include "am33xx.dtsi"
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+ model = "Kamstrup READy Concentrator 1M/2M/2C";
+ compatible = "kam,am335x-emperor", "ti,am33xx";
+
+ memory@80000000 {
+ device_type = "memory";
+ reg = <0x80000000 0x10000000>; /* 256 MB */
+ };
+
+ chosen {
+ stdout-path = &uart0;
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ pinctrl-names = "default";
+ pinctrl-0 = <&leds_pins_default>;
+
+ led0 {
+ label = "led0";
+ gpios = <&gpio2 24 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ };
+
+ led1 {
+ label = "led1";
+ gpios = <&gpio2 22 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ };
+
+ led2 {
+ label = "led2";
+ gpios = <&gpio2 23 GPIO_ACTIVE_LOW>;
+ default-state = "off";
+ };
+
+ led3 {
+ label = "led3";
+ gpios = <&gpio2 25 GPIO_ACTIVE_LOW>;
+ default-state = "on";
+ linux,default-trigger = "heartbeat";
+ };
+ };
+
+ sdr-radio-control {
+ compatible = "gpio-leds";
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdr_radio_control_pins_default>;
+
+ led_radio_power {
+ label = "RADIO_POWER";
+ gpios = <&gpio3 18 GPIO_ACTIVE_HIGH>;
+ default-state = "on";
+ };
+
+ led_radio_flash_mux {
+ label = "RADIO_FLASH_MUX";
+ gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
+ default-state = "on";
+ };
+
+ led_radio_reset {
+ label = "RADIO_RESET";
+ gpios = <&gpio3 20 GPIO_ACTIVE_HIGH>;
+ default-state = "off";
+ };
+
+ led_radio_flash_reset {
+ label = "RADIO_FLASH_RESET";
+ gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
+ default-state = "on";
+ };
+ };
+
+ regulators {
+ compatible = "simple-bus";
+
+ vcc_fixed: vcc_fixed {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_fixed";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-boot-on;
+ };
+
+ vmmcsd_fixed: fixedregulator0 {
+ compatible = "regulator-fixed";
+ regulator-name = "vmmcsd_fixed";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ };
+ };
+};
+
+/*
+ * Restrict 1.1 V operating point to increase SoC life-time
+ * by removing the follow opp's:
+ * - OPP120-1
+ * - OPP120-2
+ * - OPP120-2
+ * - OPP Turbo-2
+ * - OPP Nitro
+ *
+ * Note: This limit SoC operating point to maximum 600 MHz.
+ */
+&cpu0_opp_table {
+ /delete-node/ opp-120-600000000;
+ /delete-node/ opp-120-720000000;
+ /delete-node/ opp-720000000;
+ /delete-node/ opp-800000000;
+ /delete-node/ opp-1000000000;
+};
+
+&gpio0 {
+ gpio-line-names =
+ "MDIO_DATA",
+ "MDIO_CLK",
+ "SPI0_CLK",
+ "SPI0_MOSI",
+ "SPI0_MISO",
+ "SPI0_CS0",
+ "POWER_FAILURE",
+ "SPI1_CLK",
+ "SYS_BOOT12",
+ "SYS_BOOT13",
+ "SYS_BOOT14",
+ "SYS_BOOT15",
+ "RADIO_TEMP_CRIT",
+ "RADIO_TEMP_ALERT",
+ "I2C1_SDA",
+ "I2C1_SCL",
+ "MII1_TXD3",
+ "MII1_TXD2",
+ "USB0_DRVVBUS",
+ "RADIO_GPIO4",
+ "RADIO_IRQ",
+ "MII1_TXD1",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "MII1_TXD0",
+ "PHY_IRQ",
+ "NC",
+ "NC";
+};
+
+&gpio1 {
+ gpio-line-names =
+ "MMC1_DAT0",
+ "MMC1_DAT1",
+ "MMC1_DAT2",
+ "MMC1_DAT3",
+ "MMC1_DAT4",
+ "MMC1_DAT5",
+ "MMC1_DAT6",
+ "MMC1_DAT7",
+ "UART4_RX",
+ "UART4_TX",
+ "UART0_RX",
+ "UART0_TX",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "TEST_MODE",
+ "NC",
+ "RADIO_GPIO5",
+ "MMC1_CMD";
+};
+
+&gpio2 {
+ gpio-line-names =
+ "NC",
+ "NC",
+ "RADIO_GPIO0",
+ "RADIO_GPIO1",
+ "RADIO_GPIO2",
+ "RADIO_GPIO3",
+ "SYS_BOOT0",
+ "SYS_BOOT1",
+ "SYS_BOOT2",
+ "SYS_BOOT3",
+ "SYS_BOOT4",
+ "SYS_BOOT5",
+ "SYS_BOOT6",
+ "SYS_BOOT7",
+ "SYS_BOOT8",
+ "SYS_BOOT9",
+ "SYS_BOOT10",
+ "SYS_BOOT11",
+ "MII1_RXD3",
+ "MII1_RXD2",
+ "MII1_RXD1",
+ "MII1_RXD0",
+ "LED2",
+ "LED3",
+ "LED1",
+ "LED4",
+ "MMC0_DAT3",
+ "MMC0_DAT2",
+ "MMC0_DAT1",
+ "MMC0_DAT0",
+ "MMC0_CLK0",
+ "MMC0_CMD";
+};
+
+&gpio3 {
+ gpio-line-names =
+ "MII1_COL",
+ "MII1_CRS_DV",
+ "MII1_RXERR",
+ "MII1_TXEN",
+ "MII1_RXDV",
+ "I2C0_SDA",
+ "I2C0_SCL",
+ "NC",
+ "NC",
+ "MII1_TXCLK",
+ "MII1_RXCLK",
+ "NC",
+ "NC",
+ "NC",
+ "RTC_IRQ",
+ "RTC_TAMPER",
+ "RADIO_INIT_B",
+ "RADIO_PRG_DONE",
+ "RADIO_POWER",
+ "RADIO_FLASH_MUX",
+ "RADIO_RESET",
+ "RADIO_FLASH_RESET",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC",
+ "NC";
+
+ eeprom-wp-hog {
+ gpio-hog;
+ gpios = <13 GPIO_ACTIVE_HIGH>;
+ output-low;
+ };
+};
+
+&am33xx_pinmux {
+ pinctrl-names = "default";
+ pinctrl-0 = <
+ &pinctrl_board_pins_default
+ &sdr_radio_pins_default>;
+
+ temperature_pins: temperature-pins {
+ pinctrl-single,pins = <
+ // Critical radio temperature
+ AM33XX_PADCONF(AM335X_PIN_UART1_CTSN, PIN_INPUT_PULLUP, MUX_MODE7) /* (D18) uart1_ctsn.gpio0[12] */
+ >;
+ };
+
+ rtc_pins_default: rtc-pins {
+ pinctrl-single,pins = <
+ // RTC Interrupt
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_ACLKX, PIN_INPUT, MUX_MODE7) /* (A13) mcasp0_aclkx.gpio3[14] */
+ // Tamper state
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_FSX, PIN_INPUT, MUX_MODE7) /* (B13) mcasp0_fsx.gpio3[15] */
+ // Power failure
+ AM33XX_PADCONF(AM335X_PIN_SPI0_CS1, PIN_INPUT, MUX_MODE7) /* (C15) spi0_cs1.gpio0[6] */
+ >;
+ };
+
+ mii1_pins_default: mii1-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_MII1_COL, PIN_INPUT, MUX_MODE0) /* (H16) gmii1_col.gmii1_col */
+ AM33XX_PADCONF(AM335X_PIN_MII1_CRS, PIN_INPUT, MUX_MODE0) /* (H17) gmii1_crs.gmii1_crs */
+ AM33XX_PADCONF(AM335X_PIN_MII1_RX_ER, PIN_INPUT, MUX_MODE0) /* (J15) gmii1_rxer.gmii1_rxer */
+ AM33XX_PADCONF(AM335X_PIN_MII1_TX_EN, PIN_OUTPUT, MUX_MODE0) /* (J16) gmii1_txen.gmii1_txen */
+ AM33XX_PADCONF(AM335X_PIN_MII1_RX_DV, PIN_INPUT, MUX_MODE0) /* (J17) gmii1_rxdv.gmii1_rxdv */
+ AM33XX_PADCONF(AM335X_PIN_MII1_TX_CLK, PIN_INPUT, MUX_MODE0) /* (K18) gmii1_txclk.gmii1_txclk */
+ AM33XX_PADCONF(AM335X_PIN_MII1_RX_CLK, PIN_INPUT, MUX_MODE0) /* (L18) gmii1_rxclk.gmii1_rxclk */
+ AM33XX_PADCONF(AM335X_PIN_MII1_TXD0, PIN_OUTPUT, MUX_MODE0) /* (K17) gmii1_txd0.gmii1_txd0 */
+ AM33XX_PADCONF(AM335X_PIN_MII1_TXD1, PIN_OUTPUT, MUX_MODE0) /* (K16) gmii1_txd1.gmii1_txd1 */
+ AM33XX_PADCONF(AM335X_PIN_MII1_TXD2, PIN_OUTPUT, MUX_MODE0) /* (K15) gmii1_txd2.gmii1_txd2 */
+ AM33XX_PADCONF(AM335X_PIN_MII1_TXD3, PIN_OUTPUT, MUX_MODE0) /* (J18) gmii1_txd3.gmii1_txd3 */
+ AM33XX_PADCONF(AM335X_PIN_MII1_RXD0, PIN_INPUT, MUX_MODE0) /* (M16) gmii1_rxd0.gmii1_rxd0 */
+ AM33XX_PADCONF(AM335X_PIN_MII1_RXD1, PIN_INPUT, MUX_MODE0) /* (L15) gmii1_rxd1.gmii1_rxd1 */
+ AM33XX_PADCONF(AM335X_PIN_MII1_RXD2, PIN_INPUT, MUX_MODE0) /* (L16) gmii1_rxd2.gmii1_rxd2 */
+ AM33XX_PADCONF(AM335X_PIN_MII1_RXD3, PIN_INPUT, MUX_MODE0) /* (L17) gmii1_rxd3.gmii1_rxd3 */
+ >;
+ };
+
+ mdio_pins_default: mdio-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_MDC, PIN_OUTPUT_PULLUP, MUX_MODE0) /* (M18) mdio_clk.mdio_clk */
+ AM33XX_PADCONF(AM335X_PIN_MDIO, PIN_INPUT_PULLUP, MUX_MODE0) /* (M17) mdio_data.mdio_data */
+ >;
+ };
+
+ i2c0_pins_default: i2c0-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_I2C0_SCL, PIN_INPUT, MUX_MODE0) /* (C16) I2C0_SCL.I2C0_SCL */
+ AM33XX_PADCONF(AM335X_PIN_I2C0_SDA, PIN_INPUT, MUX_MODE0) /* (C17) I2C0_SDA.I2C0_SDA */
+ >;
+ };
+
+ i2c1_pins_default: i2c1-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_UART1_TXD, PIN_INPUT, MUX_MODE3) /* (D15) uart1_txd.I2C1_SCL */
+ AM33XX_PADCONF(AM335X_PIN_UART1_RXD, PIN_INPUT, MUX_MODE3) /* (D16) uart1_rxd.I2C1_SDA */
+ >;
+ };
+
+ spi0_pins_default: spi0-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_SPI0_SCLK, PIN_INPUT, MUX_MODE0) /* (A17) spi0_sclk.spi0_sclk */
+ AM33XX_PADCONF(AM335X_PIN_SPI0_D0, PIN_INPUT_PULLUP, MUX_MODE0) /* (B17) spi0_d0.spi0_d0 */
+ AM33XX_PADCONF(AM335X_PIN_SPI0_D1, PIN_INPUT, MUX_MODE0) /* (B16) spi0_d1.spi0_d1 */
+ AM33XX_PADCONF(AM335X_PIN_SPI0_CS0, PIN_INPUT_PULLUP, MUX_MODE0) /* (A16) spi0_cs0.spi0_cs0 */
+ >;
+ };
+
+ uart0_pins_default: uart0-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_UART0_RXD, PIN_INPUT_PULLUP, MUX_MODE0) /* (E15) uart0_rxd.uart0_rxd */
+ AM33XX_PADCONF(AM335X_PIN_UART0_TXD, PIN_OUTPUT, MUX_MODE0) /* (E16) uart0_txd.uart0_txd */
+ >;
+ };
+
+ uart4_pins_default: uart4-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_UART0_CTSN, PIN_INPUT_PULLUP, MUX_MODE1) /* (E18) uart0_ctsn.uart4_rxd */
+ AM33XX_PADCONF(AM335X_PIN_UART0_RTSN, PIN_OUTPUT, MUX_MODE1) /* (E17) uart0_rtsn.uart4_txd */
+ >;
+ };
+
+ sdcard_pins_default: sdcard-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_MMC0_CLK, PIN_INPUT, MUX_MODE0) /* (G17) mmc0_clk.mmc0_clk */
+ AM33XX_PADCONF(AM335X_PIN_MMC0_CMD, PIN_INPUT, MUX_MODE0) /* (G18) mmc0_cmd.mmc0_cmd */
+ AM33XX_PADCONF(AM335X_PIN_MMC0_DAT0, PIN_INPUT, MUX_MODE0) /* (G16) mmc0_dat0.mmc0_dat0 */
+ AM33XX_PADCONF(AM335X_PIN_MMC0_DAT1, PIN_INPUT, MUX_MODE0) /* (G15) mmc0_dat1.mmc0_dat1 */
+ AM33XX_PADCONF(AM335X_PIN_MMC0_DAT2, PIN_INPUT, MUX_MODE0) /* (F18) mmc0_dat2.mmc0_dat2 */
+ AM33XX_PADCONF(AM335X_PIN_MMC0_DAT3, PIN_INPUT, MUX_MODE0) /* (F17) mmc0_dat3.mmc0_dat3 */
+ >;
+ };
+
+ emmc_pins_default: emmc-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_GPMC_CSN1, PIN_INPUT, MUX_MODE2) /* (U9) gpmc_csn1.mmc1_clk */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_CSN2, PIN_INPUT, MUX_MODE2) /* (V9) gpmc_csn2.mmc1_cmd */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD0, PIN_INPUT, MUX_MODE1) /* (U7) gpmc_ad0.mmc1_dat0 */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD1, PIN_INPUT, MUX_MODE1) /* (V7) gpmc_ad1.mmc1_dat1 */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD2, PIN_INPUT, MUX_MODE1) /* (R8) gpmc_ad2.mmc1_dat2 */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD3, PIN_INPUT, MUX_MODE1) /* (T8) gpmc_ad3.mmc1_dat3 */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD4, PIN_INPUT, MUX_MODE1) /* (U8) gpmc_ad4.mmc1_dat4 */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD5, PIN_INPUT, MUX_MODE1) /* (V8) gpmc_ad5.mmc1_dat5 */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD6, PIN_INPUT, MUX_MODE1) /* (R9) gpmc_ad6.mmc1_dat6 */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD7, PIN_INPUT, MUX_MODE1) /* (T9) gpmc_ad7.mmc1_dat7 */
+ >;
+ };
+
+ leds_pins_default: leds-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_LCD_VSYNC, PIN_OUTPUT, MUX_MODE7) /* (U5) lcd_vsync.gpio2[22] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_HSYNC, PIN_OUTPUT, MUX_MODE7) /* (R5) lcd_hsync.gpio2[23] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_PCLK, PIN_OUTPUT, MUX_MODE7) /* (V5) lcd_pclk.gpio2[24] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_AC_BIAS_EN, PIN_OUTPUT, MUX_MODE7) /* (R6) lcd_ac_bias_en.gpio2[25] */
+ >;
+ };
+
+ sdr_radio_control_pins_default: sdr-radio-control-pins {
+ pinctrl-single,pins = <
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_ACLKR, PIN_OUTPUT, MUX_MODE7) /* (B12) mcasp0_aclkr.gpio3[18] */
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_FSR, PIN_OUTPUT, MUX_MODE7) /* (C13) mcasp0_fsr.gpio3[19] */
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_AXR1, PIN_OUTPUT, MUX_MODE7) /* (D13) mcasp0_axr1.gpio3[20] */
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_AHCLKX, PIN_OUTPUT, MUX_MODE7) /* (A14) mcasp0_ahclkx.gpio3[21] */
+ >;
+ };
+
+ sdr_radio_pins_default: sdr-radio-pins {
+ pinctrl-single,pins = <
+ // Radio irq
+ AM33XX_PADCONF(AM335X_PIN_XDMA_EVENT_INTR1, PIN_INPUT_PULLUP, MUX_MODE7) /* (D14) xdma_event_intr1.gpio0[20] */
+ // Radio init_b
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_AXR0, PIN_INPUT_PULLUP, MUX_MODE7) /* (D12) mcasp0_axr0.gpio3[16] */
+ // Radio prog_done
+ AM33XX_PADCONF(AM335X_PIN_MCASP0_AHCLKR, PIN_INPUT_PULLUP, MUX_MODE7) /* (C12) mcasp0_ahclkr.gpio3[17] */
+ // Radio gpio0 to gpio5
+ AM33XX_PADCONF(AM335X_PIN_GPMC_ADVN_ALE, PIN_INPUT_PULLUP, MUX_MODE7) /* (R7) gpmc_advn_ale.gpio2[2] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_OEN_REN, PIN_INPUT_PULLUP, MUX_MODE7) /* (T7) gpmc_oen_ren.gpio2[3] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_WEN, PIN_INPUT_PULLUP, MUX_MODE7) /* (U6) gpmc_wen.gpio2[4] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_BEN0_CLE, PIN_INPUT_PULLUP, MUX_MODE7) /* (T6) gpmc_be0n_cle.gpio2[5] */
+ AM33XX_PADCONF(AM335X_PIN_ECAP0_IN_PWM0_OUT, PIN_INPUT_PULLUP, MUX_MODE7) /* (C18) eCAP0_in_PWM0_out.gpio0[7] */
+ AM33XX_PADCONF(AM335X_PIN_XDMA_EVENT_INTR0, PIN_INPUT_PULLUP, MUX_MODE7) /* (A15) xdma_event_intr0.gpio0[19] */
+ >;
+ };
+
+ pinctrl_board_pins_default: board-default-pins {
+ pinctrl-single,pins = <
+ // PHY irq
+ AM33XX_PADCONF(AM335X_PIN_RMII1_REF_CLK, PIN_INPUT_PULLUP, MUX_MODE7) /* (H18) rmii1_refclk.gpio0[29] */
+ // Production test
+ AM33XX_PADCONF(AM335X_PIN_GPMC_BEN1, PIN_INPUT_PULLUP, MUX_MODE7) /* (U18) gpmc_be1n.gpio1[28] */
+ // SYS_BOOT0 to SYS_BOOT15
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA0, PIN_INPUT, MUX_MODE7) /* (R1) lcd_data0.gpio2[6] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA1, PIN_INPUT, MUX_MODE7) /* (R2) lcd_data1.gpio2[7] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA2, PIN_INPUT, MUX_MODE7) /* (R3) lcd_data2.gpio2[8] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA3, PIN_INPUT, MUX_MODE7) /* (R4) lcd_data3.gpio2[9] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA4, PIN_INPUT, MUX_MODE7) /* (T1) lcd_data4.gpio2[10] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA5, PIN_INPUT, MUX_MODE7) /* (T2) lcd_data5.gpio2[11] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA6, PIN_INPUT, MUX_MODE7) /* (T3) lcd_data6.gpio2[12] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA7, PIN_INPUT, MUX_MODE7) /* (T4) lcd_data7.gpio2[13] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA8, PIN_INPUT, MUX_MODE7) /* (U1) lcd_data8.gpio2[14] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA9, PIN_INPUT, MUX_MODE7) /* (U2) lcd_data9.gpio2[15] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA10, PIN_INPUT, MUX_MODE7) /* (U3) lcd_data10.gpio2[16] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA11, PIN_INPUT, MUX_MODE7) /* (U4) lcd_data11.gpio2[17] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA12, PIN_INPUT, MUX_MODE7) /* (V2) lcd_data12.gpio0[8] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA13, PIN_INPUT, MUX_MODE7) /* (V3) lcd_data13.gpio0[9] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA14, PIN_INPUT, MUX_MODE7) /* (V4) lcd_data14.gpio0[10] */
+ AM33XX_PADCONF(AM335X_PIN_LCD_DATA15, PIN_INPUT, MUX_MODE7) /* (T5) lcd_data15.gpio0[11] */
+ // Unused gpio pins
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD8, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (U10) gpmc_ad8.gpio0[22] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD9, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T10) gpmc_ad9.gpio0[23] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD10, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T11) gpmc_ad10.gpio0[26] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD11, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (U12) gpmc_ad11.gpio0[27] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_WAIT0, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T17) gpmc_wait0.gpio0[30] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_WPN, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (U17) gpmc_wpn.gpio0[31] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD12, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T12) gpmc_ad12.gpio1[12] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD13, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (R12) gpmc_ad13.gpio1[13] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD14, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (V13) gpmc_ad14.gpio1[14] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_AD15, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (U13) gpmc_ad15.gpio1[15] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A0, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (R13) gpmc_a0.gpio1[16] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A1, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (V14) gpmc_a1.gpio1[17] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A2, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (U14) gpmc_a2.gpio1[18] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A3, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T14) gpmc_a3.gpio1[19] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A4, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (R14) gpmc_a4.gpio1[20] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A5, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (V15) gpmc_a5.gpio1[21] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A6, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (U15) gpmc_a6.gpio1[22] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A6, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T15) gpmc_a7.gpio1[23] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A8, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (V16) gpmc_a8.gpio1[24] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A9, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (U16) gpmc_a9.gpio1[25] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A10, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T16) gpmc_a10.gpio1[26] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_A11, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (V17) gpmc_a11.gpio1[27] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_CSN0, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (V6) gpmc_csn0.gpio1[29] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_CSN3, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (T13) gpmc_csn3.gpio2[0] */
+ AM33XX_PADCONF(AM335X_PIN_GPMC_CLK, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (V12) gpmc_clk.gpio2[1] */
+ AM33XX_PADCONF(AM335X_PIN_USB1_DRVVBUS, PIN_INPUT_PULLDOWN, MUX_MODE7) /* (F15) USB1_DRVVBUS.gpio3[13] */
+ >;
+ };
+};
+
+/*
+ * I2C bus on baseband board (55501738)
+ */
+&i2c0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c0_pins_default>;
+ status = "okay";
+ clock-frequency = <400000>;
+
+ /*
+ * SDR radio temperature sensor
+ *
+ * Unused hardware connected pins:
+ * gpio0 pin 13: /ALERT INTERRUPT
+ * gpio0 pin 12: /T_CRIT INTERRUPT
+ */
+ sa56004: temperature-sensor@4c {
+ compatible = "nxp,sa56004";
+ reg = <0x4c>;
+ vcc-supply = <&vcc_fixed>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ channel@0 {
+ reg = <0x0>;
+ label = "baseboard-temperature";
+ };
+
+ channel@1 {
+ reg = <0x1>;
+ label = "fpga-temperature";
+ };
+ };
+
+ pcf2127: rtc@51 {
+ compatible = "nxp,pcf2127";
+ reg = <0x51>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&rtc_pins_default>;
+ interrupt-parent = <&gpio3>;
+ interrupts = <14 IRQ_TYPE_LEVEL_LOW>;
+ reset-source;
+ };
+
+ eeprom@54 {
+ compatible = "atmel,24c512";
+ reg = <0x54>;
+ pagesize = <128>;
+ };
+};
+
+/*
+ * I2C bus on radio board (55501946)
+ */
+&i2c1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c1_pins_default>;
+ status = "okay";
+ clock-frequency = <400000>;
+
+ eeprom@50 {
+ reg = <0x50>;
+ compatible = "atmel,24c512";
+ pagesize = <128>;
+ };
+};
+
+/*
+ * SPI bus on radio board (55501946)
+ */
+&spi0 {
+ status = "okay";
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0_pins_default>;
+ ti,spi-num-cs = <1>;
+
+ flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-tx-bus-width = <1>;
+ spi-rx-bus-width = <1>;
+ spi-max-frequency = <10000000>;
+
+ /* Radio flash is 32 MBytes in size.
+ * 64 KB blocks of configurations are located in the
+ * last part of the storage.
+ */
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ partition@0 {
+ reg = <0x0 0xfe0000>;
+ label = "radio-program";
+ };
+ partition@fe0000 {
+ reg = <0xfe0000 0x10000>;
+ label = "radio-config";
+ };
+ partition@ff0000 {
+ reg = <0xff0000 0x10000>;
+ label = "baseband-config";
+ };
+ };
+ };
+};
+
+&uart0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart0_pins_default>;
+ status = "okay";
+};
+
+/*
+ * SDR radio low-level error logging.
+ * Works even if primary USB communcation has issues.
+ */
+&uart4 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart4_pins_default>;
+ status = "okay";
+};
+
+&usb {
+ status = "okay";
+};
+
+&usb_ctrl_mod {
+ status = "okay";
+};
+
+/*
+ * Host USB port 0 is used for SDR radio communication.
+ */
+&usb0_phy {
+ status = "okay";
+};
+
+&usb0 {
+ status = "okay";
+ dr_mode = "host";
+};
+
+&cppi41dma {
+ status = "okay";
+};
+
+&cpsw_emac0 {
+ phy_id = <&davinci_mdio>, <7>;
+ phy-mode = "mii";
+ phy-handle = <ðernetphy7>;
+};
+
+&mac {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mii1_pins_default>;
+ status = "okay";
+ slaves = <1>;
+};
+
+&davinci_mdio {
+ pinctrl-names = "default";
+ pinctrl-0 = <&mdio_pins_default>;
+ status = "okay";
+
+ ethernetphy7: ethernet-phy@7 {
+ reg = <7>;
+ smsc,disable-energy-detect;
+ };
+};
+
+/* eMMC */
+&mmc1 {
+ status = "okay";
+ bus-width = <8>;
+ vmmc-supply = <&vmmcsd_fixed>;
+ vmmc_aux-supply = <&vmmcsd_fixed>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&emmc_pins_default>;
+
+ /*
+ * am335x doesn't support DDR, so make sure the data signal is set
+ * early in the clock cycle
+ */
+ /delete-property/ ti,needs-special-hs-handling;
+};
+
+/* microSD card, used during manufacturing */
+&mmc2 {
+ status = "okay";
+ bus-width = <4>;
+ vmmc-supply = <&vmmcsd_fixed>;
+ vmmc_aux-supply = <&vmmcsd_fixed>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdcard_pins_default>;
+};
+
+&rtc {
+ ti,no-init;
+ status = "disabled";
+};
+
+&aes {
+ status = "okay";
+};
+
+&sham {
+ status = "okay";
+};
base-commit: f338e77383789c0cae23ca3d48adcc5e9e137e3c
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] dt-bindings: omap: add kamstrup am335x emperor platform
2026-03-18 8:54 [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup emperor platform Bruno Thomsen
@ 2026-03-18 8:54 ` Bruno Thomsen
2026-03-18 17:40 ` Conor Dooley
2026-03-18 17:41 ` [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup " Conor Dooley
1 sibling, 1 reply; 4+ messages in thread
From: Bruno Thomsen @ 2026-03-18 8:54 UTC (permalink / raw)
To: devicetree, linux-omap
Cc: Lars Alex Pedersen, Conor Dooley, Krzysztof Kozlowski,
Rob Herring, Tony Lindgren, Roger Quadros, Kevin Hilman,
Andreas Kemnade, Aaro Koskinen, Bruno Thomsen
Document the kam,am335x-emperor compatible string.
Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com>
---
Documentation/devicetree/bindings/arm/ti/omap.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/arm/ti/omap.yaml b/Documentation/devicetree/bindings/arm/ti/omap.yaml
index 14f1b9d8f59d..9b1b4286f4fa 100644
--- a/Documentation/devicetree/bindings/arm/ti/omap.yaml
+++ b/Documentation/devicetree/bindings/arm/ti/omap.yaml
@@ -105,6 +105,7 @@ properties:
items:
- enum:
- compulab,cm-t335
+ - kam,am335x-emperor
- moxa,uc-8100-me-t
- novatech,am335x-lxm
- seeed,am335x-bone-green-eco
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] dt-bindings: omap: add kamstrup am335x emperor platform
2026-03-18 8:54 ` [PATCH 2/2] dt-bindings: omap: add kamstrup am335x " Bruno Thomsen
@ 2026-03-18 17:40 ` Conor Dooley
0 siblings, 0 replies; 4+ messages in thread
From: Conor Dooley @ 2026-03-18 17:40 UTC (permalink / raw)
To: Bruno Thomsen
Cc: devicetree, linux-omap, Lars Alex Pedersen, Conor Dooley,
Krzysztof Kozlowski, Rob Herring, Tony Lindgren, Roger Quadros,
Kevin Hilman, Andreas Kemnade, Aaro Koskinen
[-- Attachment #1: Type: text/plain, Size: 75 bytes --]
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup emperor platform
2026-03-18 8:54 [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup emperor platform Bruno Thomsen
2026-03-18 8:54 ` [PATCH 2/2] dt-bindings: omap: add kamstrup am335x " Bruno Thomsen
@ 2026-03-18 17:41 ` Conor Dooley
1 sibling, 0 replies; 4+ messages in thread
From: Conor Dooley @ 2026-03-18 17:41 UTC (permalink / raw)
To: Bruno Thomsen
Cc: devicetree, linux-omap, Lars Alex Pedersen, Conor Dooley,
Krzysztof Kozlowski, Rob Herring, Tony Lindgren, Roger Quadros,
Kevin Hilman, Andreas Kemnade, Aaro Koskinen
[-- Attachment #1: Type: text/plain, Size: 781 bytes --]
On Wed, Mar 18, 2026 at 09:54:19AM +0100, Bruno Thomsen wrote:
> Device tree can be used on the following 3 products:
> - Kamstrup READy Concentrator 1M (RC1M)
> - Kamstrup READy Concentrator 2M (RC2M)
> - Kamstrup READy Concentrator 2C (RC2C)
>
> Concentrators are used as 868MHz gateway for heat, cooling and water
> meters using wM-Bus, Kamstrup LinkIQ or OMS LPWAN communication protocols.
>
> RC1M only support one way communication (Rx only) where RC2M and RC2C
> support full two way communication (Rx/Tx) with meters.
>
> Signed-off-by: Bruno Thomsen <bruno.thomsen@gmail.com>
> Co-developed-by: Lars Alex Pedersen <lapeddk@gmail.com>
> Signed-off-by: Lars Alex Pedersen <lapeddk@gmail.com>
Patch order is wrong here btw, binding before user please.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-03-18 17:41 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-18 8:54 [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup emperor platform Bruno Thomsen
2026-03-18 8:54 ` [PATCH 2/2] dt-bindings: omap: add kamstrup am335x " Bruno Thomsen
2026-03-18 17:40 ` Conor Dooley
2026-03-18 17:41 ` [PATCH 1/2] ARM: dts: ti/omap: am335x: add kamstrup " Conor Dooley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox