# Kconfig.k64 - K64 GPIO configuration options
#
#
# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2016 Wind River Systems, Inc.
#
# 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_K64
	bool "Freescale K64-based GPIO driver"
	depends on GPIO && SOC_MK64F12
	default n
	help
	Enable driver for Freescale K64-based GPIOs.

if GPIO_K64

config PORT_K64_INT_STATUS_OFFSET
	hex "Freescale K64-based Port Control interrupt status register offset"
	depends on GPIO_K64
	default 0xA0

config GPIO_K64_A
	bool "Freescale K64-based GPIO Port A"
	depends on GPIO_K64
	default n
	help
	Enable config options for Freescale K64-based GPIO port A.

config GPIO_K64_A_DEV_NAME
	string "Freescale K64-based GPIO Port A Device Name"
	depends on GPIO_K64_A
	default "GPIO_0"
	help
	Specify the device name.

config GPIO_K64_PORTA_PRI
	int "Freescale K64-based Port A interrupt priority"
	depends on GPIO_K64_A
	default 2
	help
	  K64 Port A IRQ priority

config GPIO_K64_B
	bool "Freescale K64-based GPIO Port B"
	depends on GPIO_K64
	default n
	help
	Enable config options for Freescale K64-based GPIO port B.

config GPIO_K64_B_DEV_NAME
	string "Freescale K64-based GPIO Port B Device Name"
	depends on GPIO_K64_B
	default "GPIO_1"
	help
	Specify the device name.

config GPIO_K64_PORTB_PRI
	int "Freescale K64-based Port B interrupt priority"
	depends on GPIO_K64_B
	default 2
	help
	  K64 Port B IRQ priority

config GPIO_K64_C
	bool "Freescale K64-based GPIO Port B"
	depends on GPIO_K64
	default n
	help
	Enable config options for Freescale K64-based GPIO port C.

config GPIO_K64_C_DEV_NAME
	string "Freescale K64-based GPIO Port B Device Name"
	depends on GPIO_K64_C
	default "GPIO_2"
	help
	Specify the device name.

config GPIO_K64_PORTC_PRI
	int "Freescale K64-based Port C interrupt priority"
	depends on GPIO_K64_C
	default 2
	help
	  K64 Port C IRQ priority

config GPIO_K64_D
	bool "Freescale K64-based GPIO Port D"
	depends on GPIO_K64
	default n
	help
	Enable config options for Freescale K64-based GPIO port D.

config GPIO_K64_D_DEV_NAME
	string "Freescale K64-based GPIO Port D Device Name"
	depends on GPIO_K64_D
	default "GPIO_3"
	help
	Specify the device name.

config GPIO_K64_PORTD_PRI
	int "Freescale K64-based Port D interrupt priority"
	depends on GPIO_K64_D
	default 2
	help
	  K64 Port D IRQ priority

config GPIO_K64_E
	bool "Freescale K64-based GPIO Port E"
	depends on GPIO_K64
	default n
	help
	Enable config options for Freescale K64-based GPIO port E.

config GPIO_K64_E_DEV_NAME
	string "Freescale K64-based GPIO Port E Device Name"
	depends on GPIO_K64_E
	default "GPIO_4"
	help
	Specify the device name.

config GPIO_K64_PORTE_PRI
	int "Freescale K64-based Port E interrupt priority"
	depends on GPIO_K64_E
	default 2
	help
	  K64 Port E IRQ priority

endif # GPIO_K64
