# Kconfig.qmsi - QMSI 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_QMSI
	bool "QMSI GPIO driver"
	depends on GPIO && QMSI
	default n
	help
	  Enable the GPIO driver found on Intel Microcontroller
	  boards, using the QMSI library.

menuconfig GPIO_QMSI_SS
	bool "QMSI GPIO SS driver"
	depends on GPIO && QMSI && ARC
	default n
	help
	  Enable the GPIO driver found on Intel Microcontroller
	  boards, on the sensor subsystem, using the QMSI library.

if GPIO_QMSI || GPIO_QMSI_SS

config GPIO_QMSI_INIT_PRIORITY
	int
	default 60
	depends on GPIO_QMSI
	prompt "Init priority"
	help
	  Device driver initialization priority.

config GPIO_QMSI_API_REENTRANCY
	bool
	prompt "GPIO driver API reentrancy"
	depends on GPIO_QMSI
	default n
	help
	Enable support for QMSI GPIO driver API reentrancy.

if GPIO_QMSI

config GPIO_QMSI_0
	bool "QMSI GPIO block 0"
	default n
	help
	  Include support for the GPIO port 0 using QMSI.

config GPIO_QMSI_0_NAME
	string "Driver name"
	depends on GPIO_QMSI_0
	default "GPIO_0"

config GPIO_QMSI_0_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_QMSI_0
	help
	  IRQ priority

config GPIO_QMSI_1
	bool "QMSI GPIO block 1"
	default n
	help
	  Include support for the GPIO port 1 using QMSI.

config GPIO_QMSI_1_NAME
	string "Driver name"
	depends on GPIO_QMSI_1
	default "GPIO_1"

config GPIO_QMSI_1_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_QMSI_1
	help
	  IRQ priority

endif # GPIO_QMSI

if GPIO_QMSI_SS

config GPIO_QMSI_SS_0
	bool "QMSI GPIO SS block 0"
	default n
	help
	  Include support for the GPIO SS port 0 using QMSI.

config GPIO_QMSI_SS_0_NAME
	string "Driver name"
	depends on GPIO_QMSI_SS_0
	default "GPIO_SS_0"

config GPIO_QMSI_SS_0_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_QMSI_SS_0
	help
	  IRQ priority

config GPIO_QMSI_SS_1
	bool "QMSI GPIO SS block 1"
	default n
	help
	  Include support for the GPIO SS port 1 using QMSI.

config GPIO_QMSI_SS_1_NAME
	string "Driver name"
	depends on GPIO_QMSI_SS_1
	default "GPIO_SS_1"

config GPIO_QMSI_SS_1_IRQ_PRI
	int "Controller interrupt priority"
	depends on GPIO_QMSI_SS_1
	help
	  IRQ priority

endif # GPIO_QMSI_SS

endif # GPIO_QMSI || GPIO_QMSI_SS
