Lines Matching +full:int +full:- +full:comp +full:- +full:resistor

1 // SPDX-License-Identifier: GPL-2.0
182 unsigned int val; in sx9324_phase_configuration_show()
183 int i, ret, pin_idx; in sx9324_phase_configuration_show()
186 ret = regmap_read(data->regmap, SX9324_REG_AFE_PH0 + chan->channel, &val); in sx9324_phase_configuration_show()
195 buf[len - 1] = '\n'; in sx9324_phase_configuration_show()
246 int val;
247 int val2;
283 static const unsigned int sx9324_scan_period_table[] = {
315 regmap_reg_range(SX9324_REG_IRQ_CFG2 + 1, SX9324_REG_GNRL_CTRL0 - 1),
316 regmap_reg_range(SX9324_REG_GNRL_CTRL1 + 1, SX9324_REG_AFE_CTRL0 - 1),
317 regmap_reg_range(SX9324_REG_AFE_CTRL9 + 1, SX9324_REG_PROX_CTRL0 - 1),
318 regmap_reg_range(SX9324_REG_PROX_CTRL7 + 1, SX9324_REG_ADV_CTRL0 - 1),
319 regmap_reg_range(SX9324_REG_ADV_CTRL20 + 1, SX9324_REG_PHASE_SEL - 1),
320 regmap_reg_range(SX9324_REG_SAR_LSB + 1, SX9324_REG_RESET - 1),
321 regmap_reg_range(SX9324_REG_RESET + 1, SX9324_REG_WHOAMI - 1),
322 regmap_reg_range(SX9324_REG_WHOAMI + 1, SX9324_REG_REVISION - 1),
355 static int sx9324_read_prox_data(struct sx_common_data *data, in sx9324_read_prox_data()
359 int ret; in sx9324_read_prox_data()
361 ret = regmap_write(data->regmap, SX9324_REG_PHASE_SEL, chan->channel); in sx9324_read_prox_data()
365 return regmap_bulk_read(data->regmap, chan->address, val, sizeof(*val)); in sx9324_read_prox_data()
372 static int sx9324_wait_for_sample(struct sx_common_data *data) in sx9324_wait_for_sample()
374 int ret; in sx9324_wait_for_sample()
375 unsigned int val; in sx9324_wait_for_sample()
377 ret = regmap_read(data->regmap, SX9324_REG_GNRL_CTRL0, &val); in sx9324_wait_for_sample()
387 static int sx9324_read_gain(struct sx_common_data *data, in sx9324_read_gain()
388 const struct iio_chan_spec *chan, int *val) in sx9324_read_gain()
390 unsigned int reg, regval; in sx9324_read_gain()
391 int ret; in sx9324_read_gain()
393 reg = SX9324_REG_PROX_CTRL0 + chan->channel / 2; in sx9324_read_gain()
394 ret = regmap_read(data->regmap, reg, &regval); in sx9324_read_gain()
400 regval--; in sx9324_read_gain()
403 return -EINVAL; in sx9324_read_gain()
410 static int sx9324_read_samp_freq(struct sx_common_data *data, in sx9324_read_samp_freq()
411 int *val, int *val2) in sx9324_read_samp_freq()
413 int ret; in sx9324_read_samp_freq()
414 unsigned int regval; in sx9324_read_samp_freq()
416 ret = regmap_read(data->regmap, SX9324_REG_GNRL_CTRL0, &regval); in sx9324_read_samp_freq()
427 static int sx9324_read_raw(struct iio_dev *indio_dev, in sx9324_read_raw()
429 int *val, int *val2, long mask) in sx9324_read_raw()
432 int ret; in sx9324_read_raw()
437 return -EBUSY; in sx9324_read_raw()
444 return -EBUSY; in sx9324_read_raw()
452 return -EINVAL; in sx9324_read_raw()
456 static const int sx9324_gain_vals[] = { 1, 2, 4, 8 };
458 static int sx9324_read_avail(struct iio_dev *indio_dev, in sx9324_read_avail()
460 const int **vals, int *type, int *length, in sx9324_read_avail()
463 if (chan->type != IIO_PROXIMITY) in sx9324_read_avail()
464 return -EINVAL; in sx9324_read_avail()
475 *vals = (int *)sx9324_samp_freq_table; in sx9324_read_avail()
478 return -EINVAL; in sx9324_read_avail()
482 static int sx9324_set_samp_freq(struct sx_common_data *data, in sx9324_set_samp_freq()
483 int val, int val2) in sx9324_set_samp_freq()
485 int i; in sx9324_set_samp_freq()
493 return -EINVAL; in sx9324_set_samp_freq()
495 guard(mutex)(&data->mutex); in sx9324_set_samp_freq()
497 return regmap_update_bits(data->regmap, in sx9324_set_samp_freq()
502 static int sx9324_read_thresh(struct sx_common_data *data, in sx9324_read_thresh()
503 const struct iio_chan_spec *chan, int *val) in sx9324_read_thresh()
505 unsigned int regval; in sx9324_read_thresh()
506 unsigned int reg; in sx9324_read_thresh()
507 int ret; in sx9324_read_thresh()
514 reg = SX9324_REG_PROX_CTRL6 + chan->channel / 2; in sx9324_read_thresh()
515 ret = regmap_read(data->regmap, reg, &regval); in sx9324_read_thresh()
527 static int sx9324_read_hysteresis(struct sx_common_data *data, in sx9324_read_hysteresis()
528 const struct iio_chan_spec *chan, int *val) in sx9324_read_hysteresis()
530 unsigned int regval, pthresh; in sx9324_read_hysteresis()
531 int ret; in sx9324_read_hysteresis()
537 ret = regmap_read(data->regmap, SX9324_REG_PROX_CTRL5, &regval); in sx9324_read_hysteresis()
545 *val = pthresh >> (5 - regval); in sx9324_read_hysteresis()
550 static int sx9324_read_far_debounce(struct sx_common_data *data, int *val) in sx9324_read_far_debounce()
552 unsigned int regval; in sx9324_read_far_debounce()
553 int ret; in sx9324_read_far_debounce()
555 ret = regmap_read(data->regmap, SX9324_REG_PROX_CTRL5, &regval); in sx9324_read_far_debounce()
568 static int sx9324_read_close_debounce(struct sx_common_data *data, int *val) in sx9324_read_close_debounce()
570 unsigned int regval; in sx9324_read_close_debounce()
571 int ret; in sx9324_read_close_debounce()
573 ret = regmap_read(data->regmap, SX9324_REG_PROX_CTRL5, &regval); in sx9324_read_close_debounce()
586 static int sx9324_read_event_val(struct iio_dev *indio_dev, in sx9324_read_event_val()
590 enum iio_event_info info, int *val, int *val2) in sx9324_read_event_val()
594 if (chan->type != IIO_PROXIMITY) in sx9324_read_event_val()
595 return -EINVAL; in sx9324_read_event_val()
607 return -EINVAL; in sx9324_read_event_val()
612 return -EINVAL; in sx9324_read_event_val()
616 static int sx9324_write_thresh(struct sx_common_data *data, in sx9324_write_thresh()
617 const struct iio_chan_spec *chan, int _val) in sx9324_write_thresh()
619 unsigned int reg, val = _val; in sx9324_write_thresh()
621 reg = SX9324_REG_PROX_CTRL6 + chan->channel / 2; in sx9324_write_thresh()
627 return -EINVAL; in sx9324_write_thresh()
629 guard(mutex)(&data->mutex); in sx9324_write_thresh()
631 return regmap_write(data->regmap, reg, val); in sx9324_write_thresh()
634 static int sx9324_write_hysteresis(struct sx_common_data *data, in sx9324_write_hysteresis()
635 const struct iio_chan_spec *chan, int _val) in sx9324_write_hysteresis()
637 unsigned int hyst, val = _val; in sx9324_write_hysteresis()
638 int ret, pthresh; in sx9324_write_hysteresis()
653 return -EINVAL; in sx9324_write_hysteresis()
656 guard(mutex)(&data->mutex); in sx9324_write_hysteresis()
658 return regmap_update_bits(data->regmap, SX9324_REG_PROX_CTRL5, in sx9324_write_hysteresis()
662 static int sx9324_write_far_debounce(struct sx_common_data *data, int _val) in sx9324_write_far_debounce()
664 unsigned int regval, val = _val; in sx9324_write_far_debounce()
669 return -EINVAL; in sx9324_write_far_debounce()
673 guard(mutex)(&data->mutex); in sx9324_write_far_debounce()
675 return regmap_update_bits(data->regmap, SX9324_REG_PROX_CTRL5, in sx9324_write_far_debounce()
680 static int sx9324_write_close_debounce(struct sx_common_data *data, int _val) in sx9324_write_close_debounce()
682 unsigned int regval, val = _val; in sx9324_write_close_debounce()
687 return -EINVAL; in sx9324_write_close_debounce()
691 guard(mutex)(&data->mutex); in sx9324_write_close_debounce()
693 return regmap_update_bits(data->regmap, SX9324_REG_PROX_CTRL5, in sx9324_write_close_debounce()
698 static int sx9324_write_event_val(struct iio_dev *indio_dev, in sx9324_write_event_val()
702 enum iio_event_info info, int val, int val2) in sx9324_write_event_val()
706 if (chan->type != IIO_PROXIMITY) in sx9324_write_event_val()
707 return -EINVAL; in sx9324_write_event_val()
719 return -EINVAL; in sx9324_write_event_val()
724 return -EINVAL; in sx9324_write_event_val()
728 static int sx9324_write_gain(struct sx_common_data *data, in sx9324_write_gain()
729 const struct iio_chan_spec *chan, int val) in sx9324_write_gain()
731 unsigned int gain, reg; in sx9324_write_gain()
733 reg = SX9324_REG_PROX_CTRL0 + chan->channel / 2; in sx9324_write_gain()
737 return -EINVAL; in sx9324_write_gain()
741 guard(mutex)(&data->mutex); in sx9324_write_gain()
743 return regmap_update_bits(data->regmap, reg, in sx9324_write_gain()
748 static int sx9324_write_raw(struct iio_dev *indio_dev, in sx9324_write_raw()
749 const struct iio_chan_spec *chan, int val, int val2, in sx9324_write_raw()
760 return -EINVAL; in sx9324_write_raw()
838 static int sx9324_init_compensation(struct iio_dev *indio_dev) in sx9324_init_compensation()
841 unsigned int val; in sx9324_init_compensation()
842 int ret; in sx9324_init_compensation()
845 ret = regmap_set_bits(data->regmap, SX9324_REG_STAT2, in sx9324_init_compensation()
850 return regmap_read_poll_timeout(data->regmap, SX9324_REG_STAT2, val, in sx9324_init_compensation()
859 unsigned int pin_defs[SX9324_NUM_PINS]; in sx9324_parse_phase_prop()
860 int count, ret, pin; in sx9324_parse_phase_prop()
865 return reg_def->def; in sx9324_parse_phase_prop()
869 return reg_def->def; in sx9324_parse_phase_prop()
886 if (!reg_def->property || !adev) in sx_common_get_raw_register_config()
889 snprintf(prop, ARRAY_SIZE(prop), "%s,reg_%s", acpi_device_hid(adev), reg_def->property); in sx_common_get_raw_register_config()
894 reg_def->def = raw; in sx_common_get_raw_register_config()
899 sx9324_get_default_reg(struct device *dev, int idx, in sx9324_get_default_reg()
904 static const char * const sx9324_csidle[] = { "hi-z", "hi-z", "gnd", in sx9324_get_default_reg()
908 int ret; in sx9324_get_default_reg()
913 switch (reg_def->reg) { in sx9324_get_default_reg()
915 reg_def->def = sx9324_parse_phase_prop(dev, reg_def, in sx9324_get_default_reg()
916 "semtech,ph0-pin"); in sx9324_get_default_reg()
919 reg_def->def = sx9324_parse_phase_prop(dev, reg_def, in sx9324_get_default_reg()
920 "semtech,ph1-pin"); in sx9324_get_default_reg()
923 reg_def->def = sx9324_parse_phase_prop(dev, reg_def, in sx9324_get_default_reg()
924 "semtech,ph2-pin"); in sx9324_get_default_reg()
927 reg_def->def = sx9324_parse_phase_prop(dev, reg_def, in sx9324_get_default_reg()
928 "semtech,ph3-pin"); in sx9324_get_default_reg()
931 ret = device_property_match_property_string(dev, "semtech,cs-idle-sleep", in sx9324_get_default_reg()
935 reg_def->def &= ~SX9324_REG_AFE_CTRL0_CSIDLE_MASK; in sx9324_get_default_reg()
936 reg_def->def |= ret << SX9324_REG_AFE_CTRL0_CSIDLE_SHIFT; in sx9324_get_default_reg()
939 ret = device_property_match_property_string(dev, "semtech,int-comp-resistor", in sx9324_get_default_reg()
943 reg_def->def &= ~SX9324_REG_AFE_CTRL0_RINT_MASK; in sx9324_get_default_reg()
944 reg_def->def |= ret << SX9324_REG_AFE_CTRL0_RINT_SHIFT; in sx9324_get_default_reg()
949 if (reg_def->reg == SX9324_REG_AFE_CTRL4) in sx9324_get_default_reg()
950 prop = "semtech,ph01-resolution"; in sx9324_get_default_reg()
952 prop = "semtech,ph23-resolution"; in sx9324_get_default_reg()
958 raw = ilog2(raw) - 3; in sx9324_get_default_reg()
960 reg_def->def &= ~SX9324_REG_AFE_CTRL4_RESOLUTION_MASK; in sx9324_get_default_reg()
961 reg_def->def |= FIELD_PREP(SX9324_REG_AFE_CTRL4_RESOLUTION_MASK, in sx9324_get_default_reg()
966 "semtech,input-precharge-resistor-ohms", in sx9324_get_default_reg()
971 reg_def->def &= ~SX9324_REG_AFE_CTRL8_RESFILTIN_MASK; in sx9324_get_default_reg()
972 reg_def->def |= FIELD_PREP(SX9324_REG_AFE_CTRL8_RESFILTIN_MASK, in sx9324_get_default_reg()
978 "semtech,input-analog-gain", &raw); in sx9324_get_default_reg()
983 * +---------+----------------+----------------+ in sx9324_get_default_reg()
985 * +---------+----------------+----------------+ in sx9324_get_default_reg()
990 * +---------+----------------+----------------+ in sx9324_get_default_reg()
992 reg_def->def &= ~SX9324_REG_AFE_CTRL9_AGAIN_MASK; in sx9324_get_default_reg()
993 reg_def->def |= FIELD_PREP(SX9324_REG_AFE_CTRL9_AGAIN_MASK, in sx9324_get_default_reg()
998 ret = device_property_read_u32(dev, "semtech,startup-sensor", in sx9324_get_default_reg()
1003 reg_def->def &= ~SX9324_REG_ADV_CTRL5_STARTUPSENS_MASK; in sx9324_get_default_reg()
1004 reg_def->def |= FIELD_PREP(SX9324_REG_ADV_CTRL5_STARTUPSENS_MASK, in sx9324_get_default_reg()
1008 ret = device_property_read_u32(dev, "semtech,avg-pos-strength", in sx9324_get_default_reg()
1014 raw = clamp(ilog2(pos), 3, 11) - (pos >= 32 ? 4 : 3); in sx9324_get_default_reg()
1016 reg_def->def &= ~SX9324_REG_PROX_CTRL4_AVGPOSFILT_MASK; in sx9324_get_default_reg()
1017 reg_def->def |= FIELD_PREP(SX9324_REG_PROX_CTRL4_AVGPOSFILT_MASK, in sx9324_get_default_reg()
1022 if (reg_def->reg == SX9324_REG_PROX_CTRL0) in sx9324_get_default_reg()
1023 prop = "semtech,ph01-proxraw-strength"; in sx9324_get_default_reg()
1025 prop = "semtech,ph23-proxraw-strength"; in sx9324_get_default_reg()
1030 reg_def->def &= ~SX9324_REG_PROX_CTRL0_RAWFILT_MASK; in sx9324_get_default_reg()
1031 reg_def->def |= FIELD_PREP(SX9324_REG_PROX_CTRL0_RAWFILT_MASK, in sx9324_get_default_reg()
1038 static int sx9324_check_whoami(struct device *dev, in sx9324_check_whoami()
1045 indio_dev->name = "sx9324"; in sx9324_check_whoami()
1081 static int sx9324_probe(struct i2c_client *client) in sx9324_probe()
1086 static int sx9324_suspend(struct device *dev) in sx9324_suspend()
1089 unsigned int regval; in sx9324_suspend()
1090 int ret; in sx9324_suspend()
1092 disable_irq_nosync(data->client->irq); in sx9324_suspend()
1094 guard(mutex)(&data->mutex); in sx9324_suspend()
1095 ret = regmap_read(data->regmap, SX9324_REG_GNRL_CTRL1, &regval); in sx9324_suspend()
1099 data->suspend_ctrl = in sx9324_suspend()
1104 return regmap_write(data->regmap, SX9324_REG_GNRL_CTRL1, 0); in sx9324_suspend()
1107 static int sx9324_resume(struct device *dev) in sx9324_resume()
1111 scoped_guard(mutex, &data->mutex) { in sx9324_resume()
1112 int ret = regmap_write(data->regmap, SX9324_REG_GNRL_CTRL1, in sx9324_resume()
1113 data->suspend_ctrl | in sx9324_resume()
1119 enable_irq(data->client->irq); in sx9324_resume()