mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-08 16:41:55 +00:00
Use the motion sensor to manage ALS as well. The current interface (via memmap) is preserved, but we can also access the sensor via cros ec sensor stack and send the ALS information to ARC++. BUG=chrome-os-partner:59423 BRANCH=reef CQ-DEPEND=CL:424217 TEST=Check the sensor is working via ACPI sensor and cros ec sensor. Check ARC++ sees the sensors. Change-Id: Iaf608370454ad582691b72b471ea87b511863a78 Signed-off-by: Gwendal Grignou <gwendal@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/424323 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
77 lines
1.9 KiB
C
77 lines
1.9 KiB
C
/* Copyright 2015 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*
|
|
* TI OPT3001 light sensor driver
|
|
*/
|
|
|
|
#ifndef __CROS_EC_ALS_OPT3001_H
|
|
#define __CROS_EC_ALS_OPT3001_H
|
|
|
|
/* I2C interface */
|
|
#define OPT3001_I2C_ADDR1 (0x44 << 1)
|
|
#define OPT3001_I2C_ADDR2 (0x45 << 1)
|
|
#define OPT3001_I2C_ADDR3 (0x46 << 1)
|
|
#define OPT3001_I2C_ADDR4 (0x47 << 1)
|
|
|
|
/* OPT3001 registers */
|
|
#define OPT3001_REG_RESULT 0x00
|
|
#define OPT3001_REG_CONFIGURE 0x01
|
|
#define OPT3001_RANGE_OFFSET 12
|
|
#define OPT3001_RANGE_MASK 0x0fff
|
|
#define OPT3001_MODE_OFFSET 9
|
|
#define OPT3001_MODE_MASK 0xf9ff
|
|
enum opt3001_mode {
|
|
OPT3001_MODE_SUSPEND,
|
|
OPT3001_MODE_FORCED,
|
|
OPT3001_MODE_CONTINUOUS,
|
|
};
|
|
|
|
#define OPT3001_REG_INT_LIMIT_LSB 0x02
|
|
#define OPT3001_REG_INT_LIMIT_MSB 0x03
|
|
#define OPT3001_REG_MAN_ID 0x7e
|
|
#define OPT3001_REG_DEV_ID 0x7f
|
|
|
|
/* OPT3001 register values */
|
|
#define OPT3001_MANUFACTURER_ID 0x5449
|
|
#define OPT3001_DEVICE_ID 0x3001
|
|
|
|
#ifdef HAS_TASK_ALS
|
|
int opt3001_init(void);
|
|
int opt3001_read_lux(int *lux, int af);
|
|
#else
|
|
/* OPT3001 Full-Scale Range */
|
|
enum opt3001_range {
|
|
OPT3001_RANGE_40P95_LUX,
|
|
OPT3001_RANGE_81P90_LUX,
|
|
OPT3001_RANGE_163P80_LUX,
|
|
OPT3001_RANGE_327P60_LUX,
|
|
OPT3001_RANGE_655P20_LUX,
|
|
OPT3001_RANGE_1310P40_LUX,
|
|
OPT3001_RANGE_2620P80_LUX,
|
|
OPT3001_RANGE_5241P60_LUX,
|
|
OPT3001_RANGE_10483P20_LUX,
|
|
OPT3001_RANGE_20966P40_LUX,
|
|
OPT3001_RANGE_41932P80_LUX,
|
|
OPT3001_RANGE_83865P60_LUX,
|
|
OPT3001_RANGE_AUTOMATIC_FULL_SCALE,
|
|
};
|
|
|
|
#define OPT3001_GET_DATA(_s) ((struct opt3001_drv_data_t *)(_s)->drv_data)
|
|
|
|
struct opt3001_drv_data_t {
|
|
enum opt3001_range range;
|
|
int rate;
|
|
int last_value;
|
|
int attenuation;
|
|
};
|
|
|
|
extern const struct accelgyro_drv opt3001_drv;
|
|
#endif
|
|
|
|
#ifdef CONFIG_CMD_I2C_STRESS_TEST_ALS
|
|
extern struct i2c_stress_test_dev opt3001_i2c_stress_test_dev;
|
|
#endif
|
|
|
|
#endif /* __CROS_EC_ALS_OPT3001_H */
|