| /* 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. |
| * |
| * Dyna-Image AL3010 light sensor driver |
| */ |
| |
| #include "driver/als_al3010.h" |
| #include "i2c.h" |
| |
| /** |
| * Initialise AL3010 light sensor. |
| */ |
| int al3010_init(void) |
| { |
| int ret; |
| |
| ret = i2c_write8(I2C_PORT_ALS, AL3010_I2C_ADDR, |
| AL3010_REG_CONFIG, AL3010_GAIN << 4); |
| if (ret) |
| return ret; |
| |
| return i2c_write8(I2C_PORT_ALS, AL3010_I2C_ADDR, |
| AL3010_REG_SYSTEM, AL3010_ENABLE); |
| } |
| |
| /** |
| * Read AL3010 light sensor data. |
| */ |
| int al3010_read_lux(int *lux, int af) |
| { |
| int ret; |
| int val; |
| long long val64; |
| |
| ret = i2c_read16(I2C_PORT_ALS, AL3010_I2C_ADDR, |
| AL3010_REG_DATA_LOW, &val); |
| |
| if (ret) |
| return ret; |
| |
| val64 = val; |
| val64 = (val64 * AL3010_GAIN_SCALE) / 10000; |
| val = val64 * af / 100; |
| |
| *lux = val; |
| |
| return EC_SUCCESS; |
| } |