#
# 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 HMC5883L
	bool
	prompt "HMC5883L magnetometer"
	depends on SENSOR && I2C
	default n
	help
	Enable driver for HMC5883L I2C-based magnetometer.

config HMC5883L_SYS_LOG_LEVEL
	int "HMC5883L Log level"
	depends on SYS_LOG && HMC5883L
	default 0
	range 0 4
	help
	Sets log level for HMC5883L driver.
	Levels are:

	- 0 OFF: do not write

	- 1 ERROR: only write SYS_LOG_ERR

	- 2 WARNING: write SYS_LOG_WRN in addition to previous level

	- 3 INFO: write SYS_LOG_INF in addition to previous levels

	- 4 DEBUG: write SYS_LOG_DBG in addition to previous levels

config HMC5883L_NAME
	string
	prompt "Driver name"
	default "HMC5883L"
	depends on HMC5883L
	help
	Device name with which the HMC5883L sensor is identified.

config HMC5883L_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on HMC5883L
	default 70
	help
	Device driver initialization priority.

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

choice
	prompt "Trigger mode"
	depends on HMC5883L
	default HMC5883L_TRIGGER_GLOBAL_FIBER
	help
	Specify the type of triggering to be used by the driver.

config HMC5883L_TRIGGER_NONE
	bool
	prompt "No trigger"

config HMC5883L_TRIGGER_GLOBAL_FIBER
	bool
	prompt "Use global fiber"
	depends on GPIO && SYSTEM_WORKQUEUE
	select HMC5883L_TRIGGER

config HMC5883L_TRIGGER_OWN_FIBER
	bool
	prompt "Use own fiber"
	depends on GPIO
	select HMC5883L_TRIGGER

endchoice

config HMC5883L_TRIGGER
	bool
	depends on HMC5883L

config HMC5883L_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on HMC5883L && HMC5883L_TRIGGER
	help
	The device name of the GPIO device to which the HMC5883L interrupt
	pin is connected.

config HMC5883L_GPIO_PIN_NUM
	int
	prompt "Interrupt GPIO pin number"
	default 0
	depends on HMC5883L && HMC5883L_TRIGGER
	help
	The number of the GPIO on which the interrupt signal from the
	HMC5883L chip will be received.

config HMC5883L_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on HMC5883L && HMC5883L_TRIGGER_OWN_FIBER
	default 10
	help
	Priority of fiber used by the driver to handle interrupts.

config HMC5883L_FIBER_STACK_SIZE
	int
	prompt "Fiber stack size"
	depends on HMC5883L && HMC5883L_TRIGGER_OWN_FIBER
	default 1024
	help
	Stack size of fiber used by the driver to handle interrupts.

config HMC5883L_ODR
	string
	prompt "Output data rate"
	depends on HMC5883L
	default "15"
	help
	Magnetometer output data rate expressed in samples per second.
	Data rates supported by the chip are 0.75, 1.5, 3, 7.5, 15, 30
	and 75.

config HMC5883L_FS
	string
	prompt "Full-scale range"
	depends on HMC5883L
	default "1.3"
	help
	Magnetometer full-scale range.
	An X value for the config represents a range of +/- X gauss. Valid
	values are 0.88, 1.3, 1.9, 2.5, 4, 4.7, 5.6 and 8.1.
