# SMBus configuration options

# Copyright (c) 2022 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig SMBUS
	bool "System Management Bus (SMBus) drivers"
	help
	  Enable SMBus Driver Configuration

if SMBUS

config SMBUS_SHELL
	bool "SMBus Shell"
	depends on SHELL
	help
	  Enable SMBus Shell.

config SMBUS_STATS
	bool "SMBus device Stats"
	depends on STATS
	help
	  Enable SMBus Stats.

config SMBUS_INIT_PRIORITY
	int "Init priority"
	default KERNEL_INIT_PRIORITY_DEFAULT
	help
	  SMBus device driver initialization priority.


module = SMBUS
module-str = smbus
source "subsys/logging/Kconfig.template.log_config"

config SMBUS_INTEL_PCH
	bool "SMBus Intel PCH driver"
	default y
	depends on DT_HAS_INTEL_PCH_SMBUS_ENABLED
	select PCIE
	select DYNAMIC_INTERRUPTS
	help
	  Enable Intel Platform Controller Hub (PCH) SMBus driver.

if SMBUS_INTEL_PCH

choice SMBUS_INTEL_PCH_ACCESS
	bool "SMBus register access mode"
	default SMBUS_INTEL_PCH_ACCESS_IO
	help
	  Default PCH register access mode. Set default access IO so
	  that both Qemu Q35 and Intel hardware are supported.

config SMBUS_INTEL_PCH_ACCESS_IO
	bool "I/O PCH SMBus Register Access Mode"
	help
	  Access PCH SMBus registers through I/O space.

config SMBUS_INTEL_PCH_ACCESS_MMIO
	bool "MMIO PCH SMBus Register Access Mode"
	help
	  Access PCH SMBus registers though MMIO space.

endchoice

config SMBUS_INTEL_PCH_HOST_NOTIFY
	bool "SMBus Intel PCH Host Notify support"
	default y
	help
	  Support Host Notify from peripheral devices.

config SMBUS_INTEL_PCH_SMBALERT
	bool "SMBus Intel PCH SMBALERT signal support"
	default y
	help
	  Support SMBALERT signal from peripheral devices.

endif # SMBUS_INTEL_PCH

menuconfig SMBUS_STM32
	bool "STM32 SMBus driver"
	default y
	depends on DT_HAS_ST_STM32_SMBUS_ENABLED
	depends on I2C_STM32
	help
	  Enable STM32 SMBus driver.

if SMBUS_STM32

config SMBUS_STM32_SMBALERT
	bool "SMBus STM32 SMBALERT signal support"
	default y
	help
	  Support SMBALERT signal from peripheral devices.

endif # SMBUS_STM32

endif # SMBUS
