Lines Matching refs:opt

154 static int opt3001_find_scale(const struct opt3001 *opt, int val,  in opt3001_find_scale()  argument
177 static void opt3001_to_iio_ret(struct opt3001 *opt, u8 exponent, in opt3001_to_iio_ret() argument
187 static void opt3001_set_mode(struct opt3001 *opt, u16 *reg, u16 mode) in opt3001_set_mode() argument
191 opt->mode = mode; in opt3001_set_mode()
231 static int opt3001_get_lux(struct opt3001 *opt, int *val, int *val2) in opt3001_get_lux() argument
240 if (opt->use_irq) { in opt3001_get_lux()
246 ret = i2c_smbus_write_word_swapped(opt->client, in opt3001_get_lux()
250 dev_err(opt->dev, "failed to write register %02x\n", in opt3001_get_lux()
256 opt->ok_to_ignore_lock = true; in opt3001_get_lux()
260 opt->result_ready = false; in opt3001_get_lux()
263 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION); in opt3001_get_lux()
265 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_get_lux()
271 opt3001_set_mode(opt, &reg, OPT3001_CONFIGURATION_M_SINGLE); in opt3001_get_lux()
273 ret = i2c_smbus_write_word_swapped(opt->client, OPT3001_CONFIGURATION, in opt3001_get_lux()
276 dev_err(opt->dev, "failed to write register %02x\n", in opt3001_get_lux()
281 if (opt->use_irq) { in opt3001_get_lux()
283 ret = wait_event_timeout(opt->result_ready_queue, in opt3001_get_lux()
284 opt->result_ready, in opt3001_get_lux()
288 timeout = (opt->int_time == OPT3001_INT_TIME_SHORT) ? in opt3001_get_lux()
293 ret = i2c_smbus_read_word_swapped(opt->client, in opt3001_get_lux()
296 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_get_lux()
307 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_RESULT); in opt3001_get_lux()
309 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_get_lux()
313 opt->result = ret; in opt3001_get_lux()
314 opt->result_ready = true; in opt3001_get_lux()
318 if (opt->use_irq) in opt3001_get_lux()
320 opt->ok_to_ignore_lock = false; in opt3001_get_lux()
327 if (opt->use_irq) { in opt3001_get_lux()
335 value = (opt->low_thresh_exp << 12) | opt->low_thresh_mantissa; in opt3001_get_lux()
336 ret = i2c_smbus_write_word_swapped(opt->client, in opt3001_get_lux()
340 dev_err(opt->dev, "failed to write register %02x\n", in opt3001_get_lux()
346 exponent = OPT3001_REG_EXPONENT(opt->result); in opt3001_get_lux()
347 mantissa = OPT3001_REG_MANTISSA(opt->result); in opt3001_get_lux()
349 opt3001_to_iio_ret(opt, exponent, mantissa, val, val2); in opt3001_get_lux()
354 static int opt3001_get_int_time(struct opt3001 *opt, int *val, int *val2) in opt3001_get_int_time() argument
357 *val2 = opt->int_time; in opt3001_get_int_time()
362 static int opt3001_set_int_time(struct opt3001 *opt, int time) in opt3001_set_int_time() argument
367 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION); in opt3001_set_int_time()
369 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_set_int_time()
379 opt->int_time = OPT3001_INT_TIME_SHORT; in opt3001_set_int_time()
383 opt->int_time = OPT3001_INT_TIME_LONG; in opt3001_set_int_time()
389 return i2c_smbus_write_word_swapped(opt->client, OPT3001_CONFIGURATION, in opt3001_set_int_time()
397 struct opt3001 *opt = iio_priv(iio); in opt3001_read_raw() local
400 if (opt->mode == OPT3001_CONFIGURATION_M_CONTINUOUS) in opt3001_read_raw()
406 mutex_lock(&opt->lock); in opt3001_read_raw()
410 ret = opt3001_get_lux(opt, val, val2); in opt3001_read_raw()
413 ret = opt3001_get_int_time(opt, val, val2); in opt3001_read_raw()
419 mutex_unlock(&opt->lock); in opt3001_read_raw()
428 struct opt3001 *opt = iio_priv(iio); in opt3001_write_raw() local
431 if (opt->mode == OPT3001_CONFIGURATION_M_CONTINUOUS) in opt3001_write_raw()
443 mutex_lock(&opt->lock); in opt3001_write_raw()
444 ret = opt3001_set_int_time(opt, val2); in opt3001_write_raw()
445 mutex_unlock(&opt->lock); in opt3001_write_raw()
455 struct opt3001 *opt = iio_priv(iio); in opt3001_read_event_value() local
458 mutex_lock(&opt->lock); in opt3001_read_event_value()
462 opt3001_to_iio_ret(opt, opt->high_thresh_exp, in opt3001_read_event_value()
463 opt->high_thresh_mantissa, val, val2); in opt3001_read_event_value()
466 opt3001_to_iio_ret(opt, opt->low_thresh_exp, in opt3001_read_event_value()
467 opt->low_thresh_mantissa, val, val2); in opt3001_read_event_value()
473 mutex_unlock(&opt->lock); in opt3001_read_event_value()
483 struct opt3001 *opt = iio_priv(iio); in opt3001_write_event_value() local
495 mutex_lock(&opt->lock); in opt3001_write_event_value()
497 ret = opt3001_find_scale(opt, val, val2, &exponent); in opt3001_write_event_value()
499 dev_err(opt->dev, "can't find scale for %d.%06u\n", val, val2); in opt3001_write_event_value()
509 opt->high_thresh_mantissa = mantissa; in opt3001_write_event_value()
510 opt->high_thresh_exp = exponent; in opt3001_write_event_value()
514 opt->low_thresh_mantissa = mantissa; in opt3001_write_event_value()
515 opt->low_thresh_exp = exponent; in opt3001_write_event_value()
522 ret = i2c_smbus_write_word_swapped(opt->client, reg, value); in opt3001_write_event_value()
524 dev_err(opt->dev, "failed to write register %02x\n", reg); in opt3001_write_event_value()
529 mutex_unlock(&opt->lock); in opt3001_write_event_value()
538 struct opt3001 *opt = iio_priv(iio); in opt3001_read_event_config() local
540 return opt->mode == OPT3001_CONFIGURATION_M_CONTINUOUS; in opt3001_read_event_config()
547 struct opt3001 *opt = iio_priv(iio); in opt3001_write_event_config() local
552 if (state && opt->mode == OPT3001_CONFIGURATION_M_CONTINUOUS) in opt3001_write_event_config()
555 if (!state && opt->mode == OPT3001_CONFIGURATION_M_SHUTDOWN) in opt3001_write_event_config()
558 mutex_lock(&opt->lock); in opt3001_write_event_config()
563 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION); in opt3001_write_event_config()
565 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_write_event_config()
571 opt3001_set_mode(opt, &reg, mode); in opt3001_write_event_config()
573 ret = i2c_smbus_write_word_swapped(opt->client, OPT3001_CONFIGURATION, in opt3001_write_event_config()
576 dev_err(opt->dev, "failed to write register %02x\n", in opt3001_write_event_config()
582 mutex_unlock(&opt->lock); in opt3001_write_event_config()
597 static int opt3001_read_id(struct opt3001 *opt) in opt3001_read_id() argument
603 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_MANUFACTURER_ID); in opt3001_read_id()
605 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_read_id()
613 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_DEVICE_ID); in opt3001_read_id()
615 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_read_id()
622 dev_info(opt->dev, "Found %c%c OPT%04x\n", manufacturer[0], in opt3001_read_id()
628 static int opt3001_configure(struct opt3001 *opt) in opt3001_configure() argument
633 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION); in opt3001_configure()
635 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_configure()
648 opt->int_time = OPT3001_INT_TIME_LONG; in opt3001_configure()
650 opt->int_time = OPT3001_INT_TIME_SHORT; in opt3001_configure()
653 opt3001_set_mode(opt, &reg, OPT3001_CONFIGURATION_M_SHUTDOWN); in opt3001_configure()
661 ret = i2c_smbus_write_word_swapped(opt->client, OPT3001_CONFIGURATION, in opt3001_configure()
664 dev_err(opt->dev, "failed to write register %02x\n", in opt3001_configure()
669 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_LOW_LIMIT); in opt3001_configure()
671 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_configure()
676 opt->low_thresh_mantissa = OPT3001_REG_MANTISSA(ret); in opt3001_configure()
677 opt->low_thresh_exp = OPT3001_REG_EXPONENT(ret); in opt3001_configure()
679 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_HIGH_LIMIT); in opt3001_configure()
681 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_configure()
686 opt->high_thresh_mantissa = OPT3001_REG_MANTISSA(ret); in opt3001_configure()
687 opt->high_thresh_exp = OPT3001_REG_EXPONENT(ret); in opt3001_configure()
695 struct opt3001 *opt = iio_priv(iio); in opt3001_irq() local
698 if (!opt->ok_to_ignore_lock) in opt3001_irq()
699 mutex_lock(&opt->lock); in opt3001_irq()
701 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION); in opt3001_irq()
703 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_irq()
723 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_RESULT); in opt3001_irq()
725 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_irq()
729 opt->result = ret; in opt3001_irq()
730 opt->result_ready = true; in opt3001_irq()
731 wake_up(&opt->result_ready_queue); in opt3001_irq()
735 if (!opt->ok_to_ignore_lock) in opt3001_irq()
736 mutex_unlock(&opt->lock); in opt3001_irq()
747 struct opt3001 *opt; in opt3001_probe() local
751 iio = devm_iio_device_alloc(dev, sizeof(*opt)); in opt3001_probe()
755 opt = iio_priv(iio); in opt3001_probe()
756 opt->client = client; in opt3001_probe()
757 opt->dev = dev; in opt3001_probe()
759 mutex_init(&opt->lock); in opt3001_probe()
760 init_waitqueue_head(&opt->result_ready_queue); in opt3001_probe()
763 ret = opt3001_read_id(opt); in opt3001_probe()
767 ret = opt3001_configure(opt); in opt3001_probe()
793 opt->use_irq = true; in opt3001_probe()
795 dev_dbg(opt->dev, "enabling interrupt-less operation\n"); in opt3001_probe()
804 struct opt3001 *opt = iio_priv(iio); in opt3001_remove() local
808 if (opt->use_irq) in opt3001_remove()
811 ret = i2c_smbus_read_word_swapped(opt->client, OPT3001_CONFIGURATION); in opt3001_remove()
813 dev_err(opt->dev, "failed to read register %02x\n", in opt3001_remove()
819 opt3001_set_mode(opt, &reg, OPT3001_CONFIGURATION_M_SHUTDOWN); in opt3001_remove()
821 ret = i2c_smbus_write_word_swapped(opt->client, OPT3001_CONFIGURATION, in opt3001_remove()
824 dev_err(opt->dev, "failed to write register %02x\n", in opt3001_remove()