# Kconfig - shared_irq configuration options

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

menuconfig SHARED_IRQ
	bool
	prompt "Shared interrupt driver"
	default n
	help
	 Include shared interrupt support in system. Shared interrupt
	 support is NOT required in most systems. If in doubt answer no.

config SHARED_IRQ_NUM_CLIENTS
	int
	depends on SHARED_IRQ
	prompt "The number of clients per instance"
	default 5
	help
	 Configures the maximum number of clients allowed per shared
	 instance of the shared interrupt driver. To conserve RAM set
	 this value to the lowest practical value.

config SHARED_IRQ_INIT_PRIORITY
	int
	depends on SHARED_IRQ
	default 45
	prompt "Shared IRQ init priority"
	help
	 Shared IRQ are initialized on POST_KERNEL init level. They
	 have to be initialized before any device that uses them.

config SHARED_IRQ_0
	bool "Shared interrupt instance 0"
	depends on SHARED_IRQ
	help
	 Provide an instance of the shared interrupt driver when system
	 configuration requires that multiple devices share an interrupt.

config SHARED_IRQ_0_NAME
	string "Select a name for the device"
	depends on SHARED_IRQ_0
	default "SHARED_IRQ0"

config SHARED_IRQ_0_IRQ
	int "instance 0 interrupt"
	depends on SHARED_IRQ_0
	help
	 System interrupt number to be handled by this instance of the driver.

config SHARED_IRQ_0_PRI
	int "instance 0 interrupt priority"
	default 2
	depends on SHARED_IRQ_0
	help
	 Priority of shared interrupt handler for the configured interrupt

choice
	depends on SHARED_IRQ_0
	prompt "Shared IRQ #0 Trigger Condition"
	default SHARED_IRQ_0_RISING_EDGE

config SHARED_IRQ_0_FALLING_EDGE
	bool "Falling Edge"
	help
	  Interrupt triggers on falling edge.

config SHARED_IRQ_0_RISING_EDGE
	bool "Rising Edge"
	help
	  Interrupt triggers on rising edge.

config SHARED_IRQ_0_LEVEL_HIGH
	bool "Level High"
	help
	  Interrupt triggers when level is high.

config SHARED_IRQ_0_LEVEL_LOW
	bool "Level Low"
	help
	  Interrupt triggers when level is low.

endchoice

config SHARED_IRQ_1
	bool "Shared interrupt instance 1"
	depends on SHARED_IRQ
	help
	 Provide an instance of the shared interrupt driver when system
	 configuration requires that multiple devices share an interrupt.

config SHARED_IRQ_1_NAME
	string "Select a name for the device"
	depends on SHARED_IRQ_1
	default "SHARED_IRQ1"

config SHARED_IRQ_1_IRQ
	int "instance 1 interrupt"
	depends on SHARED_IRQ_1
	help
	 System interrupt number to be handled by this instance of the driver.

config SHARED_IRQ_1_PRI
	int "instance 1 interrupt priority"
	default 2
	depends on SHARED_IRQ_1
	help
	 Priority of shared interrupt handler for the configured interrupt

choice
	depends on SHARED_IRQ_1
	prompt "Shared IRQ #1 Trigger Condition"
	default SHARED_IRQ_1_RISING_EDGE

config SHARED_IRQ_1_FALLING_EDGE
	bool "Falling Edge"
	help
	  Interrupt triggers on falling edge.

config SHARED_IRQ_1_RISING_EDGE
	bool "Rising Edge"
	help
	  Interrupt triggers on rising edge.

config SHARED_IRQ_1_LEVEL_HIGH
	bool "Level High"
	help
	  Interrupt triggers when level is high.

config SHARED_IRQ_1_LEVEL_LOW
	bool "Level Low"
	help
	  Interrupt triggers when level is low.

endchoice
