forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.6 KiB
128 lines
3.6 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
|
|
====================== |
|
Kernel driver apds990x |
|
====================== |
|
|
|
Supported chips: |
|
Avago APDS990X |
|
|
|
Data sheet: |
|
Not freely available |
|
|
|
Author: |
|
Samu Onkalo <[email protected]> |
|
|
|
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.
|
|
|