# Kconfig.dw - DesignWare GPIO configuration options
#
#
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig GPIO_DW
	bool "Designware GPIO"
	depends on GPIO
	select HAS_DTS_GPIO
	help
	  Enable driver for Designware GPIO

if GPIO_DW

config GPIO_DW_SHARED_IRQ
	bool

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

config GPIO_DW_CLOCK_GATE
	bool "Enable clock gating"
	select CLOCK_CONTROL

config GPIO_DW_CLOCK_GATE_DRV_NAME
	string
	depends on GPIO_DW_CLOCK_GATE
	default ""

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

if !HAS_DTS
config GPIO_DW_0_NAME
	string "Driver name"
	depends on GPIO_DW_0
	default "GPIO_0"
endif

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

if !HAS_DTS
config GPIO_DW_0_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_0 && GPIO_DW_0_IRQ_DIRECT
	help
	  IRQ priority
endif

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

if !HAS_DTS
config GPIO_DW_1_NAME
	string "Driver name"
	depends on GPIO_DW_1
	default "GPIO_1"
endif

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

if !HAS_DTS
config GPIO_DW_1_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_1 && GPIO_DW_1_IRQ_DIRECT
	help
	  IRQ priority
endif

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

if !HAS_DTS
config GPIO_DW_2_NAME
	string "Driver name"
	depends on GPIO_DW_2
	default "GPIO_2"
endif

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

if !HAS_DTS
config GPIO_DW_2_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_2 && GPIO_DW_2_IRQ_DIRECT
	help
	  IRQ priority
endif

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

if !HAS_DTS
config GPIO_DW_3_NAME
	string "Driver name"
	depends on GPIO_DW_3
	default "GPIO_3"
endif

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

if !HAS_DTS
config GPIO_DW_3_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_DW_3 && GPIO_DW_3_IRQ_DIRECT
	help
	  IRQ priority
endif

endif # GPIO_DW
