# Kconfig.nrf5 - Nordic Semiconductor nRF5X GPIO configuration options
#
# Copyright (c) 2016 Nordic Semiconductor ASA
#
# 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_NRF5
	bool "Nordic Semiconductor nRF5X-based GPIO driver"
	depends on GPIO && SOC_NRF5
	default n
	help
	  Enable GPIO driver for nRF5 line of MCUs.

if GPIO_NRF5

config GPIO_NRF5_P0
	bool "nRF5x GPIO Port P0 options"
	depends on GPIO_NRF5
	default n
	help
	  Enable nRF5
	  GPIO port
	  P0 config
	  options.

config GPIO_NRF5_P0_DEV_NAME
	string "GPIO Port P0 Device Name"
	depends on GPIO_NRF5_P0
	default "GPIO_0"
	help
	  Specify the device name to be used for the GPIO port.

config GPIO_NRF5_PORT_P0_PRI
	int "GPIOTE P0 interrupt priority"
	depends on GPIO_NRF5_P0
	range 0 7
	default 2
	help
	  nRF5X Port P0 IRQ priority.

endif # GPIO_NRF5
