# HW Info driver configuration options

# Copyright (c) 2019 Alexander Wachter
# SPDX-License-Identifier: Apache-2.0

menuconfig HWINFO
	bool "Hardware Information driver"
	help
	  Enable hwinfo driver.

if HWINFO

config HWINFO_HAS_DRIVER
	bool

config HWINFO_SHELL
	bool "Enable HWINFO Shell"
	default y
	depends on SHELL
	help
	  Enable hwinfo Shell for testing.

config HWINFO_STM32
	bool "STM32 hwinfo"
	default y
	depends on SOC_FAMILY_STM32
	select HWINFO_HAS_DRIVER
	help
	  Enable STM32 hwinfo driver.

config HWINFO_NRF
	bool "NRF device ID"
	default y
	depends on SOC_FAMILY_NRF && !TRUSTED_EXECUTION_NONSECURE
	select HWINFO_HAS_DRIVER
	help
	  Enable Nordic NRF hwinfo driver.

config HWINFO_MCUX_SIM
	bool "NXP kinetis device ID"
	default y
	depends on HAS_MCUX_SIM
	select HWINFO_HAS_DRIVER
	help
	  Enable NXP kinetis mcux hwinfo driver.

config HWINFO_IMXRT
	bool "NXP i.mx RT device ID"
	default y
	depends on SOC_SERIES_IMX_RT
	select HWINFO_HAS_DRIVER
	help
	  Enable NXP i.mx RT hwinfo driver.

config HWINFO_SAM
	bool "Atmel SAM device ID"
	default y
	depends on SOC_FAMILY_SAM && !SOC_SERIES_SAM4L
	select HWINFO_HAS_DRIVER
	help
	  Enable Atmel SAM hwinfo driver.

config HWINFO_SAM4L
	bool "Atmel SAM4L device ID"
	default y
	depends on SOC_SERIES_SAM4L
	select HWINFO_HAS_DRIVER
	help
	  Enable Atmel SAM4L hwinfo driver.

config HWINFO_SAM0
	bool "Atmel SAM0 device ID"
	default y
	depends on SOC_FAMILY_SAM0
	select HWINFO_HAS_DRIVER
	help
	  Enable Atmel SAM0 hwinfo driver.

config HWINFO_ESP32
	bool "ESP32 device ID"
	default y
	depends on SOC_ESP32
	select HWINFO_HAS_DRIVER
	help
	  Enable ESP32 hwinfo driver.

config HWINFO_LITEX
	bool "LiteX device ID"
	default y
	depends on SOC_RISCV32_LITEX_VEXRISCV
	select HWINFO_HAS_DRIVER
	help
	  Enable LiteX hwinfo driver
endif
