129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. SPDX-License-Identifier: GPL-2.0
 | |
| 
 | |
| ======================
 | |
| Kernel driver apds990x
 | |
| ======================
 | |
| 
 | |
| Supported chips:
 | |
| Avago APDS990X
 | |
| 
 | |
| Data sheet:
 | |
| Not freely available
 | |
| 
 | |
| Author:
 | |
| Samu Onkalo <samu.p.onkalo@nokia.com>
 | |
| 
 | |
| Description
 | |
| -----------
 | |
| 
 | |
| APDS990x is a combined ambient light and proximity sensor. ALS and proximity
 | |
| functionality are highly connected. ALS measurement path must be running
 | |
| while the proximity functionality is enabled.
 | |
| 
 | |
| ALS produces raw measurement values for two channels: Clear channel
 | |
| (infrared + visible light) and IR only. However, threshold comparisons happen
 | |
| using clear channel only. Lux value and the threshold level on the HW
 | |
| might vary quite much depending the spectrum of the light source.
 | |
| 
 | |
| Driver makes necessary conversions to both directions so that user handles
 | |
| only lux values. Lux value is calculated using information from the both
 | |
| channels. HW threshold level is calculated from the given lux value to match
 | |
| with current type of the lightning. Sometimes inaccuracy of the estimations
 | |
| lead to false interrupt, but that doesn't harm.
 | |
| 
 | |
| ALS contains 4 different gain steps. Driver automatically
 | |
| selects suitable gain step. After each measurement, reliability of the results
 | |
| is estimated and new measurement is triggered if necessary.
 | |
| 
 | |
| Platform data can provide tuned values to the conversion formulas if
 | |
| values are known. Otherwise plain sensor default values are used.
 | |
| 
 | |
| Proximity side is little bit simpler. There is no need for complex conversions.
 | |
| It produces directly usable values.
 | |
| 
 | |
| Driver controls chip operational state using pm_runtime framework.
 | |
| Voltage regulators are controlled based on chip operational state.
 | |
| 
 | |
| SYSFS
 | |
| -----
 | |
| 
 | |
| 
 | |
| chip_id
 | |
| 	RO - shows detected chip type and version
 | |
| 
 | |
| power_state
 | |
| 	RW - enable / disable chip. Uses counting logic
 | |
| 
 | |
| 	     1 enables the chip
 | |
| 	     0 disables the chip
 | |
| lux0_input
 | |
| 	RO - measured lux value
 | |
| 
 | |
| 	     sysfs_notify called when threshold interrupt occurs
 | |
| 
 | |
| lux0_sensor_range
 | |
| 	RO - lux0_input max value.
 | |
| 
 | |
| 	     Actually never reaches since sensor tends
 | |
| 	     to saturate much before that. Real max value varies depending
 | |
| 	     on the light spectrum etc.
 | |
| 
 | |
| lux0_rate
 | |
| 	RW - measurement rate in Hz
 | |
| 
 | |
| lux0_rate_avail
 | |
| 	RO - supported measurement rates
 | |
| 
 | |
| lux0_calibscale
 | |
| 	RW - calibration value.
 | |
| 
 | |
| 	     Set to neutral value by default.
 | |
| 	     Output results are multiplied with calibscale / calibscale_default
 | |
| 	     value.
 | |
| 
 | |
| lux0_calibscale_default
 | |
| 	RO - neutral calibration value
 | |
| 
 | |
| lux0_thresh_above_value
 | |
| 	RW - HI level threshold value.
 | |
| 
 | |
| 	     All results above the value
 | |
| 	     trigs an interrupt. 65535 (i.e. sensor_range) disables the above
 | |
| 	     interrupt.
 | |
| 
 | |
| lux0_thresh_below_value
 | |
| 	RW - LO level threshold value.
 | |
| 
 | |
| 	     All results below the value
 | |
| 	     trigs an interrupt. 0 disables the below interrupt.
 | |
| 
 | |
| prox0_raw
 | |
| 	RO - measured proximity value
 | |
| 
 | |
| 	     sysfs_notify called when threshold interrupt occurs
 | |
| 
 | |
| prox0_sensor_range
 | |
| 	RO - prox0_raw max value (1023)
 | |
| 
 | |
| prox0_raw_en
 | |
| 	RW - enable / disable proximity - uses counting logic
 | |
| 
 | |
| 	     - 1 enables the proximity
 | |
| 	     - 0 disables the proximity
 | |
| 
 | |
| prox0_reporting_mode
 | |
| 	RW - trigger / periodic.
 | |
| 
 | |
| 	     In "trigger" mode the driver tells two possible
 | |
| 	     values: 0 or prox0_sensor_range value. 0 means no proximity,
 | |
| 	     1023 means proximity. This causes minimal number of interrupts.
 | |
| 	     In "periodic" mode the driver reports all values above
 | |
| 	     prox0_thresh_above. This causes more interrupts, but it can give
 | |
| 	     _rough_ estimate about the distance.
 | |
| 
 | |
| prox0_reporting_mode_avail
 | |
| 	RO - accepted values to prox0_reporting_mode (trigger, periodic)
 | |
| 
 | |
| prox0_thresh_above_value
 | |
| 	RW - threshold level which trigs proximity events.
 |