Skip to content

Commit 1438a47

Browse files
drivers: uhc: udc: use DYNAMIC_INTERRUPTS for KHCI and EHCI
Because the same IP supports both device and host, so use DYNAMIC_INTERRUPTS for KHCI and EHCI if both device and host are enabled. Signed-off-by: Mark Wang <yichang.wang@nxp.com>
1 parent 7dbade7 commit 1438a47

File tree

7 files changed

+41
-19
lines changed

7 files changed

+41
-19
lines changed

drivers/usb/udc/Kconfig.kinetis

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ config UDC_KINETIS
66
imply UDC_WORKQUEUE
77
default y
88
depends on DT_HAS_NXP_KINETIS_USBD_ENABLED
9+
select DYNAMIC_INTERRUPTS if UHC_NXP_KHCI
910
help
1011
Kinetis USB device controller criver.
1112

drivers/usb/udc/Kconfig.mcux

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ config UDC_NXP_EHCI
77
depends on DT_HAS_NXP_EHCI_ENABLED
88
select PINCTRL
99
select NOCACHE_MEMORY if CPU_HAS_DCACHE
10-
select DYNAMIC_INTERRUPTS
10+
select DYNAMIC_INTERRUPTS if UHC_NXP_EHCI
1111
imply UDC_BUF_FORCE_NOCACHE
1212
imply UDC_WORKQUEUE
1313
help

drivers/usb/udc/udc_kinetis.c

+10-5
Original file line numberDiff line numberDiff line change
@@ -1154,14 +1154,19 @@ static const struct udc_api usbfsotg_api = {
11541154
.unlock = usbfsotg_unlock,
11551155
};
11561156

1157+
#define USBFSOTG_IRQ_DEFINE_OR(n) \
1158+
COND_CODE_1(CONFIG_UHC_NXP_KHCI, \
1159+
(irq_connect_dynamic(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
1160+
(void (*)(const void *))usbfsotg_isr_handler, \
1161+
DEVICE_DT_INST_GET(n), 0)), \
1162+
(IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
1163+
usbfsotg_isr_handler, \
1164+
DEVICE_DT_INST_GET(n), 0)))
1165+
11571166
#define USBFSOTG_DEVICE_DEFINE(n) \
11581167
static void udc_irq_enable_func##n(const struct device *dev) \
11591168
{ \
1160-
IRQ_CONNECT(DT_INST_IRQN(n), \
1161-
DT_INST_IRQ(n, priority), \
1162-
usbfsotg_isr_handler, \
1163-
DEVICE_DT_INST_GET(n), 0); \
1164-
\
1169+
USBFSOTG_IRQ_DEFINE_OR(n); \
11651170
irq_enable(DT_INST_IRQN(n)); \
11661171
} \
11671172
\

drivers/usb/udc/udc_mcux_ehci.c

+9-5
Original file line numberDiff line numberDiff line change
@@ -868,16 +868,20 @@ static usb_phy_config_struct_t phy_config_##n = { \
868868
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(n), phy_handle), \
869869
(&phy_config_##n), (NULL))
870870

871+
#define UDC_MCUX_EHCI_IRQ_DEFINE_OR(n) \
872+
COND_CODE_1(CONFIG_UHC_NXP_EHCI, \
873+
(irq_connect_dynamic(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
874+
(void (*)(const void *))udc_mcux_isr, \
875+
DEVICE_DT_INST_GET(n), 0)), \
876+
(IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), udc_mcux_isr, \
877+
DEVICE_DT_INST_GET(n), 0)))
878+
871879
#define USB_MCUX_EHCI_DEVICE_DEFINE(n) \
872880
UDC_MCUX_PHY_DEFINE_OR(n); \
873881
\
874882
static void udc_irq_enable_func##n(const struct device *dev) \
875883
{ \
876-
irq_connect_dynamic(DT_INST_IRQN(n), \
877-
DT_INST_IRQ(n, priority), \
878-
(void (*)(const void *))udc_mcux_isr, \
879-
DEVICE_DT_INST_GET(n), 0); \
880-
\
884+
UDC_MCUX_EHCI_IRQ_DEFINE_OR(n); \
881885
irq_enable(DT_INST_IRQN(n)); \
882886
} \
883887
\

drivers/usb/uhc/Kconfig.mcux

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ config UHC_NXP_EHCI
77
depends on DT_HAS_NXP_UHC_EHCI_ENABLED
88
select EVENTS
99
select NOCACHE_MEMORY if CPU_HAS_DCACHE
10-
select DYNAMIC_INTERRUPTS
10+
select DYNAMIC_INTERRUPTS if UDC_NXP_EHCI
1111
help
1212
NXP MCUX USB Host Controller Driver for EHCI.
1313

@@ -16,6 +16,7 @@ config UHC_NXP_KHCI
1616
default y
1717
depends on DT_HAS_NXP_UHC_KHCI_ENABLED
1818
select EVENTS
19+
select DYNAMIC_INTERRUPTS if UDC_KINETIS
1920
help
2021
NXP MCUX USB Host Controller Driver for KHCI.
2122

drivers/usb/uhc/uhc_mcux_ehci.c

+8-4
Original file line numberDiff line numberDiff line change
@@ -324,15 +324,19 @@ static const usb_host_controller_interface_t uhc_mcux_if = {
324324
#define UHC_MCUX_PHY_CFG_PTR_OR_NULL(n) \
325325
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(n), phy_handle), (&phy_config_##n), (NULL))
326326

327+
#define UHC_MCUX_EHCI_IRQ_DEFINE_OR(n) \
328+
COND_CODE_1(CONFIG_UDC_NXP_EHCI, \
329+
(irq_connect_dynamic(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
330+
(void (*)(const void *))uhc_mcux_isr, DEVICE_DT_INST_GET(n), 0)), \
331+
(IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), uhc_mcux_isr, \
332+
DEVICE_DT_INST_GET(n), 0)))
333+
327334
#define UHC_MCUX_EHCI_DEVICE_DEFINE(n) \
328335
UHC_MCUX_PHY_DEFINE_OR(n); \
329336
\
330337
static void uhc_irq_enable_func##n(const struct device *dev) \
331338
{ \
332-
irq_connect_dynamic(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
333-
(void (*)(const void *))uhc_mcux_isr, DEVICE_DT_INST_GET(n), \
334-
0); \
335-
\
339+
UHC_MCUX_EHCI_IRQ_DEFINE_OR(n); \
336340
irq_enable(DT_INST_IRQN(n)); \
337341
} \
338342
\

drivers/usb/uhc/uhc_mcux_khci.c

+10-3
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,19 @@ static const usb_host_controller_interface_t uhc_mcux_if = {
250250
USB_HostKhciWritePipe, USB_HostKhciReadpipe, USB_HostKciIoctl,
251251
};
252252

253+
#define UHC_MCUX_KHCI_IRQ_DEFINE_OR(n) \
254+
COND_CODE_1(CONFIG_UDC_KINETIS, \
255+
(irq_connect_dynamic(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
256+
(void (*)(const void *))uhc_mcux_isr, \
257+
DEVICE_DT_INST_GET(n), 0)), \
258+
(IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), \
259+
uhc_mcux_isr, \
260+
DEVICE_DT_INST_GET(n), 0)))
261+
253262
#define UHC_MCUX_KHCI_DEVICE_DEFINE(n) \
254263
static void uhc_irq_enable_func##n(const struct device *dev) \
255264
{ \
256-
IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), uhc_mcux_isr, \
257-
DEVICE_DT_INST_GET(n), 0); \
258-
\
265+
UHC_MCUX_KHCI_IRQ_DEFINE_OR(n); \
259266
irq_enable(DT_INST_IRQN(n)); \
260267
} \
261268
\

0 commit comments

Comments
 (0)