# USB device configuration options

# Copyright (c) 2016 Wind River Systems, Inc.
# SPDX-License-Identifier: Apache-2.0

menuconfig USB_DEVICE_DRIVER
	bool "USB device controller drivers"
	help
	  Enable USB device controller drivers.

if USB_DEVICE_DRIVER

config USB_DC_HAS_HS_SUPPORT
	bool "USB device controller supports high speed"
	help
	  USB device controller supports high speed.

config USB_DEVICE_REMOTE_WAKEUP
	bool "Remote wakeup support"
	help
	  USB device controller supports remote wakeup feature.

config USB_DW
	bool "Designware USB Device Controller Driver"
	default y
	depends on DT_HAS_SNPS_DWC2_ENABLED
	help
	  Designware USB Device Controller Driver.

config USB_DW_USB_2_0
	bool "DesignWare Controller and PHY support for USB specification 2.0"
	depends on USB_DW
	help
	  Indicates whether or not USB specification version 2.0 is supported

config USB_DC_RPI_PICO
	bool "USB device controller driver for Raspberry Pi Pico devices"
	default y
	depends on DT_HAS_RASPBERRYPI_PICO_USBD_ENABLED
	help
	  Enable USB support on the RP2 family of processors.

DT_STM32_USBHS := $(dt_nodelabel_path,usbotg_hs)
DT_STM32_USBHS_SPEED := $(dt_node_str_prop_equals,$(DT_STM32_USBHS),maximum-speed,high-speed)

config USB_DC_STM32
	bool "USB device controller driver for STM32 devices"
	default y
	depends on DT_HAS_ST_STM32_OTGFS_ENABLED \
		|| DT_HAS_ST_STM32_OTGHS_ENABLED \
		|| DT_HAS_ST_STM32_USB_ENABLED
	select USE_STM32_LL_USB
	select USE_STM32_HAL_PCD
	select USE_STM32_HAL_PCD_EX
	select USB_DC_HAS_HS_SUPPORT if "$(DT_STM32_USBHS_SPEED)"
	select PINCTRL
	imply USB_DEVICE_REMOTE_WAKEUP
	help
	  Enable STM32 family USB device controller shim driver.

config USB_DC_STM32_CLOCK_CHECK
	bool "Runtime USB 48MHz clock check"
	depends on USB_DC_STM32
	default y if !(SOC_SERIES_STM32F1X || SOC_SERIES_STM32F3X)
	help
	  Enable USB clock 48MHz configuration runtime check.
	  In specific cases, this check might provide wrong verdict and should
	  be disabled.

config USB_DC_SAM0
	bool "SAM0 series USB Device Controller driver"
	default y
	depends on DT_HAS_ATMEL_SAM0_USB_ENABLED
	select PINCTRL
	help
	  SAM0 family USB device controller Driver.

config USB_DC_SMARTBOND
	bool "SmartBond series USB Device Controller driver"
	default y
	select CLOCK_CONTROL_SMARTBOND
	select CLOCK_CONTROL
	select DMA
	depends on DT_HAS_RENESAS_SMARTBOND_USBD_ENABLED
	help
	  SmartBond family USB device controller Driver.

config USB_DC_SAM_USBC
	bool "SAM4L USBC Device Controller driver"
	default y
	depends on DT_HAS_ATMEL_SAM_USBC_ENABLED
	select PINCTRL
	help
	  SAM4L family USBC device controller Driver.

DT_SAM_USBHS := $(dt_nodelabel_path,usbhs)
DT_SAM_USBHS_SPEED := $(dt_node_str_prop_equals,$(DT_SAM_USBHS),maximum-speed,high-speed)

config USB_DC_SAM_USBHS
	bool "SAM series USB HS Device Controller driver"
	default y
	depends on DT_HAS_ATMEL_SAM_USBHS_ENABLED
	imply USB_DC_HAS_HS_SUPPORT if "$(DT_SAM_USBHS_SPEED)"
	help
	  SAM family USB HS device controller Driver.

config USB_NRFX
	bool "Nordic Semiconductor USB Device Controller Driver"
	default y
	depends on DT_HAS_NORDIC_NRF_USBD_ENABLED
	select NRF_USBD_COMMON
	select NRFX_POWER
	imply USB_DEVICE_REMOTE_WAKEUP
	help
	  nRF USB Device Controller Driver

config USB_NRFX_EVT_QUEUE_SIZE
	int "USBD event queue size"
	range 4 64
	default 32
	depends on USB_NRFX
	help
	  Size of the driver's internal event queue.
	  Required size will depend on number of endpoints (class instances) in use.

config USB_NRFX_WORK_QUEUE_STACK_SIZE
	int "USBD work queue stack size"
	default 1024
	depends on USB_NRFX
	help
	  Size of the stack for the work queue thread that is used in the driver
	  for handling the events from the USBD ISR, i.e. executing endpoint
	  callbacks and providing proper notifications to the USB device stack.

config USB_NRFX_ATTACHED_EVENT_DELAY
	int "USBD attached event delay"
	range 0 1000
	default 0
	depends on USB_NRFX
	help
	  Configurable attached event delay in milliseconds. Delay can be used
	  to give USB Charging Controller time for initialization.

config USB_KINETIS
	bool "Kinetis USB Device Controller Driver"
	default y
	depends on DT_HAS_NXP_KINETIS_USBD_ENABLED
	help
	  Kinetis USB Device Controller Driver.

config USB_MCUX
	bool "NXP MCUX USB Device Controller Driver"
	default y
	depends on DT_HAS_NXP_EHCI_ENABLED || DT_HAS_NXP_LPCIP3511_ENABLED
	select PINCTRL
	help
	  NXP MCUX USB Device Controller Driver for MXRT and LPC SoC's.

if USB_MCUX

config USB_DC_NXP_EHCI
	bool "MXRT EHCI USB Device Controller"
	default y
	depends on DT_HAS_NXP_EHCI_ENABLED
	select NOCACHE_MEMORY if ARCH_HAS_NOCACHE_MEMORY_SUPPORT
	select USB_DC_HAS_HS_SUPPORT
	help
	  Kinetis and RT EHCI USB Device Controller Driver.

config USB_DC_NXP_LPCIP3511
	bool "LPC USB Device Controller"
	default y
	depends on DT_HAS_NXP_LPCIP3511_ENABLED
	select USB_DC_HAS_HS_SUPPORT if "$(dt_nodelabel_enabled,usbhs)"
	select PINCTRL
	help
	  LPC USB Device Controller Driver.

config USB_DC_MSG_QUEUE_LEN
	int
	default 10
	help
	  Maximum number of messages USB device controller interrupt can queue
	  for callback thread

config USB_MCUX_THREAD_STACK_SIZE
	int "Stack size for the USB driver"
	default 2048 if USB_DEVICE_LOG_LEVEL_DBG
	default 1024
	help
	  Size of the stack used for the internal USB thread.

endif # USB_MCUX

config USB_DC_IT82XX2
	bool "ITE IT82XX2 USB Device Controller Driver"
	default y
	depends on DT_HAS_ITE_IT82XX2_USB_ENABLED
	select PINCTRL
	help
	  ITE IT82XX2 USB Device Controller Driver

config USB_DC_NUMAKER
	bool "Nuvoton NuMaker USB 1.1 device controller"
	default y
	depends on DT_HAS_NUVOTON_NUMAKER_USBD_ENABLED
	select PINCTRL
	help
	  Enable Nuvoton NuMaker USB 1.1 device controller driver

if USB_DC_NUMAKER

config USB_DC_NUMAKER_MSG_QUEUE_SIZE
	int "USB DC message queue size"
	default 32
	help
	  Maximum number of messages the driver can queue for interrupt bottom half processing

config USB_DC_NUMAKER_MSG_HANDLER_THREAD_STACK_SIZE
	int "USB DC message handler thread stack size"
	default 1536
	help
	  Size of the stack for the message handler thread that is used in the driver
	  for handling messages from the USB DC ISR, i.e. interrupt bottom half processing,
	  including callbacks to the USB device stack.

endif # USB_DC_NUMAKER

config USB_NATIVE_POSIX
	bool "Native Posix USB Device Controller Driver"
	depends on ARCH_POSIX && EXTERNAL_LIBC
	default y if BOARD_NATIVE_SIM || BOARD_NATIVE_POSIX
	help
	  Native Posix USB Device Controller Driver.

DT_ZEPHYR_UDC0 := $(dt_nodelabel_path,zephyr_udc0)
DT_ZEPHYR_UDC0_HS_SPEED := $(dt_node_str_prop_equals,$(DT_ZEPHYR_UDC0),maximum-speed,high-speed)

config USB_NATIVE_POSIX_HS
	bool "High speed support"
	select USB_DC_HAS_HS_SUPPORT
	depends on USB_NATIVE_POSIX
	default y if "$(DT_ZEPHYR_UDC0_HS_SPEED)"
	help
	  Enable high speed support in the Native Posix USB device controller driver.

module = USB_DRIVER
module-str = usb driver
source "subsys/logging/Kconfig.template.log_config"

endif # USB_DEVICE_DRIVER
