# Kconfig.dw - DesignWare GPIO configuration options
#
#
# Copyright (c) 2016 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 GPIO_DW
	prompt "Designware GPIO"
	default n
	depends on GPIO
	bool
	help
	  Enable driver for Designware GPIO

if GPIO_DW

config GPIO_DW_SHARED_IRQ
	bool
	default n

config GPIO_DW_INIT_PRIORITY
	int
	default 60
	prompt "Init priority"
	help
	  Device driver initialization priority.

config GPIO_DW_CLOCK_GATE
	bool "Enable glock gating"
	select CLOCK_CONTROL
	default n

config GPIO_DW_CLOCK_GATE_DRV_NAME
	string
	depends on GPIO_DW_CLOCK_GATE
	default ""

config GPIO_DW_0
	bool "Designware GPIO block 0"
	default n
	help
	  Include Designware GPIO driver

config GPIO_DW_0_NAME
	string "Driver name"
	depends on GPIO_DW_0
	default "GPIO_0"

config GPIO_DW_0_CLOCK_GATE_SUBSYS
	int "Clock controller's subsystem"
	depends on GPIO_DW_CLOCK_GATE && GPIO_DW_0

choice
	prompt "Port 0 Interrupts via"
	default GPIO_DW_0_IRQ_DIRECT
	depends on GPIO_DW_0

config GPIO_DW_0_IRQ_DIRECT
	bool "Direct Hardware Interrupt"
	help
	  When interrupts fire, the driver's ISR function is being called directly.

config GPIO_DW_0_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select GPIO_DW_SHARED_IRQ
	help
	  When interrupts fire, the shared IRQ driver is notified. Then the shared IRQ
	  driver dispatches the interrupt to other drivers.

endchoice

config GPIO_DW_0_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on GPIO_DW_0 && GPIO_DW_0_IRQ_SHARED
	help
	  Specify the device name for the shared IRQ driver. It is used to register
	  this driver with the shared IRQ driver, so interrupts can be dispatched
	  correctly.

config GPIO_DW_0_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_0 && GPIO_DW_0_IRQ_DIRECT
	help
	  IRQ priority

config GPIO_DW_1
	bool "Designware GPIO block 1"
	default n
	help
	  Include Designware GPIO driver

config GPIO_DW_1_NAME
	string "Driver name"
	depends on GPIO_DW_1
	default "GPIO_1"

config GPIO_DW_1_CLOCK_GATE_SUBSYS
	int "Clock controller's subsystem"
	depends on GPIO_DW_CLOCK_GATE && GPIO_DW_1

choice
	prompt "Port 1 Interrupts via"
	default GPIO_DW_1_IRQ_DIRECT
	depends on GPIO_DW_1

config GPIO_DW_1_IRQ_DIRECT
	bool "Direct Hardware Interrupt"
	help
	  When interrupts fire, the driver's ISR function is being called directly.

config GPIO_DW_1_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select GPIO_DW_SHARED_IRQ
	help
	  When interrupts fire, the shared IRQ driver is notified. Then the shared IRQ
	  driver dispatches the interrupt to other drivers.

endchoice

config GPIO_DW_1_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on GPIO_DW_1_IRQ_SHARED
	help
	  Specify the device name for the shared IRQ driver. It is used to register
	  this driver with the shared IRQ driver, so interrupts can be dispatched
	  correctly.

config GPIO_DW_1_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_1 && GPIO_DW_1_IRQ_DIRECT
	help
	  IRQ priority

config GPIO_DW_2
	bool "Designware GPIO block 1"
	default n
	help
	  Include Designware GPIO driver

config GPIO_DW_2_NAME
	string "Driver name"
	depends on GPIO_DW_2
	default "GPIO_2"

config GPIO_DW_2_CLOCK_GATE_SUBSYS
	int "Clock controller's subsystem"
	depends on GPIO_DW_CLOCK_GATE && GPIO_DW_2

choice
	prompt "Port 1 Interrupts via"
	default GPIO_DW_2_IRQ_DIRECT
	depends on GPIO_DW_2

config GPIO_DW_2_IRQ_DIRECT
	bool "Direct Hardware Interrupt"
	help
	  When interrupts fire, the driver's ISR function is being called directly.

config GPIO_DW_2_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select GPIO_DW_SHARED_IRQ
	help
	  When interrupts fire, the shared IRQ driver is notified. Then the shared IRQ
	  driver dispatches the interrupt to other drivers.

endchoice

config GPIO_DW_2_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on GPIO_DW_2_IRQ_SHARED
	help
	  Specify the device name for the shared IRQ driver. It is used to register
	  this driver with the shared IRQ driver, so interrupts can be dispatched
	  correctly.

config GPIO_DW_2_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_2 && GPIO_DW_2_IRQ_DIRECT
	help
	  IRQ priority

config GPIO_DW_3
	bool "Designware GPIO block 1"
	default n
	help
	  Include Designware GPIO driver

config GPIO_DW_3_NAME
	string "Driver name"
	depends on GPIO_DW_3
	default "GPIO_3"

config GPIO_DW_3_CLOCK_GATE_SUBSYS
	int "Clock controller's subsystem"
	depends on GPIO_DW_CLOCK_GATE && GPIO_DW_3

choice
	prompt "Port 1 Interrupts via"
	default GPIO_DW_3_IRQ_DIRECT
	depends on GPIO_DW_3

config GPIO_DW_3_IRQ_DIRECT
	bool "Direct Hardware Interrupt"
	help
	  When interrupts fire, the driver's ISR function is being called directly.

config GPIO_DW_3_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select GPIO_DW_SHARED_IRQ
	help
	  When interrupts fire, the shared IRQ driver is notified. Then the shared IRQ
	  driver dispatches the interrupt to other drivers.

endchoice

config GPIO_DW_3_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on GPIO_DW_3_IRQ_SHARED
	help
	  Specify the device name for the shared IRQ driver. It is used to register
	  this driver with the shared IRQ driver, so interrupts can be dispatched
	  correctly.

config GPIO_DW_3_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_3 && GPIO_DW_3_IRQ_DIRECT
	help
	IRQ priority

endif # GPIO_DW
