# USB device configuration options

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

if USB

config USB_DEVICE_DRIVER
	bool

config USB_DW
	bool "Designware USB Device Controller Driver"
	select USB_DEVICE_DRIVER
	help
	  Designware USB Device Controller Driver.

config USB_DW_IRQ_PRI
	int "DesignWare USB Driver Interrupt priority"
	depends on USB_DW
	help
	  USB interrupt priority.

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_STM32
	bool "USB device controller driver for STM32 devices"
	depends on SOC_FAMILY_STM32
	select USB_DEVICE_DRIVER
	select USE_STM32_LL_USB if !SOC_SERIES_STM32F0X && !SOC_SERIES_STM32F3X && !SOC_SERIES_STM32L0X
	select USE_STM32_HAL_PCD
	select USE_STM32_HAL_PCD_EX
	help
	  Enable USB support on the STM32 F0, F1, F2, F3, F4, F7, L0, L4 and G4 family of
	  processors.

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

config USB_DC_SAM
	bool "SAM series USB HS Device Controller driver"
	depends on SOC_SERIES_SAME70
	select USB_DEVICE_DRIVER
	help
	  SAM family USB HS device controller Driver.

menuconfig USB_NRFX
	bool "Nordic Semiconductor USB Device Controller Driver"
	default y
	depends on HAS_HW_NRF_USBD
	select USB_DEVICE_DRIVER
	select NRFX_USBD
	select USB_DEVICE_DISABLE_ZLP_EPIN_HANDLING
	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_KINETIS
	bool "Kinetis USB Device Controller Driver"
	select USB_DEVICE_DRIVER
	help
	  Kinetis USB Device Controller Driver.

config USB_DC_NXP_EHCI
	bool "Kinetis and RT EHCI USB Device Controller Driver"
	depends on HAS_MCUX_USB_EHCI
	select USB_DEVICE_DRIVER
	select NOCACHE_MEMORY if HAS_MCUX_CACHE
	help
	  Kinetis and RT EHCI USB Device Controller Driver.

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

config USB_DC_STM32_DISCONN_ENABLE
	bool
	depends on USB_DC_STM32
	help
	  Say Y if your board uses USB DISCONNECT pin to enable the
	  pull-up resistor on USB DP.

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

endif # USB
