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