# 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_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
	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 || \
		   SOC_SERIES_SAMV71
	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
