| 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. |