# SMBus configuration options

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

menuconfig SMBUS
	bool "SMBus Drivers"
	help
	  Enable SMBus Driver Configuration

if SMBUS

config SMBUS_SHELL
	bool "SMBus Shell"
	default y
	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_DEVICE
	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
	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

endif # SMBUS
