# Kconfig - 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 SENSOR
	bool
	prompt "Sensor Drivers"
	default n
	help
	  Include sensor drivers in system config

source "drivers/sensor/Kconfig.ak8975"

source "drivers/sensor/Kconfig.bma280"

source "drivers/sensor/Kconfig.bmc150_magn"

source "drivers/sensor/Kconfig.bme280"

source "drivers/sensor/Kconfig.bmg160"

source "drivers/sensor/Kconfig.bmi160"

source "drivers/sensor/Kconfig.dht"

source "drivers/sensor/Kconfig.hdc1008"

source "drivers/sensor/Kconfig.hmc5883l"

source "drivers/sensor/Kconfig.hts221"

source "drivers/sensor/Kconfig.isl29035"

source "drivers/sensor/Kconfig.lis3dh"

source "drivers/sensor/Kconfig.lis3mdl"

source "drivers/sensor/Kconfig.lps25hb"

source "drivers/sensor/Kconfig.lsm6ds0"

source "drivers/sensor/Kconfig.lsm9ds0_gyro"

source "drivers/sensor/Kconfig.lsm9ds0_mfd"

source "drivers/sensor/Kconfig.max44009"

source "drivers/sensor/Kconfig.mcp9808"

source "drivers/sensor/Kconfig.mpu6050"

source "drivers/sensor/Kconfig.sht3xd"

source "drivers/sensor/Kconfig.sx9500"

source "drivers/sensor/Kconfig.tmp007"

source "drivers/sensor/Kconfig.tmp112"
