dts: bindings: Fix NXP USB bindings
NXP USB bindings were combined into one binding and using
a property corresponding to HAL enums which is improper use
of devicetree.
Signed-off-by: Declan Snyder <declan.snyder@nxp.com>
diff --git a/drivers/usb/device/Kconfig b/drivers/usb/device/Kconfig
index 41d3d44..91db896 100644
--- a/drivers/usb/device/Kconfig
+++ b/drivers/usb/device/Kconfig
@@ -147,7 +147,7 @@
config USB_MCUX
bool "NXP MCUX USB Device Controller Driver"
default y
- depends on DT_HAS_NXP_MCUX_USBD_ENABLED
+ depends on DT_HAS_NXP_EHCI_ENABLED || DT_HAS_NXP_LPCIP3511_ENABLED
help
NXP MCUX USB Device Controller Driver for MXRT and LPC SoC's.
diff --git a/drivers/usb/device/usb_dc_mcux.c b/drivers/usb/device/usb_dc_mcux.c
index 7278d25..0667486 100644
--- a/drivers/usb/device/usb_dc_mcux.c
+++ b/drivers/usb/device/usb_dc_mcux.c
@@ -5,8 +5,6 @@
* SPDX-License-Identifier: Apache-2.0
*/
-#define DT_DRV_COMPAT nxp_mcux_usbd
-
#include <soc.h>
#include <string.h>
#include <zephyr/drivers/usb/usb_dc.h>
@@ -21,15 +19,20 @@
#include "usb_device_dci.h"
#ifdef CONFIG_USB_DC_NXP_EHCI
+#undef DT_DRV_COMPAT
+#define DT_DRV_COMPAT nxp_ehci
#include "usb_device_ehci.h"
#endif
#ifdef CONFIG_USB_DC_NXP_LPCIP3511
+#undef DT_DRV_COMPAT
+#define DT_DRV_COMPAT nxp_lpcip3511
#include "usb_device_lpcip3511.h"
#endif
#ifdef CONFIG_HAS_MCUX_CACHE
#include <fsl_cache.h>
#endif
+
#define LOG_LEVEL CONFIG_USB_DRIVER_LOG_LEVEL
#include <zephyr/logging/log.h>
#include <zephyr/irq.h>
@@ -68,7 +71,34 @@
#define EP_ABS_IDX(ep) (USB_EP_GET_IDX(ep) * 2 + \
(USB_EP_GET_DIR(ep) >> 7))
#define NUM_OF_EP_MAX (DT_INST_PROP(0, num_bidir_endpoints) * 2)
-#define CONTROLLER_ID (DT_INST_ENUM_IDX(0, usb_controller_index))
+
+#define NUM_INSTS DT_NUM_INST_STATUS_OKAY(nxp_ehci) + DT_NUM_INST_STATUS_OKAY(nxp_lpcip3511)
+BUILD_ASSERT(NUM_INSTS <= 1, "Only one USB device supported");
+
+/* Controller ID is for HAL usage */
+#if defined(CONFIG_SOC_SERIES_IMX_RT5XX) || \
+ defined(CONFIG_SOC_SERIES_IMX_RT6XX) || \
+ defined(CONFIG_SOC_LPC55S28) || \
+ defined(CONFIG_SOC_LPC55S16)
+#define CONTROLLER_ID kUSB_ControllerLpcIp3511Hs0
+#elif defined(CONFIG_SOC_LPC55S36)
+#define CONTROLLER_ID kUSB_ControllerLpcIp3511Fs0
+#elif defined(CONFIG_SOC_LPC55S69_CPU0) || defined(CONFIG_SOC_LPC55S69_CPU1)
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(usbhs), okay)
+#define CONTROLLER_ID kUSB_ControllerLpcIp3511Hs0
+#elif DT_NODE_HAS_STATUS(DT_NODELABEL(usbfs), okay)
+#define CONTROLLER_ID kUSB_ControllerLpcIp3511Fs0
+#endif /* LPC55s69 */
+#elif defined(CONFIG_SOC_SERIES_IMX_RT)
+#if DT_NODE_HAS_STATUS(DT_NODELABEL(usb1), okay)
+#define CONTROLLER_ID kUSB_ControllerEhci0
+#elif DT_NODE_HAS_STATUS(DT_NODELABEL(usb2), okay)
+#define CONTROLLER_ID kUSB_ControllerEhci1
+#endif /* IMX RT */
+#else
+/* If SOC has EHCI or LPCIP3511 then probably just need to add controller ID to this code */
+#error "USB driver does not yet support this SOC"
+#endif /* CONTROLLER ID */
/* We do not need a buffer for the write side on platforms that have USB RAM.
* The SDK driver will copy the data buffer to be sent to USB RAM.
diff --git a/dts/arm/nxp/nxp_lpc55S1x_common.dtsi b/dts/arm/nxp/nxp_lpc55S1x_common.dtsi
index 9e4ee48..76d5515 100644
--- a/dts/arm/nxp/nxp_lpc55S1x_common.dtsi
+++ b/dts/arm/nxp/nxp_lpc55S1x_common.dtsi
@@ -240,11 +240,10 @@
};
usbhs: usbhs@144000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,lpcip3511";
reg = <0x94000 0x1000>;
interrupts = <47 1>;
num-bidir-endpoints = <6>;
- usb-controller-index = "LpcIp3511Hs0";
status = "disabled";
};
};
diff --git a/dts/arm/nxp/nxp_lpc55S2x_common.dtsi b/dts/arm/nxp/nxp_lpc55S2x_common.dtsi
index c429a4b..16d9c13 100644
--- a/dts/arm/nxp/nxp_lpc55S2x_common.dtsi
+++ b/dts/arm/nxp/nxp_lpc55S2x_common.dtsi
@@ -284,11 +284,10 @@
};
usbhs: usbhs@144000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,lpcip3511";
reg = <0x94000 0x1000>;
interrupts = <47 1>;
num-bidir-endpoints = <6>;
- usb-controller-index = "LpcIp3511Hs0";
status = "disabled";
};
};
diff --git a/dts/arm/nxp/nxp_lpc55S3x_common.dtsi b/dts/arm/nxp/nxp_lpc55S3x_common.dtsi
index 381a0b0..dd011ec 100644
--- a/dts/arm/nxp/nxp_lpc55S3x_common.dtsi
+++ b/dts/arm/nxp/nxp_lpc55S3x_common.dtsi
@@ -443,12 +443,11 @@
};
usbfs: usbfs@84000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,lpcip3511";
reg = <0x84000 0x1000>;
interrupts = <28 0>;
num-bidir-endpoints = <5>;
maximum-speed = "full-speed";
- usb-controller-index = "LpcIp3511Fs0";
status = "disabled";
};
diff --git a/dts/arm/nxp/nxp_lpc55S6x_common.dtsi b/dts/arm/nxp/nxp_lpc55S6x_common.dtsi
index c7c7d23..411f8ac 100644
--- a/dts/arm/nxp/nxp_lpc55S6x_common.dtsi
+++ b/dts/arm/nxp/nxp_lpc55S6x_common.dtsi
@@ -325,21 +325,19 @@
};
usbfs: usbfs@84000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,lpcip3511";
reg = <0x84000 0x1000>;
interrupts = <28 1>;
num-bidir-endpoints = <5>;
maximum-speed = "full-speed";
- usb-controller-index = "LpcIp3511Fs0";
status = "disabled";
};
usbhs: usbhs@94000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,lpcip3511";
reg = <0x94000 0x1000>;
interrupts = <47 1>;
num-bidir-endpoints = <6>;
- usb-controller-index = "LpcIp3511Hs0";
status = "disabled";
};
diff --git a/dts/arm/nxp/nxp_rt1010.dtsi b/dts/arm/nxp/nxp_rt1010.dtsi
index cdd132b..1afed91 100644
--- a/dts/arm/nxp/nxp_rt1010.dtsi
+++ b/dts/arm/nxp/nxp_rt1010.dtsi
@@ -234,13 +234,12 @@
/* Fixup USB it has different base addr and interrupt numbers on RT1010 */
/delete-node/ usbd@402e0000;
usb1: usbd@400e4000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,ehci";
reg = <0x400e4000 0x200>;
interrupts = <25 1>;
interrupt-names = "usb_otg";
clocks = <&usbclk>;
num-bidir-endpoints = <8>;
- usb-controller-index = "Ehci0";
status = "disabled";
};
diff --git a/dts/arm/nxp/nxp_rt10xx.dtsi b/dts/arm/nxp/nxp_rt10xx.dtsi
index d6c247b..23bd725 100644
--- a/dts/arm/nxp/nxp_rt10xx.dtsi
+++ b/dts/arm/nxp/nxp_rt10xx.dtsi
@@ -790,24 +790,22 @@
};
usb1: usbd@402e0000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,ehci";
reg = <0x402E0000 0x200>;
interrupts = <113 1>;
interrupt-names = "usb_otg";
clocks = <&usbclk>;
num-bidir-endpoints = <8>;
- usb-controller-index = "Ehci0";
status = "disabled";
};
usb2: usbd@402e0200 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,ehci";
reg = <0x402E0200 0x200>;
interrupts = <112 1>;
interrupt-names = "usb_otg";
clocks = <&usbclk>;
num-bidir-endpoints = <8>;
- usb-controller-index = "Ehci1";
status = "disabled";
};
diff --git a/dts/arm/nxp/nxp_rt11xx.dtsi b/dts/arm/nxp/nxp_rt11xx.dtsi
index faf4b9c..eb14d37 100644
--- a/dts/arm/nxp/nxp_rt11xx.dtsi
+++ b/dts/arm/nxp/nxp_rt11xx.dtsi
@@ -749,24 +749,22 @@
};
usb1: usbd@40430000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,ehci";
reg = <0x40430000 0x200>;
interrupts = <136 1>;
interrupt-names = "usb_otg";
clocks = <&xtal>;
num-bidir-endpoints = <8>;
- usb-controller-index = "Ehci0";
status = "disabled";
};
usb2: usbd@4042c000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,ehci";
reg = <0x4042c000 0x200>;
interrupts = <135 1>;
interrupt-names = "usb_otg";
clocks = <&xtal>;
num-bidir-endpoints = <8>;
- usb-controller-index = "Ehci1";
status = "disabled";
};
diff --git a/dts/arm/nxp/nxp_rt5xx_common.dtsi b/dts/arm/nxp/nxp_rt5xx_common.dtsi
index 9165b26..3f5319a 100644
--- a/dts/arm/nxp/nxp_rt5xx_common.dtsi
+++ b/dts/arm/nxp/nxp_rt5xx_common.dtsi
@@ -338,11 +338,10 @@
};
usbhs: usbhs@144000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,lpcip3511";
reg = <0x144000 0x1000>;
interrupts = <50 1>;
num-bidir-endpoints = <6>;
- usb-controller-index = "LpcIp3511Hs0";
status = "disabled";
};
diff --git a/dts/arm/nxp/nxp_rt6xx_common.dtsi b/dts/arm/nxp/nxp_rt6xx_common.dtsi
index 843c173..e4acafb 100644
--- a/dts/arm/nxp/nxp_rt6xx_common.dtsi
+++ b/dts/arm/nxp/nxp_rt6xx_common.dtsi
@@ -259,11 +259,10 @@
};
usbhs: usbhs@144000 {
- compatible = "nxp,mcux-usbd";
+ compatible = "nxp,lpcip3511";
reg = <0x144000 0x1000>;
interrupts = <50 1>;
num-bidir-endpoints = <6>;
- usb-controller-index = "LpcIp3511Hs0";
status = "disabled";
};
diff --git a/dts/bindings/usb/nxp,ehci.yaml b/dts/bindings/usb/nxp,ehci.yaml
new file mode 100644
index 0000000..cf72a69
--- /dev/null
+++ b/dts/bindings/usb/nxp,ehci.yaml
@@ -0,0 +1,8 @@
+# Copyright 2023 NXP
+# SPDX-License-Identifier: Apache-2.0
+
+description: NXP EHCI USB device mode
+
+compatible: nxp,ehci
+
+include: "nxp,mcux-usbd.yaml"
diff --git a/dts/bindings/usb/nxp,lpcip3511.yaml b/dts/bindings/usb/nxp,lpcip3511.yaml
new file mode 100644
index 0000000..70ea118
--- /dev/null
+++ b/dts/bindings/usb/nxp,lpcip3511.yaml
@@ -0,0 +1,8 @@
+# Copyright 2023 NXP
+# SPDX-License-Identifier: Apache-2.0
+
+description: NXP LPCIP3511 USB device mode
+
+compatible: nxp,lpcip3511
+
+include: "nxp,mcux-usbd.yaml"
diff --git a/dts/bindings/usb/nxp,mcux-usbd.yaml b/dts/bindings/usb/nxp,mcux-usbd.yaml
index 389f43e..af0dd76 100644
--- a/dts/bindings/usb/nxp,mcux-usbd.yaml
+++ b/dts/bindings/usb/nxp,mcux-usbd.yaml
@@ -4,8 +4,6 @@
description: |
NPX MXRT and LPC USBOTG Controller in device mode
-compatible: "nxp,mcux-usbd"
-
include: [usb-ep.yaml, pinctrl-device.yaml]
properties:
@@ -14,24 +12,3 @@
interrupts:
required: true
-
- usb-controller-index:
- required: true
- type: string
- description: |
- This is taken from the usb_controller_index_t enum that is included inside the NXP SDK
- enum:
- - "Khci0"
- - "Khci1"
- - "Ehci0"
- - "Ehci1"
- - "LpcIp3511Fs0"
- - "LpcIp3511Fs1"
- - "LpcIp3511Hs0"
- - "LpcIp3511Hs1"
- - "Ohci0"
- - "Ohci1"
- - "Ip3516Hs0"
- - "Ip3516Hs1"
- - "Dwc30"
- - "Dwc31"
diff --git a/modules/hal_nxp/usb/usb_device_config.h b/modules/hal_nxp/usb/usb_device_config.h
index ca2bc5d..31a62ff 100644
--- a/modules/hal_nxp/usb/usb_device_config.h
+++ b/modules/hal_nxp/usb/usb_device_config.h
@@ -39,7 +39,15 @@
/* Whether device is self power. 1U supported, 0U not supported */
#define USB_DEVICE_CONFIG_SELF_POWER (1U)
-#define DT_DRV_COMPAT nxp_mcux_usbd
+#define NUM_INSTS DT_NUM_INST_STATUS_OKAY(nxp_ehci) + DT_NUM_INST_STATUS_OKAY(nxp_lpcip3511)
+BUILD_ASSERT(NUM_INSTS <= 1, "Only one USB device supported");
+#if DT_HAS_COMPAT_STATUS_OKAY(nxp_lpcip3511)
+#undef DT_DRV_COMPAT
+#define DT_DRV_COMPAT nxp_lpcip3511
+#elif DT_HAS_COMPAT_STATUS_OKAY(nxp_ehci)
+#undef DT_DRV_COMPAT
+#define DT_DRV_COMPAT nxp_ehci
+#endif
/* Number of endpoints supported */
#define USB_DEVICE_CONFIG_ENDPOINTS (DT_INST_PROP(0, num_bidir_endpoints))
diff --git a/soc/arm/nxp_lpc/lpc55xxx/soc.c b/soc/arm/nxp_lpc/lpc55xxx/soc.c
index 8084be5..e362078 100644
--- a/soc/arm/nxp_lpc/lpc55xxx/soc.c
+++ b/soc/arm/nxp_lpc/lpc55xxx/soc.c
@@ -217,7 +217,7 @@
#if CONFIG_USB_DC_NXP_LPCIP3511
-#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(usbfs), nxp_mcux_usbd, okay)
+#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(usbfs), nxp_lpcip3511, okay)
/*< Turn on USB Phy */
#if defined(CONFIG_SOC_LPC55S36)
POWER_DisablePD(kPDRUNCFG_PD_USBFSPHY);
@@ -248,7 +248,7 @@
#endif /* USB_DEVICE_TYPE_FS */
-#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(usbhs), nxp_mcux_usbd, okay)
+#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(usbhs), nxp_lpcip3511, okay)
/* enable usb1 host clock */
CLOCK_EnableClock(kCLOCK_Usbh1);
/* Put PHY powerdown under software control */