Lines Matching +full:avg +full:- +full:pos +full:- +full:strength

1 // SPDX-License-Identifier: GPL-2.0
8 * linux-driver-SX9310_NoSmartHSensing>.
264 ret = regmap_write(data->regmap, SX9310_REG_SENSOR_SEL, chan->channel); in sx9310_read_prox_data()
268 return regmap_bulk_read(data->regmap, chan->address, val, sizeof(*val)); in sx9310_read_prox_data()
280 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &val); in sx9310_wait_for_sample()
297 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL3, &regval); in sx9310_read_gain()
301 switch (chan->channel) { in sx9310_read_gain()
311 return -EINVAL; in sx9310_read_gain()
324 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &regval); in sx9310_read_samp_freq()
342 if (chan->type != IIO_PROXIMITY) in sx9310_read_raw()
343 return -EINVAL; in sx9310_read_raw()
365 return -EINVAL; in sx9310_read_raw()
376 if (chan->type != IIO_PROXIMITY) in sx9310_read_avail()
377 return -EINVAL; in sx9310_read_avail()
391 return -EINVAL; in sx9310_read_avail()
410 return -EINVAL; in sx9310_get_thresh_reg()
421 reg = ret = sx9310_get_thresh_reg(chan->channel); in sx9310_read_thresh()
425 ret = regmap_read(data->regmap, reg, &regval); in sx9310_read_thresh()
431 return -EINVAL; in sx9310_read_thresh()
447 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL10, &regval); in sx9310_read_hysteresis()
456 *val = pthresh >> (5 - regval); in sx9310_read_hysteresis()
466 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL10, &regval); in sx9310_read_far_debounce()
484 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL10, &regval); in sx9310_read_close_debounce()
505 if (chan->type != IIO_PROXIMITY) in sx9310_read_event_val()
506 return -EINVAL; in sx9310_read_event_val()
518 return -EINVAL; in sx9310_read_event_val()
523 return -EINVAL; in sx9310_read_event_val()
534 reg = ret = sx9310_get_thresh_reg(chan->channel); in sx9310_write_thresh()
546 return -EINVAL; in sx9310_write_thresh()
549 mutex_lock(&data->mutex); in sx9310_write_thresh()
550 ret = regmap_update_bits(data->regmap, reg, in sx9310_write_thresh()
552 mutex_unlock(&data->mutex); in sx9310_write_thresh()
576 return -EINVAL; in sx9310_write_hysteresis()
579 mutex_lock(&data->mutex); in sx9310_write_hysteresis()
580 ret = regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL10, in sx9310_write_hysteresis()
582 mutex_unlock(&data->mutex); in sx9310_write_hysteresis()
595 return -EINVAL; in sx9310_write_far_debounce()
599 mutex_lock(&data->mutex); in sx9310_write_far_debounce()
600 ret = regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL10, in sx9310_write_far_debounce()
603 mutex_unlock(&data->mutex); in sx9310_write_far_debounce()
616 return -EINVAL; in sx9310_write_close_debounce()
620 mutex_lock(&data->mutex); in sx9310_write_close_debounce()
621 ret = regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL10, in sx9310_write_close_debounce()
624 mutex_unlock(&data->mutex); in sx9310_write_close_debounce()
637 if (chan->type != IIO_PROXIMITY) in sx9310_write_event_val()
638 return -EINVAL; in sx9310_write_event_val()
650 return -EINVAL; in sx9310_write_event_val()
655 return -EINVAL; in sx9310_write_event_val()
669 return -EINVAL; in sx9310_set_samp_freq()
671 mutex_lock(&data->mutex); in sx9310_set_samp_freq()
674 data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_set_samp_freq()
678 mutex_unlock(&data->mutex); in sx9310_set_samp_freq()
691 switch (chan->channel) { in sx9310_write_gain()
703 return -EINVAL; in sx9310_write_gain()
706 mutex_lock(&data->mutex); in sx9310_write_gain()
707 ret = regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL3, mask, in sx9310_write_gain()
709 mutex_unlock(&data->mutex); in sx9310_write_gain()
720 if (chan->type != IIO_PROXIMITY) in sx9310_write_raw()
721 return -EINVAL; in sx9310_write_raw()
729 return -EINVAL; in sx9310_write_raw()
783 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &ctrl0); in sx9310_init_compensation()
788 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_init_compensation()
793 ret = regmap_read_poll_timeout(data->regmap, SX9310_REG_STAT1, val, in sx9310_init_compensation()
799 regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0); in sx9310_init_compensation()
808 u32 start = 0, raw = 0, pos = 0; in sx9310_get_default_reg() local
814 switch (reg_def->reg) { in sx9310_get_default_reg()
816 if (device_property_read_bool(dev, "semtech,cs0-ground")) { in sx9310_get_default_reg()
817 reg_def->def &= ~SX9310_REG_PROX_CTRL2_SHIELDEN_MASK; in sx9310_get_default_reg()
818 reg_def->def |= SX9310_REG_PROX_CTRL2_SHIELDEN_GROUND; in sx9310_get_default_reg()
821 count = device_property_count_u32(dev, "semtech,combined-sensors"); in sx9310_get_default_reg()
824 ret = device_property_read_u32_array(dev, "semtech,combined-sensors", in sx9310_get_default_reg()
832 reg_def->def &= ~SX9310_REG_PROX_CTRL2_COMBMODE_MASK; in sx9310_get_default_reg()
834 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS0_CS1_CS2_CS3; in sx9310_get_default_reg()
836 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS1_CS2; in sx9310_get_default_reg()
838 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS0_CS1; in sx9310_get_default_reg()
840 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS3; in sx9310_get_default_reg()
848 reg_def->def &= ~SX9310_REG_PROX_CTRL4_RESOLUTION_MASK; in sx9310_get_default_reg()
850 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_COARSEST; in sx9310_get_default_reg()
851 else if (!strcmp(res, "very-coarse")) in sx9310_get_default_reg()
852 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_VERY_COARSE; in sx9310_get_default_reg()
854 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_COARSE; in sx9310_get_default_reg()
855 else if (!strcmp(res, "medium-coarse")) in sx9310_get_default_reg()
856 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_MEDIUM_COARSE; in sx9310_get_default_reg()
858 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_MEDIUM; in sx9310_get_default_reg()
860 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_FINE; in sx9310_get_default_reg()
861 else if (!strcmp(res, "very-fine")) in sx9310_get_default_reg()
862 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_VERY_FINE; in sx9310_get_default_reg()
864 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_FINEST; in sx9310_get_default_reg()
868 ret = device_property_read_u32(dev, "semtech,startup-sensor", &start); in sx9310_get_default_reg()
871 reg_def->def); in sx9310_get_default_reg()
874 reg_def->def &= ~SX9310_REG_PROX_CTRL5_STARTUPSENS_MASK; in sx9310_get_default_reg()
875 reg_def->def |= FIELD_PREP(SX9310_REG_PROX_CTRL5_STARTUPSENS_MASK, in sx9310_get_default_reg()
878 ret = device_property_read_u32(dev, "semtech,proxraw-strength", &raw); in sx9310_get_default_reg()
881 reg_def->def); in sx9310_get_default_reg()
886 reg_def->def &= ~SX9310_REG_PROX_CTRL5_RAWFILT_MASK; in sx9310_get_default_reg()
887 reg_def->def |= FIELD_PREP(SX9310_REG_PROX_CTRL5_RAWFILT_MASK, in sx9310_get_default_reg()
891 ret = device_property_read_u32(dev, "semtech,avg-pos-strength", &pos); in sx9310_get_default_reg()
896 pos = clamp(ilog2(pos), 3, 11) - (pos >= 32 ? 4 : 3); in sx9310_get_default_reg()
897 reg_def->def &= ~SX9310_REG_PROX_CTRL7_AVGPOSFILT_MASK; in sx9310_get_default_reg()
898 reg_def->def |= FIELD_PREP(SX9310_REG_PROX_CTRL7_AVGPOSFILT_MASK, in sx9310_get_default_reg()
899 pos); in sx9310_get_default_reg()
914 ret = regmap_read(data->regmap, SX9310_REG_WHOAMI, &whoami); in sx9310_check_whoami()
919 if (ddata->whoami != whoami) in sx9310_check_whoami()
920 return -ENODEV; in sx9310_check_whoami()
922 indio_dev->name = ddata->name; in sx9310_check_whoami()
970 disable_irq_nosync(data->client->irq); in sx9310_suspend()
972 mutex_lock(&data->mutex); in sx9310_suspend()
973 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_suspend()
974 &data->suspend_ctrl); in sx9310_suspend()
978 ctrl0 = data->suspend_ctrl & ~SX9310_REG_PROX_CTRL0_SENSOREN_MASK; in sx9310_suspend()
979 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0); in sx9310_suspend()
983 ret = regmap_write(data->regmap, SX9310_REG_PAUSE, 0); in sx9310_suspend()
986 mutex_unlock(&data->mutex); in sx9310_suspend()
995 mutex_lock(&data->mutex); in sx9310_resume()
996 ret = regmap_write(data->regmap, SX9310_REG_PAUSE, 1); in sx9310_resume()
1000 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_resume()
1001 data->suspend_ctrl); in sx9310_resume()
1004 mutex_unlock(&data->mutex); in sx9310_resume()
1008 enable_irq(data->client->irq); in sx9310_resume()