# Kconfig - shared_irq configuration options

#
# Copyright (c) 2015 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

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 nuber 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
	 Prioity 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
	 Prioity 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
