# Kconfig - SX9500 SAR proximity sensor 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 SX9500
	bool "SX9500 I2C SAR Proximity Chip"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for SX9500 I2C-based SAR proximity sensor.

config SX9500_DEV_NAME
	string "SX9500 device name"
	depends on SX9500
	default "SX9500"

config SX9500_I2C_ADDR
	hex "SX9500 I2C slave address"
	depends on SX9500
	default 0x2B
	help
	  Specify the I2C slave address for the SX9500.

config SX9500_I2C_DEV_NAME
	string "I2C master where SX9500 is connected"
	depends on SX9500
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which SX9500 is
	  connected.

config SX9500_PROX_CHANNEL
	int
	default 3
	depends on SX9500
	prompt "Proximity channel to use"
	help
	  The SX9500 offers 4 separate proximity channels.  Choose which one
	  you are using.  Valid numbers are 0 to 3.

choice
	prompt "SX9500 trigger mode"
	depends on SX9500
	default SX9500_TRIGGER_GLOBAL_THREAD

config SX9500_TRIGGER_NONE
	bool "No trigger"

config SX9500_TRIGGER_GLOBAL_THREAD
	depends on GPIO
	select SX9500_TRIGGER
	bool "Use global thread"

config SX9500_TRIGGER_OWN_THREAD
	depends on GPIO
	select SX9500_TRIGGER
	bool "Use own thread"

endchoice

config SX9500_TRIGGER
	bool
	depends on SX9500

config SX9500_GPIO_CONTROLLER
	string "GPIO controller for SX9500 interrupt"
	depends on SX9500 && SX9500_TRIGGER
	default GPIO_0
	help
	  Specify the device name of the GPIO controller the SX9500 interrupt
	  is connected to.

config SX9500_GPIO_PIN
	int "GPIO pin for SX9500 interrupt"
	depends on SX9500 && SX9500_TRIGGER
	default 3

config SX9500_THREAD_STACK_SIZE
	int "Sensor delayed work thread stack size"
	depends on SX9500 && SX9500_TRIGGER_OWN_THREAD
	default 1024

config SX9500_THREAD_PRIORITY
	int "Thread priority"
	depends on SX9500 && SX9500_TRIGGER_OWN_THREAD
	default 10
