# 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.

config I3C_INIT_RSTACT
	bool "Perform Reset Action During Bus Initialization"
	default y
	help
	  This determines whether the bus initialization routine
	  sends a reset action command to I3C targets.

comment "Device Drivers"

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

endif # I3C
