int tcs37727_init(tcs37727_t *dev, i2c_t i2c, uint8_t address, int atime_us) { /* write device descriptor */ dev->i2c = i2c; dev->addr = address; dev->initialized = false; i2c_acquire(dev->i2c); /* initialize the I2C bus */ if (i2c_init_master(i2c, I2C_SPEED) < 0) { i2c_release(dev->i2c); return -1; } i2c_release(dev->i2c); if (tcs37727_test(dev)) { return -2; } i2c_acquire(dev->i2c); if (i2c_write_reg(dev->i2c, dev->addr, TCS37727_CONTROL, TCS37727_CONTROL_AGAIN_4) != 1) { i2c_release(dev->i2c); return -3; } dev->again = 4; if (i2c_write_reg(dev->i2c, dev->addr, TCS37727_ATIME, TCS37727_ATIME_TO_REG(atime_us)) != 1) { i2c_release(dev->i2c); return -3; } dev->atime_us = atime_us; dev->initialized = true; i2c_release(dev->i2c); return 0; }
int tcs37727_init(tcs37727_t *dev, const tcs37727_params_t *params) { uint8_t tmp; /* check parameters */ assert(dev && params); /* initialize the device descriptor */ memcpy(&dev->p, params, sizeof(tcs37727_params_t)); /* setup the I2C bus */ i2c_acquire(BUS); if (i2c_init_master(BUS, I2C_SPEED) < 0) { i2c_release(BUS); LOG_ERROR("[tcs37727] init: error initializing I2C bus\n"); return TCS37727_NOBUS; } /* check if we can communicate with the device */ i2c_read_reg(BUS, ADR, TCS37727_ID, &tmp); if (tmp != TCS37727_ID_VALUE) { i2c_release(BUS); LOG_ERROR("[tcs37727] init: error while reading ID register\n"); return TCS37727_NODEV; } /* configure gain and conversion time */ i2c_write_reg(BUS, ADR, TCS37727_ATIME, TCS37727_ATIME_TO_REG(dev->p.atime)); i2c_write_reg(BUS, ADR, TCS37727_CONTROL, TCS37727_CONTROL_AGAIN_4); dev->again = 4; /* enable the device */ tmp = (TCS37727_ENABLE_AEN | TCS37727_ENABLE_PON); i2c_write_reg(BUS, ADR, TCS37727_ENABLE, tmp); i2c_release(BUS); return TCS37727_OK; }