# MAX30101 heart rate sensor

# Copyright (c) 2017, NXP
# SPDX-License-Identifier: Apache-2.0

menuconfig MAX30101
	bool "MAX30101 Pulse Oximeter and Heart Rate Sensor"
	depends on I2C

if MAX30101

config MAX30101_SMP_AVE
	int "Sample averaging"
	range 0 7
	default 0
	help
	  To reduce the amount of data throughput, adjacent samples (in each
	  individual channel) can be averaged and decimated on the chip by
	  setting this register. Set to 0 for no averaging.
	  0 = 1 sample (no averaging)
	  1 = 2 samples
	  2 = 4 samples
	  3 = 8 samples
	  4 = 16 samples
	  5 = 32 samples
	  6 = 32 samples
	  7 = 32 samples

config MAX30101_FIFO_ROLLOVER_EN
	bool "FIFO rolls on full"
	help
	  Controls the behavior of the FIFO when the FIFO becomes completely
	  filled with data. If set, the FIFO address rolls over to zero and the
	  FIFO continues to fill with new data. If not set, then the FIFO is
	  not updated until FIFO_DATA is read or the WRITE/READ pointer
	  positions are changed.

config MAX30101_FIFO_A_FULL
	int "FIFO almost full value"
	range 0 15
	default 0
	help
	  Set the trigger for the FIFO_A_FULL interrupt

choice MAX30101_MODE
	prompt "Mode control"
	default MAX30101_MULTI_LED_MODE

config MAX30101_HEART_RATE_MODE
	bool "Heart rate mode"
	help
	  Set to operate in heart rate only mode. The red LED channel is
	  active.

config MAX30101_SPO2_MODE
	bool "SpO2 mode"
	help
	  Set to operate in SpO2 mode. The red and IR LED channels are active.

config MAX30101_MULTI_LED_MODE
	bool "Multi-LED mode"
	help
	  Set to operate in multi-LED mode. The green, red, and/or IR LED
	  channels are active.

endchoice

config MAX30101_ADC_RGE
	int "ADC range control"
	range 0 3
	default 2
	help
	  Set the ADC's full-scale range.
	  0 = 7.81 pA/LSB
	  1 = 15.63 pA/LSB
	  2 = 31.25 pA/LSB
	  3 = 62.5 pA/LSB

config MAX30101_SR
	int "ADC sample rate control"
	range 0 7
	default 0
	help
	  Set the effective sampling rate with one sample consisting of one
	  pulse/conversion per active LED channel. In SpO2 mode, these means
	  one IR pulse/conversion and one red pulse/conversion per sample
	  period.
	  0 = 50 Hz
	  1 = 100 Hz
	  2 = 200 Hz
	  3 = 400 Hz
	  4 = 800 Hz
	  5 = 1000 Hz
	  6 = 1600 Hz
	  7 = 3200 Hz

config MAX30101_LED1_PA
	hex "LED1 (red) pulse amplitude"
	range 0 0xff
	default 0xff
	help
	  Set the pulse amplitude to control the LED1 (red) current. The actual
	  measured LED current for each part can vary significantly due to the
	  trimming methodology.
	  0x00 = 0.0 mA
	  0x01 = 0.2 mA
	  0x02 = 0.4 mA
	  0x0f = 3.1 mA
	  0xff = 50.0 mA

config MAX30101_LED2_PA
	hex "LED2 (IR) pulse amplitude"
	range 0 0xff
	default 0x33
	help
	  Set the pulse amplitude to control the LED2 (IR) current. The actual
	  measured LED current for each part can vary significantly due to the
	  trimming methodology.
	  0x00 = 0.0 mA
	  0x01 = 0.2 mA
	  0x02 = 0.4 mA
	  0x0f = 3.1 mA
	  0xff = 50.0 mA

config MAX30101_LED3_PA
	hex "LED2 (green) pulse amplitude"
	range 0 0xff
	default 0xff
	help
	  Set the pulse amplitude to control the LED3 (green) current. The
	  actual measured LED current for each part can vary significantly due
	  to the trimming methodology.
	  0x00 = 0.0 mA
	  0x01 = 0.2 mA
	  0x02 = 0.4 mA
	  0x0f = 3.1 mA
	  0xff = 50.0 mA

if MAX30101_MULTI_LED_MODE

config MAX30101_SLOT1
	int "Slot 1"
	range 0 7
	default 3
	help
	  Set which LED and pulse amplitude are active in time slot 1.
	  0: None (disabled)
	  1: LED1 (red), LED1_PA
	  2: LED2 (IR), LED2_PA
	  3: LED3 (green), LED3_PA
	  4: None (disabled)
	  5: LED1 (red), PILOT_PA
	  6: LED2 (IR), PILOT_PA
	  7: LED3 (green), PILOT_PA

config MAX30101_SLOT2
	int "Slot 2"
	range 0 7
	default 0
	help
	  Set which LED and pulse amplitude are active in time slot 2.
	  0: None (disabled)
	  1: LED1 (red), LED1_PA
	  2: LED2 (IR), LED2_PA
	  3: LED3 (green), LED3_PA
	  4: None (disabled)
	  5: LED1 (red), PILOT_PA
	  6: LED2 (IR), PILOT_PA
	  7: LED3 (green), PILOT_PA

config MAX30101_SLOT3
	int "Slot 3"
	range 0 7
	default 0
	help
	  Set which LED and pulse amplitude are active in time slot 3.
	  0: None (disabled)
	  1: LED1 (red), LED1_PA
	  2: LED2 (IR), LED2_PA
	  3: LED3 (green), LED3_PA
	  4: None (disabled)
	  5: LED1 (red), PILOT_PA
	  6: LED2 (IR), PILOT_PA
	  7: LED3 (green), PILOT_PA

config MAX30101_SLOT4
	int "Slot 4"
	range 0 7
	default 0
	help
	  Set which LED and pulse amplitude are active in time slot 4.
	  0: None (disabled)
	  1: LED1 (red), LED1_PA
	  2: LED2 (IR), LED2_PA
	  3: LED3 (green), LED3_PA
	  4: None (disabled)
	  5: LED1 (red), PILOT_PA
	  6: LED2 (IR), PILOT_PA
	  7: LED3 (green), PILOT_PA

endif # MAX30101_MULTI_LED_MODE

endif # MAX30101
