Lines Matching refs:data
370 static int gp2ap020a00f_set_operation_mode(struct gp2ap020a00f_data *data, in gp2ap020a00f_set_operation_mode() argument
377 err = regmap_read(data->regmap, GP2AP020A00F_OP_REG, in gp2ap020a00f_set_operation_mode()
388 err = regmap_update_bits(data->regmap, in gp2ap020a00f_set_operation_mode()
395 err = regmap_update_bits(data->regmap, GP2AP020A00F_ALS_REG, in gp2ap020a00f_set_operation_mode()
401 err = regmap_update_bits(data->regmap, GP2AP020A00F_PS_REG, in gp2ap020a00f_set_operation_mode()
407 err = regmap_update_bits(data->regmap, GP2AP020A00F_LED_REG, in gp2ap020a00f_set_operation_mode()
415 err = regmap_update_bits(data->regmap, in gp2ap020a00f_set_operation_mode()
423 data->cur_opmode = op; in gp2ap020a00f_set_operation_mode()
428 static bool gp2ap020a00f_als_enabled(struct gp2ap020a00f_data *data) in gp2ap020a00f_als_enabled() argument
430 return test_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags) || in gp2ap020a00f_als_enabled()
431 test_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags) || in gp2ap020a00f_als_enabled()
432 test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags) || in gp2ap020a00f_als_enabled()
433 test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags); in gp2ap020a00f_als_enabled()
436 static bool gp2ap020a00f_prox_detect_enabled(struct gp2ap020a00f_data *data) in gp2ap020a00f_prox_detect_enabled() argument
438 return test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags) || in gp2ap020a00f_prox_detect_enabled()
439 test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags); in gp2ap020a00f_prox_detect_enabled()
442 static int gp2ap020a00f_write_event_threshold(struct gp2ap020a00f_data *data, in gp2ap020a00f_write_event_threshold() argument
451 else if (test_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags) && in gp2ap020a00f_write_event_threshold()
458 thresh_reg_val = data->thresh_val[th_val_id] / 16; in gp2ap020a00f_write_event_threshold()
460 thresh_reg_val = data->thresh_val[th_val_id] > 16000 ? in gp2ap020a00f_write_event_threshold()
462 data->thresh_val[th_val_id]; in gp2ap020a00f_write_event_threshold()
466 return regmap_bulk_write(data->regmap, in gp2ap020a00f_write_event_threshold()
471 static int gp2ap020a00f_alter_opmode(struct gp2ap020a00f_data *data, in gp2ap020a00f_alter_opmode() argument
481 if (data->cur_opmode == GP2AP020A00F_OPMODE_SHUTDOWN) in gp2ap020a00f_alter_opmode()
486 if (data->cur_opmode == GP2AP020A00F_OPMODE_ALS_AND_PS) in gp2ap020a00f_alter_opmode()
494 return gp2ap020a00f_set_operation_mode(data, new_mode); in gp2ap020a00f_alter_opmode()
497 static int gp2ap020a00f_exec_cmd(struct gp2ap020a00f_data *data, in gp2ap020a00f_exec_cmd() argument
504 if (data->cur_opmode != GP2AP020A00F_OPMODE_SHUTDOWN) in gp2ap020a00f_exec_cmd()
506 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_exec_cmd()
510 if (data->cur_opmode != GP2AP020A00F_OPMODE_SHUTDOWN) in gp2ap020a00f_exec_cmd()
512 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_exec_cmd()
516 if (data->cur_opmode != GP2AP020A00F_OPMODE_SHUTDOWN) in gp2ap020a00f_exec_cmd()
518 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_exec_cmd()
522 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT) in gp2ap020a00f_exec_cmd()
524 if (!gp2ap020a00f_als_enabled(data)) in gp2ap020a00f_exec_cmd()
525 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
528 set_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags); in gp2ap020a00f_exec_cmd()
531 clear_bit(GP2AP020A00F_FLAG_ALS_CLEAR_TRIGGER, &data->flags); in gp2ap020a00f_exec_cmd()
532 if (gp2ap020a00f_als_enabled(data)) in gp2ap020a00f_exec_cmd()
534 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
539 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT) in gp2ap020a00f_exec_cmd()
541 if (!gp2ap020a00f_als_enabled(data)) in gp2ap020a00f_exec_cmd()
542 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
545 set_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags); in gp2ap020a00f_exec_cmd()
548 clear_bit(GP2AP020A00F_FLAG_ALS_IR_TRIGGER, &data->flags); in gp2ap020a00f_exec_cmd()
549 if (gp2ap020a00f_als_enabled(data)) in gp2ap020a00f_exec_cmd()
551 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
556 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT) in gp2ap020a00f_exec_cmd()
558 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
561 set_bit(GP2AP020A00F_FLAG_PROX_TRIGGER, &data->flags); in gp2ap020a00f_exec_cmd()
564 clear_bit(GP2AP020A00F_FLAG_PROX_TRIGGER, &data->flags); in gp2ap020a00f_exec_cmd()
565 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
570 if (test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
572 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT) in gp2ap020a00f_exec_cmd()
574 if (!gp2ap020a00f_als_enabled(data)) { in gp2ap020a00f_exec_cmd()
575 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
581 set_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
582 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
586 if (!test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
588 clear_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
589 if (!gp2ap020a00f_als_enabled(data)) { in gp2ap020a00f_exec_cmd()
590 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
596 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
600 if (test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
602 if (data->cur_opmode == GP2AP020A00F_OPMODE_PROX_DETECT) in gp2ap020a00f_exec_cmd()
604 if (!gp2ap020a00f_als_enabled(data)) { in gp2ap020a00f_exec_cmd()
605 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
611 set_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
612 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
616 if (!test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
618 clear_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
619 if (!gp2ap020a00f_als_enabled(data)) { in gp2ap020a00f_exec_cmd()
620 err = gp2ap020a00f_alter_opmode(data, in gp2ap020a00f_exec_cmd()
626 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
630 if (test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
632 if (gp2ap020a00f_als_enabled(data) || in gp2ap020a00f_exec_cmd()
633 data->cur_opmode == GP2AP020A00F_OPMODE_PS) in gp2ap020a00f_exec_cmd()
635 if (!gp2ap020a00f_prox_detect_enabled(data)) { in gp2ap020a00f_exec_cmd()
636 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_exec_cmd()
641 set_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
642 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
646 if (!test_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
648 clear_bit(GP2AP020A00F_FLAG_PROX_RISING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
649 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_exec_cmd()
653 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
657 if (test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
659 if (gp2ap020a00f_als_enabled(data) || in gp2ap020a00f_exec_cmd()
660 data->cur_opmode == GP2AP020A00F_OPMODE_PS) in gp2ap020a00f_exec_cmd()
662 if (!gp2ap020a00f_prox_detect_enabled(data)) { in gp2ap020a00f_exec_cmd()
663 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_exec_cmd()
668 set_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
669 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
673 if (!test_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags)) in gp2ap020a00f_exec_cmd()
675 clear_bit(GP2AP020A00F_FLAG_PROX_FALLING_EV, &data->flags); in gp2ap020a00f_exec_cmd()
676 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_exec_cmd()
680 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_exec_cmd()
688 static int wait_conversion_complete_irq(struct gp2ap020a00f_data *data) in wait_conversion_complete_irq() argument
692 ret = wait_event_timeout(data->data_ready_queue, in wait_conversion_complete_irq()
694 &data->flags), in wait_conversion_complete_irq()
696 clear_bit(GP2AP020A00F_FLAG_DATA_READY, &data->flags); in wait_conversion_complete_irq()
701 static int gp2ap020a00f_read_output(struct gp2ap020a00f_data *data, in gp2ap020a00f_read_output() argument
707 err = wait_conversion_complete_irq(data); in gp2ap020a00f_read_output()
709 dev_dbg(&data->client->dev, "data ready timeout\n"); in gp2ap020a00f_read_output()
711 err = regmap_bulk_read(data->regmap, output_reg, reg_buf, 2); in gp2ap020a00f_read_output()
720 static bool gp2ap020a00f_adjust_lux_mode(struct gp2ap020a00f_data *data, in gp2ap020a00f_adjust_lux_mode() argument
726 if (!test_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags)) { in gp2ap020a00f_adjust_lux_mode()
728 set_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags); in gp2ap020a00f_adjust_lux_mode()
733 clear_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags); in gp2ap020a00f_adjust_lux_mode()
742 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_adjust_lux_mode()
745 dev_err(&data->client->dev, in gp2ap020a00f_adjust_lux_mode()
750 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_adjust_lux_mode()
753 dev_err(&data->client->dev, in gp2ap020a00f_adjust_lux_mode()
759 err = regmap_update_bits(data->regmap, in gp2ap020a00f_adjust_lux_mode()
765 dev_err(&data->client->dev, in gp2ap020a00f_adjust_lux_mode()
770 err = regmap_update_bits(data->regmap, in gp2ap020a00f_adjust_lux_mode()
776 dev_err(&data->client->dev, in gp2ap020a00f_adjust_lux_mode()
781 err = regmap_update_bits(data->regmap, in gp2ap020a00f_adjust_lux_mode()
787 dev_err(&data->client->dev, in gp2ap020a00f_adjust_lux_mode()
793 if (test_bit(GP2AP020A00F_FLAG_ALS_RISING_EV, &data->flags)) { in gp2ap020a00f_adjust_lux_mode()
794 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_adjust_lux_mode()
797 dev_err(&data->client->dev, in gp2ap020a00f_adjust_lux_mode()
803 if (test_bit(GP2AP020A00F_FLAG_ALS_FALLING_EV, &data->flags)) { in gp2ap020a00f_adjust_lux_mode()
804 err = gp2ap020a00f_write_event_threshold(data, in gp2ap020a00f_adjust_lux_mode()
807 dev_err(&data->client->dev, in gp2ap020a00f_adjust_lux_mode()
819 static void gp2ap020a00f_output_to_lux(struct gp2ap020a00f_data *data, in gp2ap020a00f_output_to_lux() argument
822 if (test_bit(GP2AP020A00F_FLAG_LUX_MODE_HI, &data->flags)) in gp2ap020a00f_output_to_lux()
828 struct gp2ap020a00f_data *data = in gp2ap020a00f_iio_trigger_work() local
831 iio_trigger_poll(data->trig); in gp2ap020a00f_iio_trigger_work()
834 static irqreturn_t gp2ap020a00f_prox_sensing_handler(int irq, void *data) in gp2ap020a00f_prox_sensing_handler() argument
836 struct iio_dev *indio_dev = data; in gp2ap020a00f_prox_sensing_handler()
869 static irqreturn_t gp2ap020a00f_thresh_event_handler(int irq, void *data) in gp2ap020a00f_thresh_event_handler() argument
871 struct iio_dev *indio_dev = data; in gp2ap020a00f_thresh_event_handler()
964 static irqreturn_t gp2ap020a00f_trigger_handler(int irq, void *data) in gp2ap020a00f_trigger_handler() argument
966 struct iio_poll_func *pf = data; in gp2ap020a00f_trigger_handler()
1028 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_write_event_val() local
1034 mutex_lock(&data->lock); in gp2ap020a00f_write_event_val()
1047 &data->flags); in gp2ap020a00f_write_event_val()
1051 &data->flags); in gp2ap020a00f_write_event_val()
1059 &data->flags); in gp2ap020a00f_write_event_val()
1067 &data->flags); in gp2ap020a00f_write_event_val()
1071 data->thresh_val[thresh_val_id] = val; in gp2ap020a00f_write_event_val()
1072 err = gp2ap020a00f_write_event_threshold(data, thresh_val_id, in gp2ap020a00f_write_event_val()
1075 mutex_unlock(&data->lock); in gp2ap020a00f_write_event_val()
1087 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_read_event_val() local
1091 mutex_lock(&data->lock); in gp2ap020a00f_read_event_val()
1100 *val = data->thresh_val[GP2AP020A00F_THRESH_VAL_ID(thresh_reg_l)]; in gp2ap020a00f_read_event_val()
1103 mutex_unlock(&data->lock); in gp2ap020a00f_read_event_val()
1111 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_write_prox_event_config() local
1126 if (data->thresh_val[GP2AP020A00F_THRESH_PL] == 0) in gp2ap020a00f_write_prox_event_config()
1129 if (data->thresh_val[GP2AP020A00F_THRESH_PH] == 0) in gp2ap020a00f_write_prox_event_config()
1133 err = gp2ap020a00f_exec_cmd(data, cmd_high_ev); in gp2ap020a00f_write_prox_event_config()
1137 err = gp2ap020a00f_exec_cmd(data, cmd_low_ev); in gp2ap020a00f_write_prox_event_config()
1141 free_irq(data->client->irq, indio_dev); in gp2ap020a00f_write_prox_event_config()
1144 err = request_threaded_irq(data->client->irq, NULL, in gp2ap020a00f_write_prox_event_config()
1152 err = request_threaded_irq(data->client->irq, NULL, in gp2ap020a00f_write_prox_event_config()
1169 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_write_event_config() local
1173 mutex_lock(&data->lock); in gp2ap020a00f_write_event_config()
1183 err = gp2ap020a00f_exec_cmd(data, cmd); in gp2ap020a00f_write_event_config()
1187 err = gp2ap020a00f_exec_cmd(data, cmd); in gp2ap020a00f_write_event_config()
1194 mutex_unlock(&data->lock); in gp2ap020a00f_write_event_config()
1204 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_read_event_config() local
1207 mutex_lock(&data->lock); in gp2ap020a00f_read_event_config()
1213 &data->flags); in gp2ap020a00f_read_event_config()
1216 &data->flags); in gp2ap020a00f_read_event_config()
1221 &data->flags); in gp2ap020a00f_read_event_config()
1224 &data->flags); in gp2ap020a00f_read_event_config()
1231 mutex_unlock(&data->lock); in gp2ap020a00f_read_event_config()
1236 static int gp2ap020a00f_read_channel(struct gp2ap020a00f_data *data, in gp2ap020a00f_read_channel() argument
1256 err = gp2ap020a00f_exec_cmd(data, cmd); in gp2ap020a00f_read_channel()
1258 dev_err(&data->client->dev, in gp2ap020a00f_read_channel()
1263 err = gp2ap020a00f_read_output(data, chan->address, val); in gp2ap020a00f_read_channel()
1265 dev_err(&data->client->dev, in gp2ap020a00f_read_channel()
1268 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_read_channel()
1271 dev_err(&data->client->dev, in gp2ap020a00f_read_channel()
1276 gp2ap020a00f_output_to_lux(data, val); in gp2ap020a00f_read_channel()
1287 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_read_raw() local
1290 mutex_lock(&data->lock); in gp2ap020a00f_read_raw()
1299 err = gp2ap020a00f_read_channel(data, chan, val); in gp2ap020a00f_read_raw()
1304 mutex_unlock(&data->lock); in gp2ap020a00f_read_raw()
1400 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_buffer_postenable() local
1403 mutex_lock(&data->lock); in gp2ap020a00f_buffer_postenable()
1417 err = gp2ap020a00f_exec_cmd(data, in gp2ap020a00f_buffer_postenable()
1421 err = gp2ap020a00f_exec_cmd(data, in gp2ap020a00f_buffer_postenable()
1425 err = gp2ap020a00f_exec_cmd(data, in gp2ap020a00f_buffer_postenable()
1434 data->buffer = kmalloc(indio_dev->scan_bytes, GFP_KERNEL); in gp2ap020a00f_buffer_postenable()
1435 if (!data->buffer) { in gp2ap020a00f_buffer_postenable()
1443 mutex_unlock(&data->lock); in gp2ap020a00f_buffer_postenable()
1450 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_buffer_predisable() local
1453 mutex_lock(&data->lock); in gp2ap020a00f_buffer_predisable()
1463 err = gp2ap020a00f_exec_cmd(data, in gp2ap020a00f_buffer_predisable()
1467 err = gp2ap020a00f_exec_cmd(data, in gp2ap020a00f_buffer_predisable()
1471 err = gp2ap020a00f_exec_cmd(data, in gp2ap020a00f_buffer_predisable()
1478 kfree(data->buffer); in gp2ap020a00f_buffer_predisable()
1481 mutex_unlock(&data->lock); in gp2ap020a00f_buffer_predisable()
1498 struct gp2ap020a00f_data *data; in gp2ap020a00f_probe() local
1503 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in gp2ap020a00f_probe()
1507 data = iio_priv(indio_dev); in gp2ap020a00f_probe()
1509 data->vled_reg = devm_regulator_get(&client->dev, "vled"); in gp2ap020a00f_probe()
1510 if (IS_ERR(data->vled_reg)) in gp2ap020a00f_probe()
1511 return PTR_ERR(data->vled_reg); in gp2ap020a00f_probe()
1513 err = regulator_enable(data->vled_reg); in gp2ap020a00f_probe()
1536 data->client = client; in gp2ap020a00f_probe()
1537 data->cur_opmode = GP2AP020A00F_OPMODE_SHUTDOWN; in gp2ap020a00f_probe()
1538 data->regmap = regmap; in gp2ap020a00f_probe()
1539 init_waitqueue_head(&data->data_ready_queue); in gp2ap020a00f_probe()
1541 mutex_init(&data->lock); in gp2ap020a00f_probe()
1556 data->trig = devm_iio_trigger_alloc(&client->dev, "%s-trigger", in gp2ap020a00f_probe()
1558 if (data->trig == NULL) { in gp2ap020a00f_probe()
1576 data->trig->ops = &gp2ap020a00f_trigger_ops; in gp2ap020a00f_probe()
1577 data->trig->dev.parent = &data->client->dev; in gp2ap020a00f_probe()
1579 init_irq_work(&data->work, gp2ap020a00f_iio_trigger_work); in gp2ap020a00f_probe()
1581 err = iio_trigger_register(data->trig); in gp2ap020a00f_probe()
1594 iio_trigger_unregister(data->trig); in gp2ap020a00f_probe()
1600 regulator_disable(data->vled_reg); in gp2ap020a00f_probe()
1608 struct gp2ap020a00f_data *data = iio_priv(indio_dev); in gp2ap020a00f_remove() local
1611 err = gp2ap020a00f_set_operation_mode(data, in gp2ap020a00f_remove()
1617 iio_trigger_unregister(data->trig); in gp2ap020a00f_remove()
1620 regulator_disable(data->vled_reg); in gp2ap020a00f_remove()