# 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_DESIGNWARE_USB_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)"
	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
	help
	  SAM0 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
	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 NRFX_USBD
	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_MCUX_USBD_ENABLED
	help
	  NXP MCUX USB Device Controller Driver for MXRT and LPC SoC's.

if USB_MCUX

choice USB_MCUX_CONTROLLER_TYPE
	prompt "USB Controller type"
	help
	  Select the type of controller available in the SoC.

config USB_DC_NXP_EHCI
	bool "MXRT EHCI USB Device Controller"
	select NOCACHE_MEMORY if HAS_MCUX_CACHE
	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"
	select USB_DC_HAS_HS_SUPPORT
	help
	  LPC USB Device Controller Driver.

endchoice

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 1024
	help
	  Size of the stack used for the internal USB thread.

endif # USB_MCUX

config USB_NATIVE_POSIX
	bool "Native Posix USB Device Controller Driver"
	help
	  Native Posix USB Device Controller Driver.

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

endif # USB_DEVICE_DRIVER
