Lines Matching refs:chip
93 static int isl29018_set_integration_time(struct isl29018_chip *chip,
100 for (i = 0; i < ARRAY_SIZE(isl29018_int_utimes[chip->type]); ++i) {
101 if (utime == isl29018_int_utimes[chip->type][i]) {
107 if (i >= ARRAY_SIZE(isl29018_int_utimes[chip->type]))
110 ret = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMAND2,
117 int_time = chip->int_time;
119 if (chip->scale.scale == isl29018_scales[int_time][i].scale &&
120 chip->scale.uscale == isl29018_scales[int_time][i].uscale) {
121 chip->scale = isl29018_scales[new_int_time][i];
125 chip->int_time = new_int_time;
130 static int isl29018_set_scale(struct isl29018_chip *chip, int scale, int uscale)
136 for (i = 0; i < ARRAY_SIZE(isl29018_scales[chip->int_time]); ++i) {
137 if (scale == isl29018_scales[chip->int_time][i].scale &&
138 uscale == isl29018_scales[chip->int_time][i].uscale) {
139 new_scale = isl29018_scales[chip->int_time][i];
144 if (i >= ARRAY_SIZE(isl29018_scales[chip->int_time]))
147 ret = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMAND2,
153 chip->scale = new_scale;
158 static int isl29018_read_sensor_input(struct isl29018_chip *chip, int mode)
163 struct device *dev = regmap_get_device(chip->regmap);
166 status = regmap_write(chip->regmap, ISL29018_REG_ADD_COMMAND1,
174 status = regmap_read(chip->regmap, ISL29018_REG_ADD_DATA_LSB, &lsb);
181 status = regmap_read(chip->regmap, ISL29018_REG_ADD_DATA_MSB, &msb);
192 static int isl29018_read_lux(struct isl29018_chip *chip, int *lux)
197 lux_data = isl29018_read_sensor_input(chip,
202 data_x_range = lux_data * chip->scale.scale +
203 lux_data * chip->scale.uscale / 1000000;
204 *lux = data_x_range * chip->calibscale +
205 data_x_range * chip->ucalibscale / 1000000;
210 static int isl29018_read_ir(struct isl29018_chip *chip, int *ir)
214 ir_data = isl29018_read_sensor_input(chip,
224 static int isl29018_read_proximity_ir(struct isl29018_chip *chip, int scheme,
230 struct device *dev = regmap_get_device(chip->regmap);
233 status = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMAND2,
241 prox_data = isl29018_read_sensor_input(chip,
251 ir_data = isl29018_read_sensor_input(chip,
269 struct isl29018_chip *chip = iio_priv(indio_dev);
273 mutex_lock(&chip->lock);
274 for (i = 0; i < ARRAY_SIZE(isl29018_scales[chip->int_time]); ++i)
276 isl29018_scales[chip->int_time][i].scale,
277 isl29018_scales[chip->int_time][i].uscale);
278 mutex_unlock(&chip->lock);
290 struct isl29018_chip *chip = iio_priv(indio_dev);
294 for (i = 0; i < ARRAY_SIZE(isl29018_int_utimes[chip->type]); ++i)
296 isl29018_int_utimes[chip->type][i]);
326 struct isl29018_chip *chip = iio_priv(indio_dev);
329 * Return the "proximity scheme" i.e. if the chip does on chip
330 * infrared suppression (1 means perform on chip suppression)
332 return sprintf(buf, "%d\n", chip->prox_scheme);
340 struct isl29018_chip *chip = iio_priv(indio_dev);
349 * Get the "proximity scheme" i.e. if the chip does on chip
350 * infrared suppression (1 means perform on chip suppression)
352 mutex_lock(&chip->lock);
353 chip->prox_scheme = val;
354 mutex_unlock(&chip->lock);
365 struct isl29018_chip *chip = iio_priv(indio_dev);
368 mutex_lock(&chip->lock);
369 if (chip->suspended) {
376 chip->calibscale = val;
377 chip->ucalibscale = val2;
383 ret = isl29018_set_integration_time(chip, val2);
387 ret = isl29018_set_scale(chip, val, val2);
394 mutex_unlock(&chip->lock);
406 struct isl29018_chip *chip = iio_priv(indio_dev);
408 mutex_lock(&chip->lock);
409 if (chip->suspended) {
418 ret = isl29018_read_lux(chip, val);
421 ret = isl29018_read_ir(chip, val);
424 ret = isl29018_read_proximity_ir(chip,
425 chip->prox_scheme,
437 *val2 = isl29018_int_utimes[chip->type][chip->int_time];
443 *val = chip->scale.scale;
444 *val2 = chip->scale.uscale;
450 *val = chip->calibscale;
451 *val2 = chip->ucalibscale;
460 mutex_unlock(&chip->lock);
531 static int isl29018_chip_init(struct isl29018_chip *chip)
534 struct device *dev = regmap_get_device(chip->regmap);
536 if (chip->type == isl29035) {
539 status = regmap_read(chip->regmap, ISL29035_REG_DEVICE_ID, &id);
553 status = regmap_update_bits(chip->regmap,
581 status = regmap_write(chip->regmap, ISL29018_REG_TEST, 0x0);
593 status = regmap_write(chip->regmap, ISL29018_REG_ADD_COMMAND1, 0);
603 status = isl29018_set_scale(chip, chip->scale.scale,
604 chip->scale.uscale);
610 status = isl29018_set_integration_time(chip,
611 isl29018_int_utimes[chip->type][chip->int_time]);
706 struct isl29018_chip *chip = _data;
709 err = regulator_disable(chip->vcc_reg);
717 struct isl29018_chip *chip;
723 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip));
727 chip = iio_priv(indio_dev);
739 mutex_init(&chip->lock);
741 chip->type = dev_id;
742 chip->calibscale = 1;
743 chip->ucalibscale = 0;
744 chip->int_time = ISL29018_INT_TIME_16;
745 chip->scale = isl29018_scales[chip->int_time][0];
746 chip->suspended = false;
748 chip->vcc_reg = devm_regulator_get(&client->dev, "vcc");
749 if (IS_ERR(chip->vcc_reg))
750 return dev_err_probe(&client->dev, PTR_ERR(chip->vcc_reg),
753 err = regulator_enable(chip->vcc_reg);
760 chip);
766 chip->regmap = devm_regmap_init_i2c(client,
768 if (IS_ERR(chip->regmap)) {
769 err = PTR_ERR(chip->regmap);
774 err = isl29018_chip_init(chip);
790 struct isl29018_chip *chip = iio_priv(dev_get_drvdata(dev));
793 mutex_lock(&chip->lock);
800 chip->suspended = true;
801 ret = regulator_disable(chip->vcc_reg);
805 mutex_unlock(&chip->lock);
812 struct isl29018_chip *chip = iio_priv(dev_get_drvdata(dev));
815 mutex_lock(&chip->lock);
817 err = regulator_enable(chip->vcc_reg);
820 mutex_unlock(&chip->lock);
824 err = isl29018_chip_init(chip);
826 chip->suspended = false;
828 mutex_unlock(&chip->lock);