• Home
  • Raw
  • Download

Lines Matching +full:cover +full:- +full:comp +full:- +full:gain

24  * 02110-1301 USA
52 #define CALIB_FRAC_HALF (1 << (CALIB_FRAC_BITS - 1))
142 struct i2c_client *client = chip->client; in tsl2563_set_power()
156 struct i2c_client *client = chip->client; in tsl2563_get_power()
170 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_configure()
172 chip->gainlevel->gaintime); in tsl2563_configure()
175 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_configure()
177 chip->high_thres & 0xFF); in tsl2563_configure()
180 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_configure()
182 (chip->high_thres >> 8) & 0xFF); in tsl2563_configure()
185 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_configure()
187 chip->low_thres & 0xFF); in tsl2563_configure()
190 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_configure()
192 (chip->low_thres >> 8) & 0xFF); in tsl2563_configure()
220 return ret ? 0 : -ENODEV; in tsl2563_detect()
225 struct i2c_client *client = chip->client; in tsl2563_read_id()
239 * 16x gain. This function returns the number of bits of shift needed to
241 * timing and gain settings.
255 /* no-op */ in tsl2563_adc_shiftbits()
275 switch (chip->gainlevel->gaintime & TSL2563_TIMING_MASK) { in tsl2563_wait_adc()
294 struct i2c_client *client = chip->client; in tsl2563_adjust_gainlevel()
296 if (adc > chip->gainlevel->max || adc < chip->gainlevel->min) { in tsl2563_adjust_gainlevel()
298 (adc > chip->gainlevel->max) ? in tsl2563_adjust_gainlevel()
299 chip->gainlevel++ : chip->gainlevel--; in tsl2563_adjust_gainlevel()
303 chip->gainlevel->gaintime); in tsl2563_adjust_gainlevel()
315 struct i2c_client *client = chip->client; in tsl2563_get_adc()
320 if (chip->suspended) in tsl2563_get_adc()
323 if (!chip->int_enabled) { in tsl2563_get_adc()
324 cancel_delayed_work(&chip->poweroff_work); in tsl2563_get_adc()
353 chip->data0 = tsl2563_normalize_adc(adc0, chip->gainlevel->gaintime); in tsl2563_get_adc()
354 chip->data1 = tsl2563_normalize_adc(adc1, chip->gainlevel->gaintime); in tsl2563_get_adc()
356 if (!chip->int_enabled) in tsl2563_get_adc()
357 schedule_delayed_work(&chip->poweroff_work, 5 * HZ); in tsl2563_get_adc()
378 * The basic formula is lux = c0 * adc0 - c1 * adc1, where c0 and c1 are
436 while (lp->ch_ratio < ratio) in tsl2563_adc_to_lux()
439 lux = ch0 * lp->ch0_coeff - ch1 * lp->ch1_coeff; in tsl2563_adc_to_lux()
464 return -EINVAL; in tsl2563_write_raw()
465 if (chan->channel2 == IIO_MOD_LIGHT_BOTH) in tsl2563_write_raw()
466 chip->calib0 = tsl2563_calib_from_sysfs(val); in tsl2563_write_raw()
467 else if (chan->channel2 == IIO_MOD_LIGHT_IR) in tsl2563_write_raw()
468 chip->calib1 = tsl2563_calib_from_sysfs(val); in tsl2563_write_raw()
470 return -EINVAL; in tsl2563_write_raw()
481 int ret = -EINVAL; in tsl2563_read_raw()
485 mutex_lock(&chip->lock); in tsl2563_read_raw()
489 switch (chan->type) { in tsl2563_read_raw()
494 calib0 = tsl2563_calib_adc(chip->data0, chip->calib0) * in tsl2563_read_raw()
495 chip->cover_comp_gain; in tsl2563_read_raw()
496 calib1 = tsl2563_calib_adc(chip->data1, chip->calib1) * in tsl2563_read_raw()
497 chip->cover_comp_gain; in tsl2563_read_raw()
505 if (chan->channel2 == IIO_MOD_LIGHT_BOTH) in tsl2563_read_raw()
506 *val = chip->data0; in tsl2563_read_raw()
508 *val = chip->data1; in tsl2563_read_raw()
517 if (chan->channel2 == IIO_MOD_LIGHT_BOTH) in tsl2563_read_raw()
518 *val = tsl2563_calib_to_sysfs(chip->calib0); in tsl2563_read_raw()
520 *val = tsl2563_calib_to_sysfs(chip->calib1); in tsl2563_read_raw()
524 ret = -EINVAL; in tsl2563_read_raw()
529 mutex_unlock(&chip->lock); in tsl2563_read_raw()
579 *val = chip->high_thres; in tsl2563_read_thresh()
582 *val = chip->low_thres; in tsl2563_read_thresh()
585 return -EINVAL; in tsl2563_read_thresh()
604 mutex_lock(&chip->lock); in tsl2563_write_thresh()
605 ret = i2c_smbus_write_byte_data(chip->client, TSL2563_CMD | address, in tsl2563_write_thresh()
609 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_write_thresh()
613 chip->high_thres = val; in tsl2563_write_thresh()
615 chip->low_thres = val; in tsl2563_write_thresh()
618 mutex_unlock(&chip->lock); in tsl2563_write_thresh()
636 i2c_smbus_write_byte(chip->client, TSL2563_CMD | TSL2563_CLEARINT); in tsl2563_event_handler()
647 mutex_lock(&chip->lock); in tsl2563_write_interrupt_config()
648 if (state && !(chip->intr & 0x30)) { in tsl2563_write_interrupt_config()
649 chip->intr &= ~0x30; in tsl2563_write_interrupt_config()
650 chip->intr |= 0x10; in tsl2563_write_interrupt_config()
652 cancel_delayed_work(&chip->poweroff_work); in tsl2563_write_interrupt_config()
661 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_write_interrupt_config()
663 chip->intr); in tsl2563_write_interrupt_config()
664 chip->int_enabled = true; in tsl2563_write_interrupt_config()
667 if (!state && (chip->intr & 0x30)) { in tsl2563_write_interrupt_config()
668 chip->intr &= ~0x30; in tsl2563_write_interrupt_config()
669 ret = i2c_smbus_write_byte_data(chip->client, in tsl2563_write_interrupt_config()
671 chip->intr); in tsl2563_write_interrupt_config()
672 chip->int_enabled = false; in tsl2563_write_interrupt_config()
674 schedule_delayed_work(&chip->poweroff_work, 5 * HZ); in tsl2563_write_interrupt_config()
677 mutex_unlock(&chip->lock); in tsl2563_write_interrupt_config()
689 mutex_lock(&chip->lock); in tsl2563_read_interrupt_config()
690 ret = i2c_smbus_read_byte_data(chip->client, in tsl2563_read_interrupt_config()
692 mutex_unlock(&chip->lock); in tsl2563_read_interrupt_config()
718 struct tsl2563_platform_data *pdata = client->dev.platform_data; in tsl2563_probe()
719 struct device_node *np = client->dev.of_node; in tsl2563_probe()
723 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip)); in tsl2563_probe()
725 return -ENOMEM; in tsl2563_probe()
730 chip->client = client; in tsl2563_probe()
734 dev_err(&client->dev, "detect error %d\n", -err); in tsl2563_probe()
740 dev_err(&client->dev, "read id error %d\n", -err); in tsl2563_probe()
744 mutex_init(&chip->lock); in tsl2563_probe()
747 chip->low_thres = 0x0; in tsl2563_probe()
748 chip->high_thres = 0xffff; in tsl2563_probe()
749 chip->gainlevel = tsl2563_gainlevel_table; in tsl2563_probe()
750 chip->intr = TSL2563_INT_PERSIST(4); in tsl2563_probe()
751 chip->calib0 = tsl2563_calib_from_sysfs(CALIB_BASE_SYSFS); in tsl2563_probe()
752 chip->calib1 = tsl2563_calib_from_sysfs(CALIB_BASE_SYSFS); in tsl2563_probe()
755 chip->cover_comp_gain = pdata->cover_comp_gain; in tsl2563_probe()
757 of_property_read_u32(np, "amstaos,cover-comp-gain", in tsl2563_probe()
758 &chip->cover_comp_gain); in tsl2563_probe()
760 chip->cover_comp_gain = 1; in tsl2563_probe()
762 dev_info(&client->dev, "model %d, rev. %d\n", id >> 4, id & 0x0f); in tsl2563_probe()
763 indio_dev->name = client->name; in tsl2563_probe()
764 indio_dev->channels = tsl2563_channels; in tsl2563_probe()
765 indio_dev->num_channels = ARRAY_SIZE(tsl2563_channels); in tsl2563_probe()
766 indio_dev->dev.parent = &client->dev; in tsl2563_probe()
767 indio_dev->modes = INDIO_DIRECT_MODE; in tsl2563_probe()
769 if (client->irq) in tsl2563_probe()
770 indio_dev->info = &tsl2563_info; in tsl2563_probe()
772 indio_dev->info = &tsl2563_info_no_irq; in tsl2563_probe()
774 if (client->irq) { in tsl2563_probe()
775 err = devm_request_threaded_irq(&client->dev, client->irq, in tsl2563_probe()
782 dev_err(&client->dev, "irq request error %d\n", -err); in tsl2563_probe()
789 dev_err(&client->dev, "configure error %d\n", -err); in tsl2563_probe()
793 INIT_DELAYED_WORK(&chip->poweroff_work, tsl2563_poweroff_work); in tsl2563_probe()
796 schedule_delayed_work(&chip->poweroff_work, 5 * HZ); in tsl2563_probe()
800 dev_err(&client->dev, "iio registration error %d\n", -err); in tsl2563_probe()
807 cancel_delayed_work_sync(&chip->poweroff_work); in tsl2563_probe()
817 if (!chip->int_enabled) in tsl2563_remove()
818 cancel_delayed_work(&chip->poweroff_work); in tsl2563_remove()
819 /* Ensure that interrupts are disabled - then flush any bottom halves */ in tsl2563_remove()
820 chip->intr &= ~0x30; in tsl2563_remove()
821 i2c_smbus_write_byte_data(chip->client, TSL2563_CMD | TSL2563_REG_INT, in tsl2563_remove()
822 chip->intr); in tsl2563_remove()
835 mutex_lock(&chip->lock); in tsl2563_suspend()
841 chip->suspended = true; in tsl2563_suspend()
844 mutex_unlock(&chip->lock); in tsl2563_suspend()
853 mutex_lock(&chip->lock); in tsl2563_resume()
863 chip->suspended = false; in tsl2563_resume()
866 mutex_unlock(&chip->lock); in tsl2563_resume()