diff options
author | Ziyuan Xu <xzy.xu@rock-chips.com> | 2018-06-14 16:46:39 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2018-10-11 18:36:09 +0800 |
commit | 10dbf59d3f10fe8f2bb59c3034bf246af5884cff (patch) | |
tree | 2c6d379a127c30271e239091163809bca1bc958b /drivers | |
parent | b2950611bb6c6be4de7085f2eef344999c8481ee (diff) |
iio: light: vl6180: add something initialization from vendor
Change-Id: I77ca2c836c998be5158e222909834bda8bb24245
Signed-off-by: Ziyuan Xu <xzy.xu@rock-chips.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/iio/light/vl6180.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/drivers/iio/light/vl6180.c b/drivers/iio/light/vl6180.c index 67f8beb84fc3..4983fd809397 100644 --- a/drivers/iio/light/vl6180.c +++ b/drivers/iio/light/vl6180.c @@ -442,6 +442,76 @@ static const struct iio_info vl6180_info = { .driver_module = THIS_MODULE, }; +static int vl6180_misc_init(struct vl6180_data *data) +{ + struct i2c_client *client = data->client; + + /* REGISTER_TUNING_SR03_270514_CustomerView.txt */ + vl6180_write_byte(client, 0x0207, 0x01); + vl6180_write_byte(client, 0x0208, 0x01); + vl6180_write_byte(client, 0x0096, 0x00); + vl6180_write_byte(client, 0x0097, 0xfd); + vl6180_write_byte(client, 0x00e3, 0x00); + vl6180_write_byte(client, 0x00e4, 0x04); + vl6180_write_byte(client, 0x00e5, 0x02); + vl6180_write_byte(client, 0x00e6, 0x01); + vl6180_write_byte(client, 0x00e7, 0x03); + vl6180_write_byte(client, 0x00f5, 0x02); + vl6180_write_byte(client, 0x00d9, 0x05); + vl6180_write_byte(client, 0x00db, 0xce); + vl6180_write_byte(client, 0x00dc, 0x03); + vl6180_write_byte(client, 0x00dd, 0xf8); + vl6180_write_byte(client, 0x009f, 0x00); + vl6180_write_byte(client, 0x00a3, 0x3c); + vl6180_write_byte(client, 0x00b7, 0x00); + vl6180_write_byte(client, 0x00bb, 0x3c); + vl6180_write_byte(client, 0x00b2, 0x09); + vl6180_write_byte(client, 0x00ca, 0x09); + vl6180_write_byte(client, 0x0198, 0x01); + vl6180_write_byte(client, 0x01b0, 0x17); + vl6180_write_byte(client, 0x01ad, 0x00); + vl6180_write_byte(client, 0x00ff, 0x05); + vl6180_write_byte(client, 0x0100, 0x05); + vl6180_write_byte(client, 0x0199, 0x05); + vl6180_write_byte(client, 0x01a6, 0x1b); + vl6180_write_byte(client, 0x01ac, 0x3e); + vl6180_write_byte(client, 0x01a7, 0x1f); + vl6180_write_byte(client, 0x0030, 0x00); + + /* Recommended : Public registers - See data sheet for more detail */ + /* Enables polling for New Sample ready when measurement completes */ + vl6180_write_byte(client, 0x0011, 0x10); + /* + * Set the averaging sample period (compromise between lower noise + * and increased execution time) + */ + vl6180_write_byte(client, 0x010a, 0x30); + /* + * Sets the light and dark gain (upper nibble). Dark gain should + * not be changed. + */ + vl6180_write_byte(client, 0x003f, 0x46); + /* + * Sets the # of range measurements after which auto calibration + * of system is performed. + */ + vl6180_write_byte(client, 0x0031, 0xFF); + /* Set ALS integration time to 100ms */ + vl6180_write_byte(client, 0x0040, 0x63); + /* perform a single temperature calibration of the ranging sensor */ + vl6180_write_byte(client, 0x002e, 0x01); + + /* Optional: Public registers - See data sheet for more detail */ + /* Set default ranging inter-measurement period to 100ms */ + vl6180_write_byte(client, 0x001b, 0x09); + /* Set default ALS inter-measurement period to 500ms */ + vl6180_write_byte(client, 0x003e, 0x31); + /* Configures interrupt on New sample ready */ + vl6180_write_byte(client, 0x0014, 0x24); + + return 0; +} + static int vl6180_init(struct vl6180_data *data) { struct i2c_client *client = data->client; @@ -493,6 +563,8 @@ static int vl6180_init(struct vl6180_data *data) if (ret < 0) return ret; + vl6180_misc_init(data); + return vl6180_hold(data, false); } |