# BMC150 magnetometer sensor configuration options

# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig BMC150_MAGN
	bool "BMC150_MAGN I2C Magnetometer Chip"
	depends on I2C
	help
	  Enable driver for BMC150 I2C-based magnetometer sensor.

if BMC150_MAGN

menu "Attributes"

choice
	prompt "Default preset"
	default BMC150_MAGN_PRESET_REGULAR
	help
	  Specify the default preset (x/y oversampling, z oversampling, sampling
	  frequency).

config BMC150_MAGN_PRESET_LOW_POWER
	bool "Low power (3, 3, 10)"

config BMC150_MAGN_PRESET_REGULAR
	bool "Regular (9, 15, 10)"

config BMC150_MAGN_PRESET_ENHANCED_REGULAR
	bool "Enhanced regular (15, 27, 10)"

config BMC150_MAGN_PRESET_HIGH_ACCURACY
	bool "High accuracy (47, 83, 20)"

endchoice

config BMC150_MAGN_SAMPLING_RATE_RUNTIME
	bool "Enable dynamic sampling rate"
	help
	  Enable alteration of sampling rate attribute at runtime.

config BMC150_MAGN_SAMPLING_REP_XY
	bool "Enable dynamic XY oversampling"
	help
	  Enable alteration of XY oversampling at runtime.

config BMC150_MAGN_SAMPLING_REP_Z
	bool "Enable dynamic Z oversampling"
	help
	  Enable alteration of Z oversampling at runtime.

endmenu

config BMC150_MAGN_TRIGGER
	bool "Enable triggers"
	depends on GPIO
	help
	  Enable triggers for BMC150 magnetometer

config BMC150_MAGN_TRIGGER_THREAD_STACK
	int "Thread stack size"
	depends on BMC150_MAGN_TRIGGER
	default 1024
	help
	  Specify the internal thread stack size.

config BMC150_MAGN_TRIGGER_DRDY
	bool "Enable data ready trigger"
	depends on BMC150_MAGN_TRIGGER
	help
	  Enable data ready interrupt for BMC150 magnetometer

endif # BMC150_MAGN
