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

menuconfig I3C
	bool "Improved Inter-Integrated Circuit (I3C) bus drivers"
	help
	  Enable I3C Driver Configuration

if I3C

module = I3C
module-str = i3c
source "subsys/logging/Kconfig.template.log_config"

config I3C_SHELL
	bool "I3C Shell"
	depends on SHELL
	help
	  Enable I3C Shell.

	  The I3C shell supports info, bus recovery, CCC, I3C read and
	  write operations.

config I3C_USE_GROUP_ADDR
	bool "Use Group Addresses"
	default y
	help
	  Enable this to use group addresses if supported
	  by the controllers and target devices.

	  Says Y if unsure.

menuconfig I3C_USE_IBI
	bool "Use In-Band Interrupt (IBI)"
	default y
	help
	  Enable this to use In-Band Interrupt (IBI).

	  Says Y if unsure.

if I3C_USE_IBI

config I3C_IBI_MAX_PAYLOAD_SIZE
	int "Maximum IBI Payload Size"
	default 16
	help
	  Maxmium IBI payload size.

menuconfig I3C_IBI_WORKQUEUE
	bool "Use IBI Workqueue"
	help
	  Use global workqueue for processing IBI.

	  This is enabled by driver if needed.

if I3C_IBI_WORKQUEUE

config I3C_IBI_WORKQUEUE_STACK_SIZE
	int "IBI workqueue stack size"
	default 1024
	help
	  Stack size for the IBI global workqueue.

config I3C_IBI_WORKQUEUE_PRIORITY
	int "IBI workqueue thread priority"
	default -1
	help
	  Thread priority for the IBI global workqueue.

config I3C_IBI_WORKQUEUE_LENGTH
	int "IBI workqueue queue length"
	default 8
	help
	  Define the maximum number of IBIs that can be
	  queued in the workqueue.

config I3C_IBI_WORKQUEUE_VERBOSE_DEBUG
	bool "Verbose debug messages for IBI workqueue"
	help
	  This turns on verbose debug for the IBI workqueue
	  when logging level is set to DEBUG, and prints
	  the IBI payload.

endif # I3C_IBI_WORKQUEUE

endif # I3C_USE_IBI

comment "Initialization Priority"

config I3C_CONTROLLER_INIT_PRIORITY
	int "I3C Controller Init Priority"
	# Default is just after CONFIG_KERNEL_INIT_PRIORITY_DEVICE
	default 50
	help
	  This is for setting up I3C controller device driver instance
	  and also to perform bus initialization (e.g. dynamic address
	  assignment).

	  Note that this needs to be done before the device driver
	  instances of the connected I2C and I3C devices start
	  initializing those devices. This is because some devices
	  may not be addressable until addresses are assigned by
	  the controller.

comment "Device Drivers"

rsource "Kconfig.nxp"
rsource "Kconfig.cdns"
rsource "Kconfig.npcx"
rsource "Kconfig.test"

endif # I3C
